forgejo-runner/client/client.go
2022-11-24 15:37:14 +08:00

53 lines
1.4 KiB
Go

package client
import (
"context"
runnerv1 "gitea.com/gitea/proto-go/runner/v1"
)
type Filter struct {
Kind string `json:"kind"`
Type string `json:"type"`
OS string `json:"os"`
Arch string `json:"arch"`
Capacity int `json:"capacity"`
}
// A Client manages communication with the runner.
type Client interface {
// Ping sends a ping message to the server to test connectivity.
Ping(ctx context.Context, machine string) error
// Register for new runner.
Register(ctx context.Context, args *runnerv1.RegisterRequest) (*runnerv1.Runner, error)
// Request requests the next available build stage for execution.
Request(ctx context.Context, args *runnerv1.RequestRequest) (*runnerv1.Stage, error)
// Update updates the build stage.
Update(ctxt context.Context, args *runnerv1.UpdateRequest) error
// UpdateStep updates the build step.
UpdateStep(ctx context.Context, args *runnerv1.UpdateStepRequest) error
}
type contextKey string
const clientContextKey = contextKey("gitea.rpc.client")
// FromContext returns the client from the context.
func FromContext(ctx context.Context) Client {
val := ctx.Value(clientContextKey)
if val != nil {
if c, ok := val.(Client); ok {
return c
}
}
return nil
}
// WithClient returns a new context with the given client.
func WithClient(ctx context.Context, c Client) context.Context {
return context.WithValue(ctx, clientContextKey, c)
}