mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-22 01:41:02 +00:00
Report custom labels set by agent admins back (#4141)
This commit is contained in:
parent
0f7b607a40
commit
f8cfda1ea9
22 changed files with 441 additions and 234 deletions
|
@ -480,12 +480,15 @@ func (c *client) sendLogs(ctx context.Context, entries []*proto.LogEntry) error
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *client) RegisterAgent(ctx context.Context, platform, backend, version string, capacity int) (int64, error) {
|
func (c *client) RegisterAgent(ctx context.Context, info rpc.AgentInfo) (int64, error) {
|
||||||
req := new(proto.RegisterAgentRequest)
|
req := new(proto.RegisterAgentRequest)
|
||||||
req.Platform = platform
|
req.Info = &proto.AgentInfo{
|
||||||
req.Backend = backend
|
Platform: info.Platform,
|
||||||
req.Version = version
|
Backend: info.Backend,
|
||||||
req.Capacity = int32(capacity)
|
Version: info.Version,
|
||||||
|
Capacity: int32(info.Capacity),
|
||||||
|
CustomLabels: info.CustomLabels,
|
||||||
|
}
|
||||||
|
|
||||||
res, err := c.client.RegisterAgent(ctx, req)
|
res, err := c.client.RegisterAgent(ctx, req)
|
||||||
return res.GetAgentId(), err
|
return res.GetAgentId(), err
|
||||||
|
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"maps"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -198,7 +199,22 @@ func run(ctx context.Context, c *cli.Command, backends []types.Backend) error {
|
||||||
log.Debug().Msgf("loaded %s backend engine", backendEngine.Name())
|
log.Debug().Msgf("loaded %s backend engine", backendEngine.Name())
|
||||||
|
|
||||||
maxWorkflows := int(c.Int("max-workflows"))
|
maxWorkflows := int(c.Int("max-workflows"))
|
||||||
agentConfig.AgentID, err = client.RegisterAgent(grpcCtx, engInfo.Platform, backendEngine.Name(), version.String(), maxWorkflows) //nolint:contextcheck
|
|
||||||
|
customLabels := make(map[string]string)
|
||||||
|
if err := stringSliceAddToMap(c.StringSlice("labels"), customLabels); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(customLabels) != 0 {
|
||||||
|
log.Debug().Msgf("custom labels detected: %#v", customLabels)
|
||||||
|
}
|
||||||
|
|
||||||
|
agentConfig.AgentID, err = client.RegisterAgent(grpcCtx, rpc.AgentInfo{ //nolint:contextcheck
|
||||||
|
Version: version.String(),
|
||||||
|
Backend: backendEngine.Name(),
|
||||||
|
Platform: engInfo.Platform,
|
||||||
|
Capacity: maxWorkflows,
|
||||||
|
CustomLabels: customLabels,
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -210,7 +226,7 @@ func run(ctx context.Context, c *cli.Command, backends []types.Backend) error {
|
||||||
<-agentCtx.Done()
|
<-agentCtx.Done()
|
||||||
// Remove stateless agents from server
|
// Remove stateless agents from server
|
||||||
if !agentConfigPersisted.Load() {
|
if !agentConfigPersisted.Load() {
|
||||||
log.Debug().Msg("unregistering agent from server ...")
|
log.Debug().Msg("unregister agent from server ...")
|
||||||
// we want to run it explicit run when context got canceled so run it in background
|
// we want to run it explicit run when context got canceled so run it in background
|
||||||
err := client.UnregisterAgent(grpcClientCtx)
|
err := client.UnregisterAgent(grpcClientCtx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -228,16 +244,15 @@ func run(ctx context.Context, c *cli.Command, backends []types.Backend) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set default labels ...
|
||||||
labels := map[string]string{
|
labels := map[string]string{
|
||||||
"hostname": hostname,
|
"hostname": hostname,
|
||||||
"platform": engInfo.Platform,
|
"platform": engInfo.Platform,
|
||||||
"backend": backendEngine.Name(),
|
"backend": backendEngine.Name(),
|
||||||
"repo": "*", // allow all repos by default
|
"repo": "*", // allow all repos by default
|
||||||
}
|
}
|
||||||
|
// ... and let it overwrite by custom ones
|
||||||
if err := stringSliceAddToMap(c.StringSlice("filter"), labels); err != nil {
|
maps.Copy(labels, customLabels)
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug().Any("labels", labels).Msgf("agent configured with labels")
|
log.Debug().Any("labels", labels).Msgf("agent configured with labels")
|
||||||
|
|
||||||
|
|
|
@ -60,8 +60,9 @@ var flags = []cli.Flag{
|
||||||
Value: "/etc/woodpecker/agent.conf",
|
Value: "/etc/woodpecker/agent.conf",
|
||||||
},
|
},
|
||||||
&cli.StringSliceFlag{
|
&cli.StringSliceFlag{
|
||||||
Sources: cli.EnvVars("WOODPECKER_FILTER_LABELS"),
|
Sources: cli.EnvVars("WOODPECKER_AGENT_LABELS", "WOODPECKER_FILTER_LABELS"), // remove WOODPECKER_FILTER_LABELS in v4.x
|
||||||
Name: "filter",
|
Name: "labels",
|
||||||
|
Aliases: []string{"filter"}, // remove in v4.x
|
||||||
Usage: "List of labels to filter tasks on. An agent must be assigned every tag listed in a task to be selected.",
|
Usage: "List of labels to filter tasks on. An agent must be assigned every tag listed in a task to be selected.",
|
||||||
},
|
},
|
||||||
&cli.IntFlag{
|
&cli.IntFlag{
|
||||||
|
|
|
@ -4589,6 +4589,12 @@ const docTemplate = `{
|
||||||
"created": {
|
"created": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"custom_labels": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
"id": {
|
"id": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
|
|
@ -610,7 +610,7 @@ For more details check the [matrix build docs](./30-matrix-workflows.md).
|
||||||
|
|
||||||
You can set labels for your workflow to select an agent to execute the workflow on. An agent will pick up and run a workflow when **every** label assigned to it matches the agents labels.
|
You can set labels for your workflow to select an agent to execute the workflow on. An agent will pick up and run a workflow when **every** label assigned to it matches the agents labels.
|
||||||
|
|
||||||
To set additional agent labels, check the [agent configuration options](../30-administration/15-agent-config.md#woodpecker_filter_labels). Agents will have at least four default labels: `platform=agent-os/agent-arch`, `hostname=my-agent`, `backend=docker` (type of the agent backend) and `repo=*`. Agents can use a `*` as a wildcard for a label. For example `repo=*` will match every repo.
|
To set additional agent labels, check the [agent configuration options](../30-administration/15-agent-config.md#woodpecker_agent_labels). Agents will have at least four default labels: `platform=agent-os/agent-arch`, `hostname=my-agent`, `backend=docker` (type of the agent backend) and `repo=*`. Agents can use a `*` as a wildcard for a label. For example `repo=*` will match every repo.
|
||||||
|
|
||||||
Workflow labels with an empty value will be ignored.
|
Workflow labels with an empty value will be ignored.
|
||||||
By default, each workflow has at least the `repo=your-user/your-repo-name` label. If you have set the [platform attribute](#platform) for your workflow it will have a label like `platform=your-os/your-arch` as well.
|
By default, each workflow has at least the `repo=your-user/your-repo-name` label. If you have set the [platform attribute](#platform) for your workflow it will have a label like `platform=your-os/your-arch` as well.
|
||||||
|
|
|
@ -120,11 +120,14 @@ Configures the path of the agent config file.
|
||||||
|
|
||||||
Configures the number of parallel workflows.
|
Configures the number of parallel workflows.
|
||||||
|
|
||||||
### `WOODPECKER_FILTER_LABELS`
|
### `WOODPECKER_AGENT_LABELS`
|
||||||
|
|
||||||
> Default: empty
|
> Default: empty
|
||||||
|
|
||||||
Configures labels to filter pipeline pick up. Use a list of key-value pairs like `key=value,second-key=*`. `*` can be used as a wildcard. By default, agents provide three additional labels `platform=os/arch`, `hostname=my-agent` and `repo=*` which can be overwritten if needed. To learn how labels work, check out the [pipeline syntax page](../20-usage/20-workflow-syntax.md#labels).
|
Configures custom labels for the agent, to let workflows filter by it.
|
||||||
|
Use a list of key-value pairs like `key=value,second-key=*`. `*` can be used as a wildcard.
|
||||||
|
By default, agents provide three additional labels `platform=os/arch`, `hostname=my-agent` and `repo=*` which can be overwritten if needed.
|
||||||
|
To learn how labels work, check out the [pipeline syntax page](../20-usage/20-workflow-syntax.md#labels).
|
||||||
|
|
||||||
### `WOODPECKER_HEALTHCHECK`
|
### `WOODPECKER_HEALTHCHECK`
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ Some versions need some changes to the server configuration or the pipeline conf
|
||||||
|
|
||||||
## `next`
|
## `next`
|
||||||
|
|
||||||
|
- Deprecate `WOODPECKER_FILTER_LABELS` use `WOODPECKER_AGENT_LABELS`
|
||||||
- Removed built-in environment variables:
|
- Removed built-in environment variables:
|
||||||
- `CI_COMMIT_URL` use `CI_PIPELINE_FORGE_URL`
|
- `CI_COMMIT_URL` use `CI_PIPELINE_FORGE_URL`
|
||||||
- `CI_STEP_FINISHED` as empty during execution
|
- `CI_STEP_FINISHED` as empty during execution
|
||||||
|
|
|
@ -106,9 +106,9 @@ func (_m *Peer) Next(c context.Context, f rpc.Filter) (*rpc.Workflow, error) {
|
||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterAgent provides a mock function with given fields: ctx, platform, backend, version, capacity
|
// RegisterAgent provides a mock function with given fields: ctx, info
|
||||||
func (_m *Peer) RegisterAgent(ctx context.Context, platform string, backend string, version string, capacity int) (int64, error) {
|
func (_m *Peer) RegisterAgent(ctx context.Context, info rpc.AgentInfo) (int64, error) {
|
||||||
ret := _m.Called(ctx, platform, backend, version, capacity)
|
ret := _m.Called(ctx, info)
|
||||||
|
|
||||||
if len(ret) == 0 {
|
if len(ret) == 0 {
|
||||||
panic("no return value specified for RegisterAgent")
|
panic("no return value specified for RegisterAgent")
|
||||||
|
@ -116,17 +116,17 @@ func (_m *Peer) RegisterAgent(ctx context.Context, platform string, backend stri
|
||||||
|
|
||||||
var r0 int64
|
var r0 int64
|
||||||
var r1 error
|
var r1 error
|
||||||
if rf, ok := ret.Get(0).(func(context.Context, string, string, string, int) (int64, error)); ok {
|
if rf, ok := ret.Get(0).(func(context.Context, rpc.AgentInfo) (int64, error)); ok {
|
||||||
return rf(ctx, platform, backend, version, capacity)
|
return rf(ctx, info)
|
||||||
}
|
}
|
||||||
if rf, ok := ret.Get(0).(func(context.Context, string, string, string, int) int64); ok {
|
if rf, ok := ret.Get(0).(func(context.Context, rpc.AgentInfo) int64); ok {
|
||||||
r0 = rf(ctx, platform, backend, version, capacity)
|
r0 = rf(ctx, info)
|
||||||
} else {
|
} else {
|
||||||
r0 = ret.Get(0).(int64)
|
r0 = ret.Get(0).(int64)
|
||||||
}
|
}
|
||||||
|
|
||||||
if rf, ok := ret.Get(1).(func(context.Context, string, string, string, int) error); ok {
|
if rf, ok := ret.Get(1).(func(context.Context, rpc.AgentInfo) error); ok {
|
||||||
r1 = rf(ctx, platform, backend, version, capacity)
|
r1 = rf(ctx, info)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,15 @@ type (
|
||||||
GrpcVersion int32 `json:"grpc_version,omitempty"`
|
GrpcVersion int32 `json:"grpc_version,omitempty"`
|
||||||
ServerVersion string `json:"server_version,omitempty"`
|
ServerVersion string `json:"server_version,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AgentInfo represents all the metadata that should be known about an agent.
|
||||||
|
AgentInfo struct {
|
||||||
|
Version string `json:"version"`
|
||||||
|
Platform string `json:"platform"`
|
||||||
|
Backend string `json:"backend"`
|
||||||
|
Capacity int `json:"capacity"`
|
||||||
|
CustomLabels map[string]string `json:"custom_labels"`
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:generate mockery --name Peer --output mocks --case underscore --note "+build test"
|
//go:generate mockery --name Peer --output mocks --case underscore --note "+build test"
|
||||||
|
@ -86,7 +95,7 @@ type Peer interface {
|
||||||
EnqueueLog(logEntry *LogEntry)
|
EnqueueLog(logEntry *LogEntry)
|
||||||
|
|
||||||
// RegisterAgent register our agent to the server
|
// RegisterAgent register our agent to the server
|
||||||
RegisterAgent(ctx context.Context, platform, backend, version string, capacity int) (int64, error)
|
RegisterAgent(ctx context.Context, info AgentInfo) (int64, error)
|
||||||
|
|
||||||
// UnregisterAgent unregister our agent from the server
|
// UnregisterAgent unregister our agent from the server
|
||||||
UnregisterAgent(ctx context.Context) error
|
UnregisterAgent(ctx context.Context) error
|
||||||
|
|
|
@ -16,4 +16,4 @@ package proto
|
||||||
|
|
||||||
// Version is the version of the woodpecker.proto file,
|
// Version is the version of the woodpecker.proto file,
|
||||||
// IMPORTANT: increased by 1 each time it get changed.
|
// IMPORTANT: increased by 1 each time it get changed.
|
||||||
const Version int32 = 10
|
const Version int32 = 11
|
||||||
|
|
|
@ -812,21 +812,97 @@ func (x *ReportHealthRequest) GetStatus() string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AgentInfo struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
Platform string `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"`
|
||||||
|
Capacity int32 `protobuf:"varint,2,opt,name=capacity,proto3" json:"capacity,omitempty"`
|
||||||
|
Backend string `protobuf:"bytes,3,opt,name=backend,proto3" json:"backend,omitempty"`
|
||||||
|
Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"`
|
||||||
|
CustomLabels map[string]string `protobuf:"bytes,5,rep,name=customLabels,proto3" json:"customLabels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *AgentInfo) Reset() {
|
||||||
|
*x = AgentInfo{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_woodpecker_proto_msgTypes[14]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *AgentInfo) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*AgentInfo) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *AgentInfo) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_woodpecker_proto_msgTypes[14]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use AgentInfo.ProtoReflect.Descriptor instead.
|
||||||
|
func (*AgentInfo) Descriptor() ([]byte, []int) {
|
||||||
|
return file_woodpecker_proto_rawDescGZIP(), []int{14}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *AgentInfo) GetPlatform() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Platform
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *AgentInfo) GetCapacity() int32 {
|
||||||
|
if x != nil {
|
||||||
|
return x.Capacity
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *AgentInfo) GetBackend() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Backend
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *AgentInfo) GetVersion() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Version
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *AgentInfo) GetCustomLabels() map[string]string {
|
||||||
|
if x != nil {
|
||||||
|
return x.CustomLabels
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type RegisterAgentRequest struct {
|
type RegisterAgentRequest struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
Platform string `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"`
|
Info *AgentInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"`
|
||||||
Capacity int32 `protobuf:"varint,2,opt,name=capacity,proto3" json:"capacity,omitempty"`
|
|
||||||
Backend string `protobuf:"bytes,3,opt,name=backend,proto3" json:"backend,omitempty"`
|
|
||||||
Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *RegisterAgentRequest) Reset() {
|
func (x *RegisterAgentRequest) Reset() {
|
||||||
*x = RegisterAgentRequest{}
|
*x = RegisterAgentRequest{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_woodpecker_proto_msgTypes[14]
|
mi := &file_woodpecker_proto_msgTypes[15]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -839,7 +915,7 @@ func (x *RegisterAgentRequest) String() string {
|
||||||
func (*RegisterAgentRequest) ProtoMessage() {}
|
func (*RegisterAgentRequest) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *RegisterAgentRequest) ProtoReflect() protoreflect.Message {
|
func (x *RegisterAgentRequest) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_woodpecker_proto_msgTypes[14]
|
mi := &file_woodpecker_proto_msgTypes[15]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -852,35 +928,14 @@ func (x *RegisterAgentRequest) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use RegisterAgentRequest.ProtoReflect.Descriptor instead.
|
// Deprecated: Use RegisterAgentRequest.ProtoReflect.Descriptor instead.
|
||||||
func (*RegisterAgentRequest) Descriptor() ([]byte, []int) {
|
func (*RegisterAgentRequest) Descriptor() ([]byte, []int) {
|
||||||
return file_woodpecker_proto_rawDescGZIP(), []int{14}
|
return file_woodpecker_proto_rawDescGZIP(), []int{15}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *RegisterAgentRequest) GetPlatform() string {
|
func (x *RegisterAgentRequest) GetInfo() *AgentInfo {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.Platform
|
return x.Info
|
||||||
}
|
}
|
||||||
return ""
|
return nil
|
||||||
}
|
|
||||||
|
|
||||||
func (x *RegisterAgentRequest) GetCapacity() int32 {
|
|
||||||
if x != nil {
|
|
||||||
return x.Capacity
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *RegisterAgentRequest) GetBackend() string {
|
|
||||||
if x != nil {
|
|
||||||
return x.Backend
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *RegisterAgentRequest) GetVersion() string {
|
|
||||||
if x != nil {
|
|
||||||
return x.Version
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type VersionResponse struct {
|
type VersionResponse struct {
|
||||||
|
@ -895,7 +950,7 @@ type VersionResponse struct {
|
||||||
func (x *VersionResponse) Reset() {
|
func (x *VersionResponse) Reset() {
|
||||||
*x = VersionResponse{}
|
*x = VersionResponse{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_woodpecker_proto_msgTypes[15]
|
mi := &file_woodpecker_proto_msgTypes[16]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -908,7 +963,7 @@ func (x *VersionResponse) String() string {
|
||||||
func (*VersionResponse) ProtoMessage() {}
|
func (*VersionResponse) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *VersionResponse) ProtoReflect() protoreflect.Message {
|
func (x *VersionResponse) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_woodpecker_proto_msgTypes[15]
|
mi := &file_woodpecker_proto_msgTypes[16]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -921,7 +976,7 @@ func (x *VersionResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use VersionResponse.ProtoReflect.Descriptor instead.
|
// Deprecated: Use VersionResponse.ProtoReflect.Descriptor instead.
|
||||||
func (*VersionResponse) Descriptor() ([]byte, []int) {
|
func (*VersionResponse) Descriptor() ([]byte, []int) {
|
||||||
return file_woodpecker_proto_rawDescGZIP(), []int{15}
|
return file_woodpecker_proto_rawDescGZIP(), []int{16}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *VersionResponse) GetGrpcVersion() int32 {
|
func (x *VersionResponse) GetGrpcVersion() int32 {
|
||||||
|
@ -949,7 +1004,7 @@ type NextResponse struct {
|
||||||
func (x *NextResponse) Reset() {
|
func (x *NextResponse) Reset() {
|
||||||
*x = NextResponse{}
|
*x = NextResponse{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_woodpecker_proto_msgTypes[16]
|
mi := &file_woodpecker_proto_msgTypes[17]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -962,7 +1017,7 @@ func (x *NextResponse) String() string {
|
||||||
func (*NextResponse) ProtoMessage() {}
|
func (*NextResponse) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *NextResponse) ProtoReflect() protoreflect.Message {
|
func (x *NextResponse) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_woodpecker_proto_msgTypes[16]
|
mi := &file_woodpecker_proto_msgTypes[17]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -975,7 +1030,7 @@ func (x *NextResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use NextResponse.ProtoReflect.Descriptor instead.
|
// Deprecated: Use NextResponse.ProtoReflect.Descriptor instead.
|
||||||
func (*NextResponse) Descriptor() ([]byte, []int) {
|
func (*NextResponse) Descriptor() ([]byte, []int) {
|
||||||
return file_woodpecker_proto_rawDescGZIP(), []int{16}
|
return file_woodpecker_proto_rawDescGZIP(), []int{17}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *NextResponse) GetWorkflow() *Workflow {
|
func (x *NextResponse) GetWorkflow() *Workflow {
|
||||||
|
@ -996,7 +1051,7 @@ type RegisterAgentResponse struct {
|
||||||
func (x *RegisterAgentResponse) Reset() {
|
func (x *RegisterAgentResponse) Reset() {
|
||||||
*x = RegisterAgentResponse{}
|
*x = RegisterAgentResponse{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_woodpecker_proto_msgTypes[17]
|
mi := &file_woodpecker_proto_msgTypes[18]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -1009,7 +1064,7 @@ func (x *RegisterAgentResponse) String() string {
|
||||||
func (*RegisterAgentResponse) ProtoMessage() {}
|
func (*RegisterAgentResponse) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *RegisterAgentResponse) ProtoReflect() protoreflect.Message {
|
func (x *RegisterAgentResponse) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_woodpecker_proto_msgTypes[17]
|
mi := &file_woodpecker_proto_msgTypes[18]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -1022,7 +1077,7 @@ func (x *RegisterAgentResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use RegisterAgentResponse.ProtoReflect.Descriptor instead.
|
// Deprecated: Use RegisterAgentResponse.ProtoReflect.Descriptor instead.
|
||||||
func (*RegisterAgentResponse) Descriptor() ([]byte, []int) {
|
func (*RegisterAgentResponse) Descriptor() ([]byte, []int) {
|
||||||
return file_woodpecker_proto_rawDescGZIP(), []int{17}
|
return file_woodpecker_proto_rawDescGZIP(), []int{18}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *RegisterAgentResponse) GetAgentId() int64 {
|
func (x *RegisterAgentResponse) GetAgentId() int64 {
|
||||||
|
@ -1044,7 +1099,7 @@ type AuthRequest struct {
|
||||||
func (x *AuthRequest) Reset() {
|
func (x *AuthRequest) Reset() {
|
||||||
*x = AuthRequest{}
|
*x = AuthRequest{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_woodpecker_proto_msgTypes[18]
|
mi := &file_woodpecker_proto_msgTypes[19]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -1057,7 +1112,7 @@ func (x *AuthRequest) String() string {
|
||||||
func (*AuthRequest) ProtoMessage() {}
|
func (*AuthRequest) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *AuthRequest) ProtoReflect() protoreflect.Message {
|
func (x *AuthRequest) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_woodpecker_proto_msgTypes[18]
|
mi := &file_woodpecker_proto_msgTypes[19]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -1070,7 +1125,7 @@ func (x *AuthRequest) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use AuthRequest.ProtoReflect.Descriptor instead.
|
// Deprecated: Use AuthRequest.ProtoReflect.Descriptor instead.
|
||||||
func (*AuthRequest) Descriptor() ([]byte, []int) {
|
func (*AuthRequest) Descriptor() ([]byte, []int) {
|
||||||
return file_woodpecker_proto_rawDescGZIP(), []int{18}
|
return file_woodpecker_proto_rawDescGZIP(), []int{19}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *AuthRequest) GetAgentToken() string {
|
func (x *AuthRequest) GetAgentToken() string {
|
||||||
|
@ -1100,7 +1155,7 @@ type AuthResponse struct {
|
||||||
func (x *AuthResponse) Reset() {
|
func (x *AuthResponse) Reset() {
|
||||||
*x = AuthResponse{}
|
*x = AuthResponse{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_woodpecker_proto_msgTypes[19]
|
mi := &file_woodpecker_proto_msgTypes[20]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -1113,7 +1168,7 @@ func (x *AuthResponse) String() string {
|
||||||
func (*AuthResponse) ProtoMessage() {}
|
func (*AuthResponse) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *AuthResponse) ProtoReflect() protoreflect.Message {
|
func (x *AuthResponse) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_woodpecker_proto_msgTypes[19]
|
mi := &file_woodpecker_proto_msgTypes[20]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -1126,7 +1181,7 @@ func (x *AuthResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use AuthResponse.ProtoReflect.Descriptor instead.
|
// Deprecated: Use AuthResponse.ProtoReflect.Descriptor instead.
|
||||||
func (*AuthResponse) Descriptor() ([]byte, []int) {
|
func (*AuthResponse) Descriptor() ([]byte, []int) {
|
||||||
return file_woodpecker_proto_rawDescGZIP(), []int{19}
|
return file_woodpecker_proto_rawDescGZIP(), []int{20}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *AuthResponse) GetStatus() string {
|
func (x *AuthResponse) GetStatus() string {
|
||||||
|
@ -1220,83 +1275,95 @@ var file_woodpecker_proto_rawDesc = []byte{
|
||||||
0x22, 0x2d, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68,
|
0x22, 0x2d, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68,
|
||||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
|
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
|
||||||
0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
|
0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
|
||||||
0x82, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e,
|
0x80, 0x02, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a,
|
||||||
0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74,
|
0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74,
|
0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x70,
|
||||||
0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79,
|
0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x61, 0x70,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79,
|
0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64,
|
||||||
0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
|
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12,
|
||||||
0x09, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65,
|
0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72,
|
0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x0c, 0x63, 0x75, 0x73,
|
||||||
0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5b, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52,
|
0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x72, 0x70, 0x63, 0x5f,
|
0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66,
|
||||||
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x67,
|
0x6f, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e,
|
||||||
0x72, 0x70, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65,
|
0x74, 0x72, 0x79, 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c,
|
||||||
0x72, 0x76, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01,
|
0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4c, 0x61, 0x62, 0x65, 0x6c,
|
||||||
0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
|
0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
|
||||||
0x6e, 0x22, 0x3b, 0x0a, 0x0c, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
|
||||||
0x65, 0x12, 0x2b, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20,
|
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
|
||||||
0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x57, 0x6f, 0x72, 0x6b,
|
0x38, 0x01, 0x22, 0x3c, 0x0a, 0x14, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x41, 0x67,
|
||||||
0x66, 0x6c, 0x6f, 0x77, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x32,
|
0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x69, 0x6e,
|
||||||
0x0a, 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52,
|
0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x74,
|
0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f,
|
||||||
0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74,
|
0x22, 0x5b, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||||
0x49, 0x64, 0x22, 0x49, 0x0a, 0x0b, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73,
|
||||||
0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
|
0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x67, 0x72, 0x70, 0x63, 0x56,
|
||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b,
|
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
|
||||||
0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02,
|
0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
|
||||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x64, 0x0a,
|
0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3b, 0x0a,
|
||||||
0x0c, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a,
|
0x0c, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a,
|
||||||
0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73,
|
0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69,
|
0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
|
||||||
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64,
|
0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x32, 0x0a, 0x15, 0x52, 0x65,
|
||||||
0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
|
0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f,
|
0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18,
|
||||||
0x6b, 0x65, 0x6e, 0x32, 0xbb, 0x04, 0x0a, 0x0a, 0x57, 0x6f, 0x6f, 0x64, 0x70, 0x65, 0x63, 0x6b,
|
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x49,
|
||||||
0x65, 0x72, 0x12, 0x31, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x2e,
|
0x0a, 0x0b, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x70, 0x72,
|
0x0b, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
0x28, 0x09, 0x52, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x19,
|
||||||
0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x4e, 0x65, 0x78, 0x74, 0x12, 0x12, 0x2e,
|
0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x0c, 0x41, 0x75, 0x74,
|
||||||
0x74, 0x1a, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x65,
|
0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61,
|
||||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2a, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74,
|
0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
|
||||||
0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71,
|
0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20,
|
||||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70,
|
0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c,
|
||||||
0x74, 0x79, 0x22, 0x00, 0x12, 0x2a, 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, 0x12, 0x12, 0x2e, 0x70,
|
0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x32,
|
||||||
|
0xbb, 0x04, 0x0a, 0x0a, 0x57, 0x6f, 0x6f, 0x64, 0x70, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x31,
|
||||||
|
0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
|
0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||||
|
0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
|
||||||
|
0x00, 0x12, 0x31, 0x0a, 0x04, 0x4e, 0x65, 0x78, 0x74, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
|
0x6f, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e,
|
||||||
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||||
|
0x73, 0x65, 0x22, 0x00, 0x12, 0x2a, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x12, 0x2e, 0x70,
|
||||||
|
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||||
0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00,
|
0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00,
|
||||||
0x12, 0x2a, 0x0a, 0x04, 0x44, 0x6f, 0x6e, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
0x12, 0x2a, 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x2e, 0x44, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x70,
|
0x2e, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x70,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x06,
|
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x2a, 0x0a, 0x04,
|
||||||
0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45,
|
0x44, 0x6f, 0x6e, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x6f, 0x6e,
|
||||||
0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x70,
|
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x06,
|
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x06, 0x45, 0x78, 0x74, 0x65,
|
||||||
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55,
|
0x6e, 0x64, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e,
|
||||||
0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x70,
|
0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x28, 0x0a, 0x03,
|
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61,
|
||||||
0x4c, 0x6f, 0x67, 0x12, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x52,
|
0x74, 0x65, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
|
||||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45,
|
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
|
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x28, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12,
|
||||||
0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||||
0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71,
|
0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
|
||||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x67,
|
0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x41, 0x67,
|
||||||
0x69, 0x73, 0x74, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
0x65, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x67, 0x69,
|
||||||
0x73, 0x65, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x0f, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74,
|
0x73, 0x74, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||||
0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
|
||||||
0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d,
|
0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
|
||||||
0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x48,
|
0x12, 0x2f, 0x0a, 0x0f, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x41, 0x67,
|
||||||
0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65,
|
0x65, 0x6e, 0x74, 0x12, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74,
|
||||||
0x70, 0x6f, 0x72, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
0x79, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
|
||||||
0x74, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
|
0x00, 0x12, 0x3a, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74,
|
||||||
0x00, 0x32, 0x43, 0x0a, 0x0e, 0x57, 0x6f, 0x6f, 0x64, 0x70, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x41,
|
0x68, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74,
|
||||||
0x75, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x04, 0x41, 0x75, 0x74, 0x68, 0x12, 0x12, 0x2e, 0x70, 0x72,
|
0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e,
|
||||||
0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x43, 0x0a,
|
||||||
0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70,
|
0x0e, 0x57, 0x6f, 0x6f, 0x64, 0x70, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12,
|
||||||
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x6f, 0x2e, 0x77, 0x6f, 0x6f,
|
0x31, 0x0a, 0x04, 0x41, 0x75, 0x74, 0x68, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||||
0x64, 0x70, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x2d, 0x63, 0x69, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x77,
|
0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x70, 0x72,
|
||||||
0x6f, 0x6f, 0x64, 0x70, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x69, 0x70,
|
0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
0x22, 0x00, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x6f, 0x2e, 0x77, 0x6f, 0x6f, 0x64, 0x70, 0x65, 0x63,
|
||||||
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x6b, 0x65, 0x72, 0x2d, 0x63, 0x69, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x77, 0x6f, 0x6f, 0x64, 0x70,
|
||||||
|
0x65, 0x63, 0x6b, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e,
|
||||||
|
0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f,
|
||||||
|
0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -1311,7 +1378,7 @@ func file_woodpecker_proto_rawDescGZIP() []byte {
|
||||||
return file_woodpecker_proto_rawDescData
|
return file_woodpecker_proto_rawDescData
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_woodpecker_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
|
var file_woodpecker_proto_msgTypes = make([]protoimpl.MessageInfo, 23)
|
||||||
var file_woodpecker_proto_goTypes = []interface{}{
|
var file_woodpecker_proto_goTypes = []interface{}{
|
||||||
(*StepState)(nil), // 0: proto.StepState
|
(*StepState)(nil), // 0: proto.StepState
|
||||||
(*WorkflowState)(nil), // 1: proto.WorkflowState
|
(*WorkflowState)(nil), // 1: proto.WorkflowState
|
||||||
|
@ -1327,51 +1394,55 @@ var file_woodpecker_proto_goTypes = []interface{}{
|
||||||
(*LogRequest)(nil), // 11: proto.LogRequest
|
(*LogRequest)(nil), // 11: proto.LogRequest
|
||||||
(*Empty)(nil), // 12: proto.Empty
|
(*Empty)(nil), // 12: proto.Empty
|
||||||
(*ReportHealthRequest)(nil), // 13: proto.ReportHealthRequest
|
(*ReportHealthRequest)(nil), // 13: proto.ReportHealthRequest
|
||||||
(*RegisterAgentRequest)(nil), // 14: proto.RegisterAgentRequest
|
(*AgentInfo)(nil), // 14: proto.AgentInfo
|
||||||
(*VersionResponse)(nil), // 15: proto.VersionResponse
|
(*RegisterAgentRequest)(nil), // 15: proto.RegisterAgentRequest
|
||||||
(*NextResponse)(nil), // 16: proto.NextResponse
|
(*VersionResponse)(nil), // 16: proto.VersionResponse
|
||||||
(*RegisterAgentResponse)(nil), // 17: proto.RegisterAgentResponse
|
(*NextResponse)(nil), // 17: proto.NextResponse
|
||||||
(*AuthRequest)(nil), // 18: proto.AuthRequest
|
(*RegisterAgentResponse)(nil), // 18: proto.RegisterAgentResponse
|
||||||
(*AuthResponse)(nil), // 19: proto.AuthResponse
|
(*AuthRequest)(nil), // 19: proto.AuthRequest
|
||||||
nil, // 20: proto.Filter.LabelsEntry
|
(*AuthResponse)(nil), // 20: proto.AuthResponse
|
||||||
|
nil, // 21: proto.Filter.LabelsEntry
|
||||||
|
nil, // 22: proto.AgentInfo.CustomLabelsEntry
|
||||||
}
|
}
|
||||||
var file_woodpecker_proto_depIdxs = []int32{
|
var file_woodpecker_proto_depIdxs = []int32{
|
||||||
20, // 0: proto.Filter.labels:type_name -> proto.Filter.LabelsEntry
|
21, // 0: proto.Filter.labels:type_name -> proto.Filter.LabelsEntry
|
||||||
3, // 1: proto.NextRequest.filter:type_name -> proto.Filter
|
3, // 1: proto.NextRequest.filter:type_name -> proto.Filter
|
||||||
1, // 2: proto.InitRequest.state:type_name -> proto.WorkflowState
|
1, // 2: proto.InitRequest.state:type_name -> proto.WorkflowState
|
||||||
1, // 3: proto.DoneRequest.state:type_name -> proto.WorkflowState
|
1, // 3: proto.DoneRequest.state:type_name -> proto.WorkflowState
|
||||||
0, // 4: proto.UpdateRequest.state:type_name -> proto.StepState
|
0, // 4: proto.UpdateRequest.state:type_name -> proto.StepState
|
||||||
2, // 5: proto.LogRequest.logEntries:type_name -> proto.LogEntry
|
2, // 5: proto.LogRequest.logEntries:type_name -> proto.LogEntry
|
||||||
4, // 6: proto.NextResponse.workflow:type_name -> proto.Workflow
|
22, // 6: proto.AgentInfo.customLabels:type_name -> proto.AgentInfo.CustomLabelsEntry
|
||||||
12, // 7: proto.Woodpecker.Version:input_type -> proto.Empty
|
14, // 7: proto.RegisterAgentRequest.info:type_name -> proto.AgentInfo
|
||||||
5, // 8: proto.Woodpecker.Next:input_type -> proto.NextRequest
|
4, // 8: proto.NextResponse.workflow:type_name -> proto.Workflow
|
||||||
6, // 9: proto.Woodpecker.Init:input_type -> proto.InitRequest
|
12, // 9: proto.Woodpecker.Version:input_type -> proto.Empty
|
||||||
7, // 10: proto.Woodpecker.Wait:input_type -> proto.WaitRequest
|
5, // 10: proto.Woodpecker.Next:input_type -> proto.NextRequest
|
||||||
8, // 11: proto.Woodpecker.Done:input_type -> proto.DoneRequest
|
6, // 11: proto.Woodpecker.Init:input_type -> proto.InitRequest
|
||||||
9, // 12: proto.Woodpecker.Extend:input_type -> proto.ExtendRequest
|
7, // 12: proto.Woodpecker.Wait:input_type -> proto.WaitRequest
|
||||||
10, // 13: proto.Woodpecker.Update:input_type -> proto.UpdateRequest
|
8, // 13: proto.Woodpecker.Done:input_type -> proto.DoneRequest
|
||||||
11, // 14: proto.Woodpecker.Log:input_type -> proto.LogRequest
|
9, // 14: proto.Woodpecker.Extend:input_type -> proto.ExtendRequest
|
||||||
14, // 15: proto.Woodpecker.RegisterAgent:input_type -> proto.RegisterAgentRequest
|
10, // 15: proto.Woodpecker.Update:input_type -> proto.UpdateRequest
|
||||||
12, // 16: proto.Woodpecker.UnregisterAgent:input_type -> proto.Empty
|
11, // 16: proto.Woodpecker.Log:input_type -> proto.LogRequest
|
||||||
13, // 17: proto.Woodpecker.ReportHealth:input_type -> proto.ReportHealthRequest
|
15, // 17: proto.Woodpecker.RegisterAgent:input_type -> proto.RegisterAgentRequest
|
||||||
18, // 18: proto.WoodpeckerAuth.Auth:input_type -> proto.AuthRequest
|
12, // 18: proto.Woodpecker.UnregisterAgent:input_type -> proto.Empty
|
||||||
15, // 19: proto.Woodpecker.Version:output_type -> proto.VersionResponse
|
13, // 19: proto.Woodpecker.ReportHealth:input_type -> proto.ReportHealthRequest
|
||||||
16, // 20: proto.Woodpecker.Next:output_type -> proto.NextResponse
|
19, // 20: proto.WoodpeckerAuth.Auth:input_type -> proto.AuthRequest
|
||||||
12, // 21: proto.Woodpecker.Init:output_type -> proto.Empty
|
16, // 21: proto.Woodpecker.Version:output_type -> proto.VersionResponse
|
||||||
12, // 22: proto.Woodpecker.Wait:output_type -> proto.Empty
|
17, // 22: proto.Woodpecker.Next:output_type -> proto.NextResponse
|
||||||
12, // 23: proto.Woodpecker.Done:output_type -> proto.Empty
|
12, // 23: proto.Woodpecker.Init:output_type -> proto.Empty
|
||||||
12, // 24: proto.Woodpecker.Extend:output_type -> proto.Empty
|
12, // 24: proto.Woodpecker.Wait:output_type -> proto.Empty
|
||||||
12, // 25: proto.Woodpecker.Update:output_type -> proto.Empty
|
12, // 25: proto.Woodpecker.Done:output_type -> proto.Empty
|
||||||
12, // 26: proto.Woodpecker.Log:output_type -> proto.Empty
|
12, // 26: proto.Woodpecker.Extend:output_type -> proto.Empty
|
||||||
17, // 27: proto.Woodpecker.RegisterAgent:output_type -> proto.RegisterAgentResponse
|
12, // 27: proto.Woodpecker.Update:output_type -> proto.Empty
|
||||||
12, // 28: proto.Woodpecker.UnregisterAgent:output_type -> proto.Empty
|
12, // 28: proto.Woodpecker.Log:output_type -> proto.Empty
|
||||||
12, // 29: proto.Woodpecker.ReportHealth:output_type -> proto.Empty
|
18, // 29: proto.Woodpecker.RegisterAgent:output_type -> proto.RegisterAgentResponse
|
||||||
19, // 30: proto.WoodpeckerAuth.Auth:output_type -> proto.AuthResponse
|
12, // 30: proto.Woodpecker.UnregisterAgent:output_type -> proto.Empty
|
||||||
19, // [19:31] is the sub-list for method output_type
|
12, // 31: proto.Woodpecker.ReportHealth:output_type -> proto.Empty
|
||||||
7, // [7:19] is the sub-list for method input_type
|
20, // 32: proto.WoodpeckerAuth.Auth:output_type -> proto.AuthResponse
|
||||||
7, // [7:7] is the sub-list for extension type_name
|
21, // [21:33] is the sub-list for method output_type
|
||||||
7, // [7:7] is the sub-list for extension extendee
|
9, // [9:21] is the sub-list for method input_type
|
||||||
0, // [0:7] is the sub-list for field type_name
|
9, // [9:9] is the sub-list for extension type_name
|
||||||
|
9, // [9:9] is the sub-list for extension extendee
|
||||||
|
0, // [0:9] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_woodpecker_proto_init() }
|
func init() { file_woodpecker_proto_init() }
|
||||||
|
@ -1549,7 +1620,7 @@ func file_woodpecker_proto_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_woodpecker_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
|
file_woodpecker_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*RegisterAgentRequest); i {
|
switch v := v.(*AgentInfo); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -1561,7 +1632,7 @@ func file_woodpecker_proto_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_woodpecker_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
|
file_woodpecker_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*VersionResponse); i {
|
switch v := v.(*RegisterAgentRequest); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -1573,7 +1644,7 @@ func file_woodpecker_proto_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_woodpecker_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
|
file_woodpecker_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*NextResponse); i {
|
switch v := v.(*VersionResponse); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -1585,7 +1656,7 @@ func file_woodpecker_proto_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_woodpecker_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
|
file_woodpecker_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*RegisterAgentResponse); i {
|
switch v := v.(*NextResponse); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -1597,7 +1668,7 @@ func file_woodpecker_proto_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_woodpecker_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
|
file_woodpecker_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*AuthRequest); i {
|
switch v := v.(*RegisterAgentResponse); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -1609,6 +1680,18 @@ func file_woodpecker_proto_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_woodpecker_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
|
file_woodpecker_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*AuthRequest); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_woodpecker_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*AuthResponse); i {
|
switch v := v.(*AuthResponse); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
|
@ -1627,7 +1710,7 @@ func file_woodpecker_proto_init() {
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_woodpecker_proto_rawDesc,
|
RawDescriptor: file_woodpecker_proto_rawDesc,
|
||||||
NumEnums: 0,
|
NumEnums: 0,
|
||||||
NumMessages: 21,
|
NumMessages: 23,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 2,
|
NumServices: 2,
|
||||||
},
|
},
|
||||||
|
|
|
@ -116,11 +116,16 @@ message ReportHealthRequest {
|
||||||
string status = 1;
|
string status = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message RegisterAgentRequest {
|
message AgentInfo {
|
||||||
string platform = 1;
|
string platform = 1;
|
||||||
int32 capacity = 2;
|
int32 capacity = 2;
|
||||||
string backend = 3;
|
string backend = 3;
|
||||||
string version = 4;
|
string version = 4;
|
||||||
|
map<string, string> customLabels = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RegisterAgentRequest {
|
||||||
|
AgentInfo info = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -441,7 +441,7 @@ func (s *RPC) Log(c context.Context, stepUUID string, rpcLogEntries []*rpc.LogEn
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *RPC) RegisterAgent(ctx context.Context, platform, backend, version string, capacity int32) (int64, error) {
|
func (s *RPC) RegisterAgent(ctx context.Context, info rpc.AgentInfo) (int64, error) {
|
||||||
agent, err := s.getAgentFromContext(ctx)
|
agent, err := s.getAgentFromContext(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return -1, err
|
||||||
|
@ -453,10 +453,11 @@ func (s *RPC) RegisterAgent(ctx context.Context, platform, backend, version stri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
agent.Backend = backend
|
agent.Backend = info.Backend
|
||||||
agent.Platform = platform
|
agent.Platform = info.Platform
|
||||||
agent.Capacity = capacity
|
agent.Capacity = int32(info.Capacity)
|
||||||
agent.Version = version
|
agent.Version = info.Version
|
||||||
|
agent.CustomLabels = info.CustomLabels
|
||||||
|
|
||||||
err = s.store.AgentUpdate(agent)
|
err = s.store.AgentUpdate(agent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -24,6 +24,7 @@ import (
|
||||||
"github.com/stretchr/testify/mock"
|
"github.com/stretchr/testify/mock"
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
|
|
||||||
|
"go.woodpecker-ci.org/woodpecker/v2/pipeline/rpc"
|
||||||
"go.woodpecker-ci.org/woodpecker/v2/server/model"
|
"go.woodpecker-ci.org/woodpecker/v2/server/model"
|
||||||
mocks_store "go.woodpecker-ci.org/woodpecker/v2/server/store/mocks"
|
mocks_store "go.woodpecker-ci.org/woodpecker/v2/server/store/mocks"
|
||||||
)
|
)
|
||||||
|
@ -52,15 +53,19 @@ func TestRegisterAgent(t *testing.T) {
|
||||||
|
|
||||||
store.On("AgentFind", int64(1337)).Once().Return(storeAgent, nil)
|
store.On("AgentFind", int64(1337)).Once().Return(storeAgent, nil)
|
||||||
store.On("AgentUpdate", &updatedAgent).Once().Return(nil)
|
store.On("AgentUpdate", &updatedAgent).Once().Return(nil)
|
||||||
rpc := RPC{
|
grpc := RPC{
|
||||||
store: store,
|
store: store,
|
||||||
}
|
}
|
||||||
ctx := metadata.NewIncomingContext(
|
ctx := metadata.NewIncomingContext(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
metadata.Pairs("hostname", "hostname", "agent_id", "1337"),
|
metadata.Pairs("hostname", "hostname", "agent_id", "1337"),
|
||||||
)
|
)
|
||||||
capacity := int32(2)
|
agentID, err := grpc.RegisterAgent(ctx, rpc.AgentInfo{
|
||||||
agentID, err := rpc.RegisterAgent(ctx, "platform", "backend", "version", capacity)
|
Version: "version",
|
||||||
|
Platform: "platform",
|
||||||
|
Backend: "backend",
|
||||||
|
Capacity: 2,
|
||||||
|
})
|
||||||
if !assert.NoError(t, err) {
|
if !assert.NoError(t, err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -92,15 +97,19 @@ func TestRegisterAgent(t *testing.T) {
|
||||||
|
|
||||||
store.On("AgentFind", int64(1337)).Once().Return(storeAgent, nil)
|
store.On("AgentFind", int64(1337)).Once().Return(storeAgent, nil)
|
||||||
store.On("AgentUpdate", &updatedAgent).Once().Return(nil)
|
store.On("AgentUpdate", &updatedAgent).Once().Return(nil)
|
||||||
rpc := RPC{
|
grpc := RPC{
|
||||||
store: store,
|
store: store,
|
||||||
}
|
}
|
||||||
ctx := metadata.NewIncomingContext(
|
ctx := metadata.NewIncomingContext(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
metadata.Pairs("hostname", "newHostname", "agent_id", "1337"),
|
metadata.Pairs("hostname", "newHostname", "agent_id", "1337"),
|
||||||
)
|
)
|
||||||
capacity := int32(2)
|
agentID, err := grpc.RegisterAgent(ctx, rpc.AgentInfo{
|
||||||
agentID, err := rpc.RegisterAgent(ctx, "platform", "backend", "version", capacity)
|
Version: "version",
|
||||||
|
Platform: "platform",
|
||||||
|
Backend: "backend",
|
||||||
|
Capacity: 2,
|
||||||
|
})
|
||||||
if !assert.NoError(t, err) {
|
if !assert.NoError(t, err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,7 +172,14 @@ func (s *WoodpeckerServer) Log(c context.Context, req *proto.LogRequest) (*proto
|
||||||
|
|
||||||
func (s *WoodpeckerServer) RegisterAgent(c context.Context, req *proto.RegisterAgentRequest) (*proto.RegisterAgentResponse, error) {
|
func (s *WoodpeckerServer) RegisterAgent(c context.Context, req *proto.RegisterAgentRequest) (*proto.RegisterAgentResponse, error) {
|
||||||
res := new(proto.RegisterAgentResponse)
|
res := new(proto.RegisterAgentResponse)
|
||||||
agentID, err := s.peer.RegisterAgent(c, req.GetPlatform(), req.GetBackend(), req.GetVersion(), req.GetCapacity())
|
agentInfo := req.GetInfo()
|
||||||
|
agentID, err := s.peer.RegisterAgent(c, rpc.AgentInfo{
|
||||||
|
Version: agentInfo.GetVersion(),
|
||||||
|
Platform: agentInfo.GetPlatform(),
|
||||||
|
Backend: agentInfo.GetBackend(),
|
||||||
|
Capacity: int(agentInfo.GetCapacity()),
|
||||||
|
CustomLabels: agentInfo.GetCustomLabels(),
|
||||||
|
})
|
||||||
res.AgentId = agentID
|
res.AgentId = agentID
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,19 +22,20 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Agent struct {
|
type Agent struct {
|
||||||
ID int64 `json:"id" xorm:"pk autoincr 'id'"`
|
ID int64 `json:"id" xorm:"pk autoincr 'id'"`
|
||||||
Created int64 `json:"created" xorm:"created"`
|
Created int64 `json:"created" xorm:"created"`
|
||||||
Updated int64 `json:"updated" xorm:"updated"`
|
Updated int64 `json:"updated" xorm:"updated"`
|
||||||
Name string `json:"name" xorm:"name"`
|
Name string `json:"name" xorm:"name"`
|
||||||
OwnerID int64 `json:"owner_id" xorm:"'owner_id'"`
|
OwnerID int64 `json:"owner_id" xorm:"'owner_id'"`
|
||||||
Token string `json:"token" xorm:"token"`
|
Token string `json:"token" xorm:"token"`
|
||||||
LastContact int64 `json:"last_contact" xorm:"last_contact"`
|
LastContact int64 `json:"last_contact" xorm:"last_contact"`
|
||||||
LastWork int64 `json:"last_work" xorm:"last_work"` // last time the agent did something, this value is used to determine if the agent is still doing work used by the autoscaler
|
LastWork int64 `json:"last_work" xorm:"last_work"` // last time the agent did something, this value is used to determine if the agent is still doing work used by the autoscaler
|
||||||
Platform string `json:"platform" xorm:"VARCHAR(100) 'platform'"`
|
Platform string `json:"platform" xorm:"VARCHAR(100) 'platform'"`
|
||||||
Backend string `json:"backend" xorm:"VARCHAR(100) 'backend'"`
|
Backend string `json:"backend" xorm:"VARCHAR(100) 'backend'"`
|
||||||
Capacity int32 `json:"capacity" xorm:"capacity"`
|
Capacity int32 `json:"capacity" xorm:"capacity"`
|
||||||
Version string `json:"version" xorm:"'version'"`
|
Version string `json:"version" xorm:"'version'"`
|
||||||
NoSchedule bool `json:"no_schedule" xorm:"no_schedule"`
|
NoSchedule bool `json:"no_schedule" xorm:"no_schedule"`
|
||||||
|
CustomLabels map[string]string `json:"custom_labels" xorm:"JSON 'custom_labels'"`
|
||||||
// OrgID is counted as unset if set to -1, this is done to ensure a new(Agent) still enforce the OrgID check by default
|
// OrgID is counted as unset if set to -1, this is done to ensure a new(Agent) still enforce the OrgID check by default
|
||||||
OrgID int64 `json:"org_id" xorm:"INDEX 'org_id'"`
|
OrgID int64 `json:"org_id" xorm:"INDEX 'org_id'"`
|
||||||
} // @name Agent
|
} // @name Agent
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
// Copyright 2024 Woodpecker Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package migration
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"src.techknowlogick.com/xormigrate"
|
||||||
|
"xorm.io/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type agentV016 struct {
|
||||||
|
ID int64 `xorm:"pk autoincr 'id'"`
|
||||||
|
CustomLabels map[string]string `xorm:"JSON 'custom_labels'"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (agentV016) TableName() string {
|
||||||
|
return "agents"
|
||||||
|
}
|
||||||
|
|
||||||
|
var addCustomLabelsToAgent = xormigrate.Migration{
|
||||||
|
ID: "add-custom-labels-to-agent",
|
||||||
|
MigrateSession: func(sess *xorm.Session) (err error) {
|
||||||
|
if err := sess.Sync(new(agentV016)); err != nil {
|
||||||
|
return fmt.Errorf("sync models failed: %w", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
|
@ -44,6 +44,7 @@ var migrationTasks = []*xormigrate.Migration{
|
||||||
&fixV31Registries,
|
&fixV31Registries,
|
||||||
&removeOldMigrationsOfV1,
|
&removeOldMigrationsOfV1,
|
||||||
&addOrgAgents,
|
&addOrgAgents,
|
||||||
|
&addCustomLabelsToAgent,
|
||||||
}
|
}
|
||||||
|
|
||||||
var allBeans = []any{
|
var allBeans = []any{
|
||||||
|
|
|
@ -316,6 +316,10 @@
|
||||||
"desc": "The max amount of parallel pipelines executed by this agent.",
|
"desc": "The max amount of parallel pipelines executed by this agent.",
|
||||||
"badge": "capacity"
|
"badge": "capacity"
|
||||||
},
|
},
|
||||||
|
"custom_labels": {
|
||||||
|
"custom_labels": "Custom Labels",
|
||||||
|
"desc": "The custom labels set by the agent admin on agent startup."
|
||||||
|
},
|
||||||
"org": {
|
"org": {
|
||||||
"badge": "org"
|
"badge": "org"
|
||||||
},
|
},
|
||||||
|
|
|
@ -33,6 +33,15 @@
|
||||||
<TextField :id="id" v-model="agent.platform" disabled />
|
<TextField :id="id" v-model="agent.platform" disabled />
|
||||||
</InputField>
|
</InputField>
|
||||||
|
|
||||||
|
<InputField
|
||||||
|
v-if="agent.custom_labels && Object.keys(agent.custom_labels).length > 0"
|
||||||
|
v-slot="{ id }"
|
||||||
|
:label="$t('admin.settings.agents.custom_labels.custom_labels')"
|
||||||
|
>
|
||||||
|
<span class="text-wp-text-alt-100">{{ $t('admin.settings.agents.custom_labels.desc') }}</span>
|
||||||
|
<TextField :id="id" :model-value="formatCustomLabels(agent.custom_labels)" disabled />
|
||||||
|
</InputField>
|
||||||
|
|
||||||
<InputField
|
<InputField
|
||||||
v-slot="{ id }"
|
v-slot="{ id }"
|
||||||
:label="$t('admin.settings.agents.capacity.capacity')"
|
:label="$t('admin.settings.agents.capacity.capacity')"
|
||||||
|
@ -101,4 +110,10 @@ const agent = computed({
|
||||||
function updateAgent(newValues: Partial<Agent>) {
|
function updateAgent(newValues: Partial<Agent>) {
|
||||||
emit('update:modelValue', { ...agent.value, ...newValues });
|
emit('update:modelValue', { ...agent.value, ...newValues });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function formatCustomLabels(labels: Record<string, string>): string {
|
||||||
|
return Object.entries(labels)
|
||||||
|
.map(([key, value]) => `${key}=${value}`)
|
||||||
|
.join(', ');
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -12,4 +12,5 @@ export interface Agent {
|
||||||
capacity: number;
|
capacity: number;
|
||||||
version: string;
|
version: string;
|
||||||
no_schedule: boolean;
|
no_schedule: boolean;
|
||||||
|
custom_labels: Record<string, string>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -228,20 +228,21 @@ type (
|
||||||
|
|
||||||
// Agent is the JSON data for an agent.
|
// Agent is the JSON data for an agent.
|
||||||
Agent struct {
|
Agent struct {
|
||||||
ID int64 `json:"id"`
|
ID int64 `json:"id"`
|
||||||
Created int64 `json:"created"`
|
Created int64 `json:"created"`
|
||||||
Updated int64 `json:"updated"`
|
Updated int64 `json:"updated"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
OwnerID int64 `json:"owner_id"`
|
OwnerID int64 `json:"owner_id"`
|
||||||
OrgID int64 `json:"org_id"`
|
OrgID int64 `json:"org_id"`
|
||||||
Token string `json:"token"`
|
Token string `json:"token"`
|
||||||
LastContact int64 `json:"last_contact"`
|
LastContact int64 `json:"last_contact"`
|
||||||
LastWork int64 `json:"last_work"`
|
LastWork int64 `json:"last_work"`
|
||||||
Platform string `json:"platform"`
|
Platform string `json:"platform"`
|
||||||
Backend string `json:"backend"`
|
Backend string `json:"backend"`
|
||||||
Capacity int32 `json:"capacity"`
|
Capacity int32 `json:"capacity"`
|
||||||
Version string `json:"version"`
|
Version string `json:"version"`
|
||||||
NoSchedule bool `json:"no_schedule"`
|
NoSchedule bool `json:"no_schedule"`
|
||||||
|
CustomLabels map[string]string `json:"custom_labels"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Task is the JSON data for a task.
|
// Task is the JSON data for a task.
|
||||||
|
|
Loading…
Reference in a new issue