mirror of https://code.forgejo.org/forgejo/runner
54 lines
1.4 KiB
Go
54 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)
|
|
}
|