From 05752f49997063e7e185da1ab77d00b5091116ce Mon Sep 17 00:00:00 2001 From: Andrew Watkins Date: Thu, 30 Apr 2026 13:58:34 -0500 Subject: [PATCH] feat(ci): add workflow show command --- pkg/api/ci.go | 10 + pkg/api/ci_test.go | 20 + pkg/cmd/ci/workflow.go | 339 +++++ pkg/cmd/ci/workflow_test.go | 190 +++ pkg/proto/depot/ci/v1/ci.pb.go | 1288 +++++++++++++---- .../depot/ci/v1/civ1connect/ci.connect.go | 28 + proto/depot/ci/v1/ci.proto | 72 + 7 files changed, 1653 insertions(+), 294 deletions(-) diff --git a/pkg/api/ci.go b/pkg/api/ci.go index 31d2977c..87f460ea 100644 --- a/pkg/api/ci.go +++ b/pkg/api/ci.go @@ -28,6 +28,16 @@ func CIGetRunStatus(ctx context.Context, token, orgID, runID string) (*civ1.GetR return resp.Msg, nil } +// CIGetWorkflow returns curated run/workflow/execution/job/attempt metadata for a single workflow. +func CIGetWorkflow(ctx context.Context, token, orgID, workflowID string) (*civ1.GetWorkflowResponse, error) { + client := newCIServiceClient() + resp, err := client.GetWorkflow(ctx, WithAuthenticationAndOrg(connect.NewRequest(&civ1.GetWorkflowRequest{WorkflowId: workflowID}), token, orgID)) + if err != nil { + return nil, err + } + return resp.Msg, nil +} + // CIGetRun returns a flat CI run record. func CIGetRun(ctx context.Context, token, orgID, runID string) (*civ1.GetRunResponse, error) { client := newCIServiceClient() diff --git a/pkg/api/ci_test.go b/pkg/api/ci_test.go index b02348f0..51ac5d05 100644 --- a/pkg/api/ci_test.go +++ b/pkg/api/ci_test.go @@ -67,6 +67,14 @@ func (h ciServiceTestHandler) GetRunStatus(context.Context, *connect.Request[civ return nil, connect.NewError(connect.CodeUnimplemented, nil) } +func (h ciServiceTestHandler) GetWorkflow(_ context.Context, req *connect.Request[civ1.GetWorkflowRequest]) (*connect.Response[civ1.GetWorkflowResponse], error) { + assertAuthAndOrg(h.t, req.Header()) + if req.Msg.WorkflowId != "workflow-123" { + h.t.Fatalf("WorkflowId = %q, want workflow-123", req.Msg.WorkflowId) + } + return connect.NewResponse(&civ1.GetWorkflowResponse{WorkflowId: req.Msg.WorkflowId, OrgId: "org-123"}), nil +} + func (h ciServiceTestHandler) GetJobAttemptLogs(context.Context, *connect.Request[civ1.GetJobAttemptLogsRequest]) (*connect.Response[civ1.GetJobAttemptLogsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, nil) } @@ -103,6 +111,18 @@ func TestCICancelRunWrapper(t *testing.T) { }) } +func TestCIGetWorkflowWrapper(t *testing.T) { + withTestCIService(t, func() { + resp, err := CIGetWorkflow(context.Background(), "token-123", "org-123", "workflow-123") + if err != nil { + t.Fatalf("CIGetWorkflow returned error: %v", err) + } + if resp.WorkflowId != "workflow-123" || resp.OrgId != "org-123" { + t.Fatalf("unexpected response: %+v", resp) + } + }) +} + func withTestCIService(t *testing.T, fn func()) { t.Helper() diff --git a/pkg/cmd/ci/workflow.go b/pkg/cmd/ci/workflow.go index 903051eb..83eca743 100644 --- a/pkg/cmd/ci/workflow.go +++ b/pkg/cmd/ci/workflow.go @@ -3,6 +3,7 @@ package ci import ( "fmt" "strings" + "time" "github.com/depot/cli/pkg/api" "github.com/depot/cli/pkg/config" @@ -12,6 +13,7 @@ import ( ) var ciListWorkflows = api.CIListWorkflows +var ciGetWorkflow = api.CIGetWorkflow type workflowListJSON struct { WorkflowID string `json:"workflow_id"` @@ -27,6 +29,66 @@ type workflowListJSON struct { JobCounts workflowJobCountsJSON `json:"job_counts"` } +type workflowShowJSON struct { + OrgID string `json:"org_id"` + Run workflowShowRunJSON `json:"run"` + Workflow workflowShowMetaJSON `json:"workflow"` + Executions []workflowExecutionJSON `json:"executions"` + Jobs []workflowShowJobJSON `json:"jobs"` +} + +type workflowShowRunJSON struct { + RunID string `json:"run_id"` + Repo string `json:"repo"` + Ref string `json:"ref"` + Sha string `json:"sha"` + HeadSha string `json:"head_sha"` + Trigger string `json:"trigger"` + Status string `json:"status"` + CreatedAt string `json:"created_at"` + StartedAt string `json:"started_at"` + FinishedAt string `json:"finished_at"` +} + +type workflowShowMetaJSON struct { + WorkflowID string `json:"workflow_id"` + Name string `json:"name"` + WorkflowPath string `json:"workflow_path"` + Status string `json:"status"` + ErrorMessage string `json:"error_message"` + CreatedAt string `json:"created_at"` + StartedAt string `json:"started_at"` + FinishedAt string `json:"finished_at"` +} + +type workflowExecutionJSON struct { + ExecutionID string `json:"execution_id"` + Execution int32 `json:"execution"` + Status string `json:"status"` + CreatedAt string `json:"created_at"` + StartedAt string `json:"started_at"` + FinishedAt string `json:"finished_at"` +} + +type workflowShowJobJSON struct { + JobID string `json:"job_id"` + JobKey string `json:"job_key"` + Status string `json:"status"` + StartedAt string `json:"started_at"` + FinishedAt string `json:"finished_at"` + Attempts []workflowShowAttemptJSON `json:"attempts"` +} + +type workflowShowAttemptJSON struct { + AttemptID string `json:"attempt_id"` + Attempt int32 `json:"attempt"` + Status string `json:"status"` + SandboxID string `json:"sandbox_id"` + SessionID string `json:"session_id"` + StartedAt string `json:"started_at"` + FinishedAt string `json:"finished_at"` +} + type workflowJobCountsJSON struct { Total int32 `json:"total"` Queued int32 `json:"queued"` @@ -49,6 +111,64 @@ func NewCmdWorkflow() *cobra.Command { } cmd.AddCommand(NewCmdWorkflowList()) + cmd.AddCommand(NewCmdWorkflowShow()) + + return cmd +} + +func NewCmdWorkflowShow() *cobra.Command { + var ( + orgID string + token string + output string + ) + + cmd := &cobra.Command{ + Use: "show ", + Aliases: []string{"get"}, + Short: "Show a CI workflow", + Long: `Show a CI workflow, including parent run context, executions, jobs, and attempts.`, + Example: ` depot ci workflow show + depot ci workflow get + depot ci workflow show --output json`, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := cmd.Context() + workflowID := args[0] + + if orgID == "" { + orgID = config.GetCurrentOrganization() + } + orgFlag := "" + if cmd.Flags().Changed("org") { + orgFlag = " --org " + orgID + } + + tokenVal, err := helpers.ResolveOrgAuth(ctx, token) + if err != nil { + return err + } + if tokenVal == "" { + return fmt.Errorf("missing API token, please run `depot login`") + } + + workflow, err := ciGetWorkflow(ctx, tokenVal, orgID, workflowID) + if err != nil { + return fmt.Errorf("failed to get workflow: %w", err) + } + + if output == "json" { + return writeJSON(workflowShowToJSON(workflow)) + } + + printWorkflow(workflow, orgFlag) + return nil + }, + } + + cmd.Flags().StringVar(&orgID, "org", "", "Organization ID (required when user is a member of multiple organizations)") + cmd.Flags().StringVar(&token, "token", "", "Depot API token") + cmd.Flags().StringVarP(&output, "output", "o", "", "Output format (json)") return cmd } @@ -208,6 +328,225 @@ func workflowsToJSON(workflows []*civ1.ListWorkflowsResponseWorkflow) []workflow return out } +func workflowShowToJSON(workflow *civ1.GetWorkflowResponse) workflowShowJSON { + out := workflowShowJSON{ + OrgID: workflow.GetOrgId(), + Run: workflowShowRunJSON{ + RunID: workflow.GetRunId(), + Repo: workflow.GetRepo(), + Ref: workflow.GetRef(), + Sha: workflow.GetSha(), + HeadSha: workflow.GetHeadSha(), + Trigger: workflow.GetTrigger(), + Status: workflow.GetRunStatus(), + CreatedAt: workflow.GetRunCreatedAt(), + StartedAt: workflow.GetRunStartedAt(), + FinishedAt: workflow.GetRunFinishedAt(), + }, + Workflow: workflowShowMetaJSON{ + WorkflowID: workflow.GetWorkflowId(), + Name: workflow.GetWorkflowName(), + WorkflowPath: workflow.GetWorkflowPath(), + Status: workflow.GetWorkflowStatus(), + ErrorMessage: workflow.GetWorkflowErrorMessage(), + CreatedAt: workflow.GetWorkflowCreatedAt(), + StartedAt: workflow.GetWorkflowStartedAt(), + FinishedAt: workflow.GetWorkflowFinishedAt(), + }, + Executions: make([]workflowExecutionJSON, 0, len(workflow.GetExecutions())), + Jobs: make([]workflowShowJobJSON, 0, len(workflow.GetJobs())), + } + + for _, execution := range workflow.GetExecutions() { + out.Executions = append(out.Executions, workflowExecutionJSON{ + ExecutionID: execution.GetExecutionId(), + Execution: execution.GetExecution(), + Status: execution.GetStatus(), + CreatedAt: execution.GetCreatedAt(), + StartedAt: execution.GetStartedAt(), + FinishedAt: execution.GetFinishedAt(), + }) + } + + for _, job := range workflow.GetJobs() { + outJob := workflowShowJobJSON{ + JobID: job.GetJobId(), + JobKey: job.GetJobKey(), + Status: job.GetStatus(), + StartedAt: job.GetStartedAt(), + FinishedAt: job.GetFinishedAt(), + Attempts: make([]workflowShowAttemptJSON, 0, len(job.GetAttempts())), + } + for _, attempt := range job.GetAttempts() { + outJob.Attempts = append(outJob.Attempts, workflowShowAttemptJSON{ + AttemptID: attempt.GetAttemptId(), + Attempt: attempt.GetAttempt(), + Status: attempt.GetStatus(), + SandboxID: attempt.GetSandboxId(), + SessionID: attempt.GetSessionId(), + StartedAt: attempt.GetStartedAt(), + FinishedAt: attempt.GetFinishedAt(), + }) + } + out.Jobs = append(out.Jobs, outJob) + } + + return out +} + +func printWorkflow(workflow *civ1.GetWorkflowResponse, orgFlag string) { + fmt.Printf("Org: %s\n", workflow.GetOrgId()) + fmt.Printf("Repo: %s\n", workflow.GetRepo()) + fmt.Printf("Run: %s (%s)\n", workflow.GetRunId(), workflow.GetRunStatus()) + fmt.Printf("Workflow: %s (%s)\n", workflow.GetWorkflowId(), workflow.GetWorkflowStatus()) + if workflow.GetWorkflowName() != "" { + fmt.Printf("Name: %s\n", workflow.GetWorkflowName()) + } + if workflow.GetWorkflowPath() != "" { + fmt.Printf("Path: %s\n", workflow.GetWorkflowPath()) + } + if workflow.GetWorkflowErrorMessage() != "" { + fmt.Printf("Error: %s\n", workflow.GetWorkflowErrorMessage()) + } + fmt.Printf("Ref: %s\n", workflow.GetRef()) + fmt.Printf("SHA: %s\n", workflowCommitSHAFromValues(workflow.GetSha(), workflow.GetHeadSha())) + fmt.Printf("Trigger: %s\n", workflow.GetTrigger()) + + fmt.Println() + fmt.Println("Executions:") + if len(workflow.GetExecutions()) == 0 { + fmt.Println(" none") + } else { + for _, execution := range workflow.GetExecutions() { + duration := formatDuration(execution.GetStartedAt(), execution.GetFinishedAt()) + fmt.Printf( + " #%d %s%s %s -> %s\n", + execution.GetExecution(), + execution.GetStatus(), + durationSuffix(duration), + emptyTimestamp(execution.GetStartedAt()), + emptyTimestamp(execution.GetFinishedAt()), + ) + } + } + + fmt.Println() + fmt.Println("Jobs:") + if len(workflow.GetJobs()) == 0 { + fmt.Println(" none") + return + } + + for _, job := range workflow.GetJobs() { + duration := formatDuration(job.GetStartedAt(), job.GetFinishedAt()) + fmt.Printf(" %s [%s]%s\n", jobKeyShort(job.GetJobKey()), job.GetStatus(), durationSuffix(duration)) + fmt.Printf(" Job ID: %s\n", job.GetJobId()) + + latest := latestWorkflowAttempt(job.GetAttempts()) + if latest == nil { + fmt.Println(" Latest attempt: none") + continue + } + + latestDuration := formatDuration(latest.GetStartedAt(), latest.GetFinishedAt()) + fmt.Printf( + " Latest attempt: #%d %s (%s)%s\n", + latest.GetAttempt(), + latest.GetAttemptId(), + latest.GetStatus(), + durationSuffix(latestDuration), + ) + if latest.GetSandboxId() != "" { + fmt.Printf(" Sandbox: %s\n", latest.GetSandboxId()) + } + if latest.GetSessionId() != "" { + fmt.Printf(" Session: %s\n", latest.GetSessionId()) + } + if len(job.GetAttempts()) > 1 { + fmt.Println(" Attempts:") + for _, attempt := range job.GetAttempts() { + attemptDuration := formatDuration(attempt.GetStartedAt(), attempt.GetFinishedAt()) + fmt.Printf( + " #%d %s (%s)%s\n", + attempt.GetAttempt(), + attempt.GetAttemptId(), + attempt.GetStatus(), + durationSuffix(attemptDuration), + ) + } + } + fmt.Printf(" Logs: depot ci logs %s%s\n", latest.GetAttemptId(), orgFlag) + } +} + +func latestWorkflowAttempt(attempts []*civ1.GetWorkflowJobAttempt) *civ1.GetWorkflowJobAttempt { + if len(attempts) == 0 { + return nil + } + latest := attempts[0] + for _, attempt := range attempts[1:] { + if attempt.GetAttempt() > latest.GetAttempt() { + latest = attempt + } + } + return latest +} + +func formatDuration(startedAt, finishedAt string) string { + start, err := time.Parse(time.RFC3339Nano, startedAt) + if err != nil { + return "" + } + finish, err := time.Parse(time.RFC3339Nano, finishedAt) + if err != nil { + return "" + } + if finish.Before(start) { + return "" + } + return formatCompactDuration(finish.Sub(start)) +} + +func formatCompactDuration(duration time.Duration) string { + seconds := int64(duration.Round(time.Second).Seconds()) + if seconds < 0 { + return "" + } + + hours := seconds / 3600 + minutes := (seconds % 3600) / 60 + secs := seconds % 60 + + if hours > 0 { + return fmt.Sprintf("%dh%dm%ds", hours, minutes, secs) + } + if minutes > 0 { + return fmt.Sprintf("%dm%ds", minutes, secs) + } + return fmt.Sprintf("%ds", secs) +} + +func durationSuffix(duration string) string { + if duration == "" { + return "" + } + return " " + duration +} + +func emptyTimestamp(timestamp string) string { + if timestamp == "" { + return "-" + } + return timestamp +} + +func workflowCommitSHAFromValues(sha, headSha string) string { + if headSha != "" { + return headSha + } + return sha +} + func workflowDisplayName(workflow *civ1.ListWorkflowsResponseWorkflow) string { if workflow.GetName() != "" { return workflow.GetName() diff --git a/pkg/cmd/ci/workflow_test.go b/pkg/cmd/ci/workflow_test.go index 82a7e3bd..d6926775 100644 --- a/pkg/cmd/ci/workflow_test.go +++ b/pkg/cmd/ci/workflow_test.go @@ -191,6 +191,108 @@ func TestWorkflowListJSONOutput(t *testing.T) { } } +func TestWorkflowShowPassesWorkflowIDAndPrintsDetails(t *testing.T) { + t.Setenv("DEPOT_TOKEN", "token-from-env") + + originalCIGetWorkflow := ciGetWorkflow + t.Cleanup(func() { ciGetWorkflow = originalCIGetWorkflow }) + + var capturedToken string + var capturedOrgID string + var capturedWorkflowID string + ciGetWorkflow = func(ctx context.Context, token, orgID, workflowID string) (*civ1.GetWorkflowResponse, error) { + capturedToken = token + capturedOrgID = orgID + capturedWorkflowID = workflowID + return sampleGetWorkflowResponse(), nil + } + + cmd := NewCmdWorkflowShow() + cmd.SetArgs([]string{"--org", "org-123", "workflow-1"}) + cmd.SetOut(io.Discard) + cmd.SetErr(io.Discard) + + stdout, err := captureStdout(t, cmd.Execute) + if err != nil { + t.Fatal(err) + } + + if capturedToken != "token-from-env" { + t.Fatalf("token = %q, want token-from-env", capturedToken) + } + if capturedOrgID != "org-123" { + t.Fatalf("orgID = %q, want org-123", capturedOrgID) + } + if capturedWorkflowID != "workflow-1" { + t.Fatalf("workflowID = %q, want workflow-1", capturedWorkflowID) + } + + for _, want := range []string{ + "Org: org-123", + "Repo: depot/api", + "Run: run-1 (failed)", + "Workflow: workflow-1 (failed)", + "Name: CI", + "Path: .depot/workflows/ci.yml", + "#1 finished 8m42s", + "#2 failed 3m14s", + "build [finished] 4m2s", + "test [failed] 2m58s", + "Latest attempt: #2 att-test-2 (failed) 2m58s", + "Sandbox: sandbox-2", + "Session: session-2", + "Logs: depot ci logs att-test-2 --org org-123", + } { + if !strings.Contains(stdout, want) { + t.Fatalf("workflow show output missing %q:\n%s", want, stdout) + } + } +} + +func TestWorkflowShowJSONOutput(t *testing.T) { + t.Setenv("DEPOT_TOKEN", "token-from-env") + + originalCIGetWorkflow := ciGetWorkflow + t.Cleanup(func() { ciGetWorkflow = originalCIGetWorkflow }) + + ciGetWorkflow = func(ctx context.Context, token, orgID, workflowID string) (*civ1.GetWorkflowResponse, error) { + return sampleGetWorkflowResponse(), nil + } + + cmd := NewCmdWorkflowShow() + cmd.SetArgs([]string{"--org", "org-123", "--output", "json", "workflow-1"}) + cmd.SetOut(io.Discard) + cmd.SetErr(io.Discard) + + stdout, err := captureStdout(t, cmd.Execute) + if err != nil { + t.Fatal(err) + } + + var workflow workflowShowJSON + if err := json.Unmarshal([]byte(stdout), &workflow); err != nil { + t.Fatalf("invalid JSON output: %v\n%s", err, stdout) + } + if workflow.OrgID != "org-123" { + t.Fatalf("org_id = %q, want org-123", workflow.OrgID) + } + if workflow.Run.RunID != "run-1" || workflow.Run.Status != "failed" { + t.Fatalf("unexpected run JSON: %+v", workflow.Run) + } + if workflow.Workflow.WorkflowID != "workflow-1" || workflow.Workflow.WorkflowPath != ".depot/workflows/ci.yml" { + t.Fatalf("unexpected workflow JSON: %+v", workflow.Workflow) + } + if len(workflow.Executions) != 2 || workflow.Executions[1].ExecutionID != "exec-2" { + t.Fatalf("unexpected executions JSON: %+v", workflow.Executions) + } + if len(workflow.Jobs) != 2 || len(workflow.Jobs[1].Attempts) != 2 { + t.Fatalf("unexpected jobs JSON: %+v", workflow.Jobs) + } + if workflow.Jobs[1].Attempts[1].SessionID != "session-2" { + t.Fatalf("unexpected attempt JSON: %+v", workflow.Jobs[1].Attempts[1]) + } +} + func TestWorkflowListRejectsInvalidLimitBeforeCallingAPI(t *testing.T) { originalCIListWorkflows := ciListWorkflows t.Cleanup(func() { ciListWorkflows = originalCIListWorkflows }) @@ -304,6 +406,9 @@ func TestCICommandRegistersWorkflowListWithoutBreakingExistingCommands(t *testin if findCommand(t, cmd, "workflow", "list") == nil { t.Fatal("depot ci workflow list is not registered") } + if findCommand(t, cmd, "workflow", "show") == nil { + t.Fatal("depot ci workflow show is not registered") + } for _, existing := range [][]string{{"run", "list"}, {"status"}, {"logs"}} { if findCommand(t, cmd, existing...) == nil { t.Fatalf("depot ci %s is not registered", strings.Join(existing, " ")) @@ -311,6 +416,91 @@ func TestCICommandRegistersWorkflowListWithoutBreakingExistingCommands(t *testin } } +func sampleGetWorkflowResponse() *civ1.GetWorkflowResponse { + return &civ1.GetWorkflowResponse{ + OrgId: "org-123", + RunId: "run-1", + Repo: "depot/api", + Ref: "refs/heads/main", + Sha: "merge123", + HeadSha: "head456", + Trigger: "push", + RunStatus: "failed", + RunCreatedAt: "2026-04-30T14:01:00Z", + RunStartedAt: "2026-04-30T14:02:00Z", + RunFinishedAt: "2026-04-30T14:25:15Z", + WorkflowId: "workflow-1", + WorkflowName: "CI", + WorkflowPath: ".depot/workflows/ci.yml", + WorkflowStatus: "failed", + WorkflowErrorMessage: "tests failed", + WorkflowCreatedAt: "2026-04-30T14:01:05Z", + WorkflowStartedAt: "2026-04-30T14:02:11Z", + WorkflowFinishedAt: "2026-04-30T14:25:15Z", + Executions: []*civ1.GetWorkflowExecution{ + { + ExecutionId: "exec-1", + Execution: 1, + Status: "finished", + CreatedAt: "2026-04-30T14:01:05Z", + StartedAt: "2026-04-30T14:02:11Z", + FinishedAt: "2026-04-30T14:10:53Z", + }, + { + ExecutionId: "exec-2", + Execution: 2, + Status: "failed", + CreatedAt: "2026-04-30T14:21:45Z", + StartedAt: "2026-04-30T14:22:01Z", + FinishedAt: "2026-04-30T14:25:15Z", + }, + }, + Jobs: []*civ1.GetWorkflowJob{ + { + JobId: "job-build", + JobKey: "ci.yml:build", + Status: "finished", + StartedAt: "2026-04-30T14:02:20Z", + FinishedAt: "2026-04-30T14:06:22Z", + Attempts: []*civ1.GetWorkflowJobAttempt{ + { + AttemptId: "att-build-1", + Attempt: 1, + Status: "finished", + StartedAt: "2026-04-30T14:02:20Z", + FinishedAt: "2026-04-30T14:06:22Z", + }, + }, + }, + { + JobId: "job-test", + JobKey: "ci.yml:test", + Status: "failed", + StartedAt: "2026-04-30T14:22:10Z", + FinishedAt: "2026-04-30T14:25:08Z", + Attempts: []*civ1.GetWorkflowJobAttempt{ + { + AttemptId: "att-test-1", + Attempt: 1, + Status: "failed", + StartedAt: "2026-04-30T14:07:00Z", + FinishedAt: "2026-04-30T14:09:10Z", + }, + { + AttemptId: "att-test-2", + Attempt: 2, + Status: "failed", + SandboxId: "sandbox-2", + SessionId: "session-2", + StartedAt: "2026-04-30T14:22:10Z", + FinishedAt: "2026-04-30T14:25:08Z", + }, + }, + }, + }, + } +} + func findCommand(t *testing.T, cmd *cobra.Command, path ...string) *cobra.Command { t.Helper() diff --git a/pkg/proto/depot/ci/v1/ci.pb.go b/pkg/proto/depot/ci/v1/ci.pb.go index f9aa3876..289e32f9 100644 --- a/pkg/proto/depot/ci/v1/ci.pb.go +++ b/pkg/proto/depot/ci/v1/ci.pb.go @@ -1976,6 +1976,537 @@ func (x *AttemptStatus) GetSessionId() string { return "" } +type GetWorkflowRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // workflow_id identifies the workflow to fetch + WorkflowId string `protobuf:"bytes,1,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` +} + +func (x *GetWorkflowRequest) Reset() { + *x = GetWorkflowRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_depot_ci_v1_ci_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetWorkflowRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWorkflowRequest) ProtoMessage() {} + +func (x *GetWorkflowRequest) ProtoReflect() protoreflect.Message { + mi := &file_depot_ci_v1_ci_proto_msgTypes[30] + 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 GetWorkflowRequest.ProtoReflect.Descriptor instead. +func (*GetWorkflowRequest) Descriptor() ([]byte, []int) { + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{30} +} + +func (x *GetWorkflowRequest) GetWorkflowId() string { + if x != nil { + return x.WorkflowId + } + return "" +} + +type GetWorkflowResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OrgId string `protobuf:"bytes,1,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` + // Parent run context + RunId string `protobuf:"bytes,2,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` + Repo string `protobuf:"bytes,3,opt,name=repo,proto3" json:"repo,omitempty"` + Ref string `protobuf:"bytes,4,opt,name=ref,proto3" json:"ref,omitempty"` + Sha string `protobuf:"bytes,5,opt,name=sha,proto3" json:"sha,omitempty"` + HeadSha string `protobuf:"bytes,6,opt,name=head_sha,json=headSha,proto3" json:"head_sha,omitempty"` + Trigger string `protobuf:"bytes,7,opt,name=trigger,proto3" json:"trigger,omitempty"` + RunStatus string `protobuf:"bytes,8,opt,name=run_status,json=runStatus,proto3" json:"run_status,omitempty"` + RunCreatedAt string `protobuf:"bytes,9,opt,name=run_created_at,json=runCreatedAt,proto3" json:"run_created_at,omitempty"` + RunStartedAt string `protobuf:"bytes,10,opt,name=run_started_at,json=runStartedAt,proto3" json:"run_started_at,omitempty"` + RunFinishedAt string `protobuf:"bytes,11,opt,name=run_finished_at,json=runFinishedAt,proto3" json:"run_finished_at,omitempty"` + // Workflow metadata + WorkflowId string `protobuf:"bytes,12,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` + WorkflowName string `protobuf:"bytes,13,opt,name=workflow_name,json=workflowName,proto3" json:"workflow_name,omitempty"` + WorkflowPath string `protobuf:"bytes,14,opt,name=workflow_path,json=workflowPath,proto3" json:"workflow_path,omitempty"` + WorkflowStatus string `protobuf:"bytes,15,opt,name=workflow_status,json=workflowStatus,proto3" json:"workflow_status,omitempty"` + WorkflowErrorMessage string `protobuf:"bytes,16,opt,name=workflow_error_message,json=workflowErrorMessage,proto3" json:"workflow_error_message,omitempty"` + WorkflowCreatedAt string `protobuf:"bytes,17,opt,name=workflow_created_at,json=workflowCreatedAt,proto3" json:"workflow_created_at,omitempty"` + WorkflowStartedAt string `protobuf:"bytes,18,opt,name=workflow_started_at,json=workflowStartedAt,proto3" json:"workflow_started_at,omitempty"` + WorkflowFinishedAt string `protobuf:"bytes,19,opt,name=workflow_finished_at,json=workflowFinishedAt,proto3" json:"workflow_finished_at,omitempty"` + // executions are workflow-level records; each re-run creates another execution. + Executions []*GetWorkflowExecution `protobuf:"bytes,20,rep,name=executions,proto3" json:"executions,omitempty"` + // jobs are the workflow jobs and their per-job attempts. + Jobs []*GetWorkflowJob `protobuf:"bytes,21,rep,name=jobs,proto3" json:"jobs,omitempty"` +} + +func (x *GetWorkflowResponse) Reset() { + *x = GetWorkflowResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_depot_ci_v1_ci_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetWorkflowResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWorkflowResponse) ProtoMessage() {} + +func (x *GetWorkflowResponse) ProtoReflect() protoreflect.Message { + mi := &file_depot_ci_v1_ci_proto_msgTypes[31] + 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 GetWorkflowResponse.ProtoReflect.Descriptor instead. +func (*GetWorkflowResponse) Descriptor() ([]byte, []int) { + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{31} +} + +func (x *GetWorkflowResponse) GetOrgId() string { + if x != nil { + return x.OrgId + } + return "" +} + +func (x *GetWorkflowResponse) GetRunId() string { + if x != nil { + return x.RunId + } + return "" +} + +func (x *GetWorkflowResponse) GetRepo() string { + if x != nil { + return x.Repo + } + return "" +} + +func (x *GetWorkflowResponse) GetRef() string { + if x != nil { + return x.Ref + } + return "" +} + +func (x *GetWorkflowResponse) GetSha() string { + if x != nil { + return x.Sha + } + return "" +} + +func (x *GetWorkflowResponse) GetHeadSha() string { + if x != nil { + return x.HeadSha + } + return "" +} + +func (x *GetWorkflowResponse) GetTrigger() string { + if x != nil { + return x.Trigger + } + return "" +} + +func (x *GetWorkflowResponse) GetRunStatus() string { + if x != nil { + return x.RunStatus + } + return "" +} + +func (x *GetWorkflowResponse) GetRunCreatedAt() string { + if x != nil { + return x.RunCreatedAt + } + return "" +} + +func (x *GetWorkflowResponse) GetRunStartedAt() string { + if x != nil { + return x.RunStartedAt + } + return "" +} + +func (x *GetWorkflowResponse) GetRunFinishedAt() string { + if x != nil { + return x.RunFinishedAt + } + return "" +} + +func (x *GetWorkflowResponse) GetWorkflowId() string { + if x != nil { + return x.WorkflowId + } + return "" +} + +func (x *GetWorkflowResponse) GetWorkflowName() string { + if x != nil { + return x.WorkflowName + } + return "" +} + +func (x *GetWorkflowResponse) GetWorkflowPath() string { + if x != nil { + return x.WorkflowPath + } + return "" +} + +func (x *GetWorkflowResponse) GetWorkflowStatus() string { + if x != nil { + return x.WorkflowStatus + } + return "" +} + +func (x *GetWorkflowResponse) GetWorkflowErrorMessage() string { + if x != nil { + return x.WorkflowErrorMessage + } + return "" +} + +func (x *GetWorkflowResponse) GetWorkflowCreatedAt() string { + if x != nil { + return x.WorkflowCreatedAt + } + return "" +} + +func (x *GetWorkflowResponse) GetWorkflowStartedAt() string { + if x != nil { + return x.WorkflowStartedAt + } + return "" +} + +func (x *GetWorkflowResponse) GetWorkflowFinishedAt() string { + if x != nil { + return x.WorkflowFinishedAt + } + return "" +} + +func (x *GetWorkflowResponse) GetExecutions() []*GetWorkflowExecution { + if x != nil { + return x.Executions + } + return nil +} + +func (x *GetWorkflowResponse) GetJobs() []*GetWorkflowJob { + if x != nil { + return x.Jobs + } + return nil +} + +// GetWorkflowExecution describes one workflow execution/re-run. +type GetWorkflowExecution struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ExecutionId string `protobuf:"bytes,1,opt,name=execution_id,json=executionId,proto3" json:"execution_id,omitempty"` + Execution int32 `protobuf:"varint,2,opt,name=execution,proto3" json:"execution,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + CreatedAt string `protobuf:"bytes,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + StartedAt string `protobuf:"bytes,5,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` + FinishedAt string `protobuf:"bytes,6,opt,name=finished_at,json=finishedAt,proto3" json:"finished_at,omitempty"` +} + +func (x *GetWorkflowExecution) Reset() { + *x = GetWorkflowExecution{} + if protoimpl.UnsafeEnabled { + mi := &file_depot_ci_v1_ci_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetWorkflowExecution) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWorkflowExecution) ProtoMessage() {} + +func (x *GetWorkflowExecution) ProtoReflect() protoreflect.Message { + mi := &file_depot_ci_v1_ci_proto_msgTypes[32] + 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 GetWorkflowExecution.ProtoReflect.Descriptor instead. +func (*GetWorkflowExecution) Descriptor() ([]byte, []int) { + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{32} +} + +func (x *GetWorkflowExecution) GetExecutionId() string { + if x != nil { + return x.ExecutionId + } + return "" +} + +func (x *GetWorkflowExecution) GetExecution() int32 { + if x != nil { + return x.Execution + } + return 0 +} + +func (x *GetWorkflowExecution) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *GetWorkflowExecution) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *GetWorkflowExecution) GetStartedAt() string { + if x != nil { + return x.StartedAt + } + return "" +} + +func (x *GetWorkflowExecution) GetFinishedAt() string { + if x != nil { + return x.FinishedAt + } + return "" +} + +type GetWorkflowJob struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"` + JobKey string `protobuf:"bytes,2,opt,name=job_key,json=jobKey,proto3" json:"job_key,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + StartedAt string `protobuf:"bytes,4,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` + FinishedAt string `protobuf:"bytes,5,opt,name=finished_at,json=finishedAt,proto3" json:"finished_at,omitempty"` + // attempts are per-job attempts, not workflow execution records. + Attempts []*GetWorkflowJobAttempt `protobuf:"bytes,6,rep,name=attempts,proto3" json:"attempts,omitempty"` +} + +func (x *GetWorkflowJob) Reset() { + *x = GetWorkflowJob{} + if protoimpl.UnsafeEnabled { + mi := &file_depot_ci_v1_ci_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetWorkflowJob) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWorkflowJob) ProtoMessage() {} + +func (x *GetWorkflowJob) ProtoReflect() protoreflect.Message { + mi := &file_depot_ci_v1_ci_proto_msgTypes[33] + 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 GetWorkflowJob.ProtoReflect.Descriptor instead. +func (*GetWorkflowJob) Descriptor() ([]byte, []int) { + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{33} +} + +func (x *GetWorkflowJob) GetJobId() string { + if x != nil { + return x.JobId + } + return "" +} + +func (x *GetWorkflowJob) GetJobKey() string { + if x != nil { + return x.JobKey + } + return "" +} + +func (x *GetWorkflowJob) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *GetWorkflowJob) GetStartedAt() string { + if x != nil { + return x.StartedAt + } + return "" +} + +func (x *GetWorkflowJob) GetFinishedAt() string { + if x != nil { + return x.FinishedAt + } + return "" +} + +func (x *GetWorkflowJob) GetAttempts() []*GetWorkflowJobAttempt { + if x != nil { + return x.Attempts + } + return nil +} + +// GetWorkflowJobAttempt describes one attempt of a job returned by GetWorkflow. +type GetWorkflowJobAttempt struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AttemptId string `protobuf:"bytes,1,opt,name=attempt_id,json=attemptId,proto3" json:"attempt_id,omitempty"` + Attempt int32 `protobuf:"varint,2,opt,name=attempt,proto3" json:"attempt,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + SandboxId string `protobuf:"bytes,4,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + SessionId string `protobuf:"bytes,5,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + StartedAt string `protobuf:"bytes,6,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` + FinishedAt string `protobuf:"bytes,7,opt,name=finished_at,json=finishedAt,proto3" json:"finished_at,omitempty"` +} + +func (x *GetWorkflowJobAttempt) Reset() { + *x = GetWorkflowJobAttempt{} + if protoimpl.UnsafeEnabled { + mi := &file_depot_ci_v1_ci_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetWorkflowJobAttempt) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWorkflowJobAttempt) ProtoMessage() {} + +func (x *GetWorkflowJobAttempt) ProtoReflect() protoreflect.Message { + mi := &file_depot_ci_v1_ci_proto_msgTypes[34] + 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 GetWorkflowJobAttempt.ProtoReflect.Descriptor instead. +func (*GetWorkflowJobAttempt) Descriptor() ([]byte, []int) { + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{34} +} + +func (x *GetWorkflowJobAttempt) GetAttemptId() string { + if x != nil { + return x.AttemptId + } + return "" +} + +func (x *GetWorkflowJobAttempt) GetAttempt() int32 { + if x != nil { + return x.Attempt + } + return 0 +} + +func (x *GetWorkflowJobAttempt) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *GetWorkflowJobAttempt) GetSandboxId() string { + if x != nil { + return x.SandboxId + } + return "" +} + +func (x *GetWorkflowJobAttempt) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *GetWorkflowJobAttempt) GetStartedAt() string { + if x != nil { + return x.StartedAt + } + return "" +} + +func (x *GetWorkflowJobAttempt) GetFinishedAt() string { + if x != nil { + return x.FinishedAt + } + return "" +} + type GetJobAttemptLogsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1990,7 +2521,7 @@ type GetJobAttemptLogsRequest struct { func (x *GetJobAttemptLogsRequest) Reset() { *x = GetJobAttemptLogsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_depot_ci_v1_ci_proto_msgTypes[30] + mi := &file_depot_ci_v1_ci_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2003,7 +2534,7 @@ func (x *GetJobAttemptLogsRequest) String() string { func (*GetJobAttemptLogsRequest) ProtoMessage() {} func (x *GetJobAttemptLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_depot_ci_v1_ci_proto_msgTypes[30] + mi := &file_depot_ci_v1_ci_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2016,7 +2547,7 @@ func (x *GetJobAttemptLogsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetJobAttemptLogsRequest.ProtoReflect.Descriptor instead. func (*GetJobAttemptLogsRequest) Descriptor() ([]byte, []int) { - return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{30} + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{35} } func (x *GetJobAttemptLogsRequest) GetAttemptId() string { @@ -2046,7 +2577,7 @@ type GetJobAttemptLogsResponse struct { func (x *GetJobAttemptLogsResponse) Reset() { *x = GetJobAttemptLogsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_depot_ci_v1_ci_proto_msgTypes[31] + mi := &file_depot_ci_v1_ci_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2059,7 +2590,7 @@ func (x *GetJobAttemptLogsResponse) String() string { func (*GetJobAttemptLogsResponse) ProtoMessage() {} func (x *GetJobAttemptLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_depot_ci_v1_ci_proto_msgTypes[31] + mi := &file_depot_ci_v1_ci_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2072,7 +2603,7 @@ func (x *GetJobAttemptLogsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetJobAttemptLogsResponse.ProtoReflect.Descriptor instead. func (*GetJobAttemptLogsResponse) Descriptor() ([]byte, []int) { - return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{31} + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{36} } func (x *GetJobAttemptLogsResponse) GetLines() []*LogLine { @@ -2104,7 +2635,7 @@ type LogLine struct { func (x *LogLine) Reset() { *x = LogLine{} if protoimpl.UnsafeEnabled { - mi := &file_depot_ci_v1_ci_proto_msgTypes[32] + mi := &file_depot_ci_v1_ci_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2117,7 +2648,7 @@ func (x *LogLine) String() string { func (*LogLine) ProtoMessage() {} func (x *LogLine) ProtoReflect() protoreflect.Message { - mi := &file_depot_ci_v1_ci_proto_msgTypes[32] + mi := &file_depot_ci_v1_ci_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2130,7 +2661,7 @@ func (x *LogLine) ProtoReflect() protoreflect.Message { // Deprecated: Use LogLine.ProtoReflect.Descriptor instead. func (*LogLine) Descriptor() ([]byte, []int) { - return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{32} + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{37} } func (x *LogLine) GetStepId() string { @@ -2193,7 +2724,7 @@ type ListRunsRequest struct { func (x *ListRunsRequest) Reset() { *x = ListRunsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_depot_ci_v1_ci_proto_msgTypes[33] + mi := &file_depot_ci_v1_ci_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2206,7 +2737,7 @@ func (x *ListRunsRequest) String() string { func (*ListRunsRequest) ProtoMessage() {} func (x *ListRunsRequest) ProtoReflect() protoreflect.Message { - mi := &file_depot_ci_v1_ci_proto_msgTypes[33] + mi := &file_depot_ci_v1_ci_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2219,7 +2750,7 @@ func (x *ListRunsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRunsRequest.ProtoReflect.Descriptor instead. func (*ListRunsRequest) Descriptor() ([]byte, []int) { - return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{33} + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{38} } func (x *ListRunsRequest) GetStatus() []string { @@ -2283,7 +2814,7 @@ type ListRunsResponse struct { func (x *ListRunsResponse) Reset() { *x = ListRunsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_depot_ci_v1_ci_proto_msgTypes[34] + mi := &file_depot_ci_v1_ci_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2296,7 +2827,7 @@ func (x *ListRunsResponse) String() string { func (*ListRunsResponse) ProtoMessage() {} func (x *ListRunsResponse) ProtoReflect() protoreflect.Message { - mi := &file_depot_ci_v1_ci_proto_msgTypes[34] + mi := &file_depot_ci_v1_ci_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2309,7 +2840,7 @@ func (x *ListRunsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRunsResponse.ProtoReflect.Descriptor instead. func (*ListRunsResponse) Descriptor() ([]byte, []int) { - return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{34} + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{39} } func (x *ListRunsResponse) GetRuns() []*ListRunsResponseRun { @@ -2345,7 +2876,7 @@ type ListRunsResponseRun struct { func (x *ListRunsResponseRun) Reset() { *x = ListRunsResponseRun{} if protoimpl.UnsafeEnabled { - mi := &file_depot_ci_v1_ci_proto_msgTypes[35] + mi := &file_depot_ci_v1_ci_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2358,7 +2889,7 @@ func (x *ListRunsResponseRun) String() string { func (*ListRunsResponseRun) ProtoMessage() {} func (x *ListRunsResponseRun) ProtoReflect() protoreflect.Message { - mi := &file_depot_ci_v1_ci_proto_msgTypes[35] + mi := &file_depot_ci_v1_ci_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2371,7 +2902,7 @@ func (x *ListRunsResponseRun) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRunsResponseRun.ProtoReflect.Descriptor instead. func (*ListRunsResponseRun) Descriptor() ([]byte, []int) { - return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{35} + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{40} } func (x *ListRunsResponseRun) GetRunId() string { @@ -2454,7 +2985,7 @@ type ListWorkflowsRequest struct { func (x *ListWorkflowsRequest) Reset() { *x = ListWorkflowsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_depot_ci_v1_ci_proto_msgTypes[36] + mi := &file_depot_ci_v1_ci_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2467,7 +2998,7 @@ func (x *ListWorkflowsRequest) String() string { func (*ListWorkflowsRequest) ProtoMessage() {} func (x *ListWorkflowsRequest) ProtoReflect() protoreflect.Message { - mi := &file_depot_ci_v1_ci_proto_msgTypes[36] + mi := &file_depot_ci_v1_ci_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2480,7 +3011,7 @@ func (x *ListWorkflowsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkflowsRequest.ProtoReflect.Descriptor instead. func (*ListWorkflowsRequest) Descriptor() ([]byte, []int) { - return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{36} + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{41} } func (x *ListWorkflowsRequest) GetPageSize() int32 { @@ -2543,7 +3074,7 @@ type ListWorkflowsResponse struct { func (x *ListWorkflowsResponse) Reset() { *x = ListWorkflowsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_depot_ci_v1_ci_proto_msgTypes[37] + mi := &file_depot_ci_v1_ci_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2556,7 +3087,7 @@ func (x *ListWorkflowsResponse) String() string { func (*ListWorkflowsResponse) ProtoMessage() {} func (x *ListWorkflowsResponse) ProtoReflect() protoreflect.Message { - mi := &file_depot_ci_v1_ci_proto_msgTypes[37] + mi := &file_depot_ci_v1_ci_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2569,7 +3100,7 @@ func (x *ListWorkflowsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkflowsResponse.ProtoReflect.Descriptor instead. func (*ListWorkflowsResponse) Descriptor() ([]byte, []int) { - return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{37} + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{42} } func (x *ListWorkflowsResponse) GetWorkflows() []*ListWorkflowsResponseWorkflow { @@ -2601,7 +3132,7 @@ type ListWorkflowsResponseWorkflow struct { func (x *ListWorkflowsResponseWorkflow) Reset() { *x = ListWorkflowsResponseWorkflow{} if protoimpl.UnsafeEnabled { - mi := &file_depot_ci_v1_ci_proto_msgTypes[38] + mi := &file_depot_ci_v1_ci_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2614,7 +3145,7 @@ func (x *ListWorkflowsResponseWorkflow) String() string { func (*ListWorkflowsResponseWorkflow) ProtoMessage() {} func (x *ListWorkflowsResponseWorkflow) ProtoReflect() protoreflect.Message { - mi := &file_depot_ci_v1_ci_proto_msgTypes[38] + mi := &file_depot_ci_v1_ci_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2627,7 +3158,7 @@ func (x *ListWorkflowsResponseWorkflow) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkflowsResponseWorkflow.ProtoReflect.Descriptor instead. func (*ListWorkflowsResponseWorkflow) Descriptor() ([]byte, []int) { - return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{38} + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{43} } func (x *ListWorkflowsResponseWorkflow) GetWorkflowId() string { @@ -2725,7 +3256,7 @@ type ListWorkflowsResponseJobCounts struct { func (x *ListWorkflowsResponseJobCounts) Reset() { *x = ListWorkflowsResponseJobCounts{} if protoimpl.UnsafeEnabled { - mi := &file_depot_ci_v1_ci_proto_msgTypes[39] + mi := &file_depot_ci_v1_ci_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2738,7 +3269,7 @@ func (x *ListWorkflowsResponseJobCounts) String() string { func (*ListWorkflowsResponseJobCounts) ProtoMessage() {} func (x *ListWorkflowsResponseJobCounts) ProtoReflect() protoreflect.Message { - mi := &file_depot_ci_v1_ci_proto_msgTypes[39] + mi := &file_depot_ci_v1_ci_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2751,7 +3282,7 @@ func (x *ListWorkflowsResponseJobCounts) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkflowsResponseJobCounts.ProtoReflect.Descriptor instead. func (*ListWorkflowsResponseJobCounts) Descriptor() ([]byte, []int) { - return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{39} + return file_depot_ci_v1_ci_proto_rawDescGZIP(), []int{44} } func (x *ListWorkflowsResponseJobCounts) GetTotal() int32 { @@ -3033,213 +3564,312 @@ var file_depot_ci_v1_ci_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x18, - 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x4c, 0x6f, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x65, - 0x6d, 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x74, - 0x74, 0x65, 0x6d, 0x70, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, - 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x6f, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, - 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, - 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, - 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x92, 0x01, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x4c, - 0x69, 0x6e, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x65, 0x70, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x12, - 0x1f, 0x0a, 0x0b, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0xb5, 0x01, 0x0a, - 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x68, 0x61, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x68, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, - 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x70, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x70, 0x72, 0x22, 0x70, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x72, 0x75, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x12, 0x26, - 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, - 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xd0, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x12, 0x15, - 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x72, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x68, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x73, 0x68, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x19, - 0x0a, 0x08, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x53, 0x68, 0x61, 0x22, 0xc1, 0x01, 0x0a, 0x14, 0x4c, 0x69, - 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x68, 0x61, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x68, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x70, - 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x70, 0x72, 0x4a, 0x04, 0x08, 0x02, 0x10, - 0x03, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x78, 0x0a, - 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x65, 0x70, 0x6f, - 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x57, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, - 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xee, 0x02, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x50, - 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x12, + 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x49, 0x64, 0x22, 0x93, 0x06, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6f, + 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, + 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, + 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x10, 0x0a, + 0x03, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, + 0x10, 0x0a, 0x03, 0x73, 0x68, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x68, + 0x61, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x53, 0x68, 0x61, 0x12, 0x18, 0x0a, 0x07, + 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x75, 0x6e, 0x5f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, + 0x75, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x72, + 0x75, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x75, 0x6e, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x46, + 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x50, 0x61, 0x74, 0x68, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, + 0x16, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, + 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x46, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x65, 0x64, 0x41, 0x74, 0x12, 0x41, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x64, 0x65, 0x70, 0x6f, + 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, + 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x4a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0xce, 0x01, 0x0a, 0x14, 0x47, 0x65, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x69, 0x6e, + 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41, 0x74, 0x22, 0xd8, 0x01, 0x0a, 0x0e, 0x47, + 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, 0x6f, 0x62, 0x12, 0x15, 0x0a, + 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, + 0x6f, 0x62, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6a, 0x6f, 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6a, 0x6f, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3e, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, + 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x4a, 0x6f, 0x62, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x52, 0x08, 0x61, 0x74, 0x74, + 0x65, 0x6d, 0x70, 0x74, 0x73, 0x22, 0xe6, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, 0x6f, 0x62, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1f, 0x0a, + 0x0b, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41, 0x74, 0x22, 0x58, + 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x4c, + 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x74, + 0x74, 0x65, 0x6d, 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, + 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x6f, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4a, + 0x6f, 0x62, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x65, + 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, + 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x92, 0x01, 0x0a, 0x07, 0x4c, 0x6f, + 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x65, 0x70, 0x49, 0x64, 0x12, 0x21, + 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, + 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, + 0x64, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0xb5, + 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, + 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, + 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x68, + 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x68, 0x61, 0x12, 0x18, 0x0a, 0x07, + 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x70, 0x72, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x70, 0x72, 0x22, 0x70, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x72, 0x75, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, + 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x04, 0x72, 0x75, 0x6e, 0x73, + 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, + 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xd0, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x75, 0x6e, + 0x12, 0x15, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x74, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x68, 0x61, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x73, 0x68, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x75, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x73, 0x68, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, - 0x68, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x53, 0x68, 0x61, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4a, 0x0a, 0x0a, - 0x6a, 0x6f, 0x62, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, + 0x12, 0x19, 0x0a, 0x08, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x53, 0x68, 0x61, 0x22, 0xc1, 0x01, 0x0a, 0x14, + 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x73, + 0x68, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x68, 0x61, 0x12, 0x0e, 0x0a, + 0x02, 0x70, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x70, 0x72, 0x4a, 0x04, 0x08, + 0x02, 0x10, 0x03, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, + 0x78, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x65, + 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x57, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x73, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, + 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xee, 0x02, 0x0a, 0x1d, 0x4c, 0x69, + 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1f, 0x0a, 0x0b, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x06, 0x72, + 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, + 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x68, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x73, 0x68, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x68, 0x61, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x53, 0x68, 0x61, 0x12, + 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4a, + 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, + 0x09, 0x6a, 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0xee, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x09, 0x6a, - 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0xee, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x61, 0x69, - 0x74, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x77, 0x61, 0x69, 0x74, - 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x61, 0x69, - 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x32, 0xcf, 0x08, 0x0a, 0x09, 0x43, 0x49, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x03, 0x52, 0x75, 0x6e, 0x12, 0x17, - 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, - 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x70, 0x61, 0x74, 0x63, 0x68, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, - 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x70, - 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x08, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4a, - 0x6f, 0x62, 0x12, 0x1c, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x74, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x58, 0x0a, 0x0d, 0x52, 0x65, 0x72, 0x75, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x12, 0x21, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x72, 0x75, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x72, 0x75, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0f, 0x52, - 0x65, 0x74, 0x72, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x23, - 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x74, - 0x72, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x09, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x12, 0x1d, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, - 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, - 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0e, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x22, 0x2e, 0x64, 0x65, - 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x77, + 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x77, 0x61, + 0x69, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, + 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x32, 0xa3, 0x09, 0x0a, 0x09, + 0x43, 0x49, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x03, 0x52, 0x75, 0x6e, + 0x12, 0x17, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x64, 0x65, 0x70, 0x6f, + 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x70, 0x61, 0x74, 0x63, + 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x70, 0x6f, + 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, - 0x12, 0x1a, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x64, - 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x09, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x75, 0x6e, 0x12, 0x1d, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, - 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x75, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, - 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x75, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0c, 0x47, 0x65, 0x74, - 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x2e, 0x64, 0x65, 0x70, 0x6f, - 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x65, + 0x25, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, + 0x73, 0x70, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x08, 0x52, 0x65, 0x74, 0x72, + 0x79, 0x4a, 0x6f, 0x62, 0x12, 0x1c, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0d, 0x52, 0x65, 0x72, 0x75, 0x6e, 0x57, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x21, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x72, 0x75, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, + 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x72, 0x75, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, + 0x0f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, + 0x12, 0x23, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x74, 0x72, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4a, + 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, + 0x09, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x12, 0x1d, 0x2e, 0x64, 0x65, 0x70, + 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, + 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x64, 0x65, 0x70, 0x6f, + 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, + 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0e, 0x43, + 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x22, 0x2e, + 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, + 0x65, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x52, + 0x75, 0x6e, 0x12, 0x1a, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, + 0x09, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x75, 0x6e, 0x12, 0x1d, 0x2e, 0x64, 0x65, 0x70, + 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, + 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x64, 0x65, 0x70, 0x6f, + 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x75, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0c, 0x47, + 0x65, 0x74, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x64, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, - 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, - 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, - 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, - 0x62, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, - 0x6e, 0x73, 0x12, 0x1c, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x58, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x73, 0x12, 0x21, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xe1, 0x01, 0x0a, 0x10, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x5e, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, - 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x6d, 0x0a, 0x14, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x73, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x72, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, + 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, + 0x75, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x12, 0x1f, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, + 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, + 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, + 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x4c, 0x6f, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x08, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x1c, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, + 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x21, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, + 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x65, + 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x32, 0xe1, 0x01, 0x0a, 0x10, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5e, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x70, 0x6f, + 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x14, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x72, 0x73, 0x12, 0x28, + 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x70, + 0x6f, 0x72, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x41, 0x6e, - 0x64, 0x56, 0x61, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, - 0x99, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, - 0x2e, 0x76, 0x31, 0x42, 0x07, 0x43, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x70, 0x6f, 0x74, - 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x64, - 0x65, 0x70, 0x6f, 0x74, 0x2f, 0x63, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x69, 0x76, 0x31, 0xa2, - 0x02, 0x03, 0x44, 0x43, 0x58, 0xaa, 0x02, 0x0b, 0x44, 0x65, 0x70, 0x6f, 0x74, 0x2e, 0x43, 0x69, - 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0b, 0x44, 0x65, 0x70, 0x6f, 0x74, 0x5c, 0x43, 0x69, 0x5c, 0x56, - 0x31, 0xe2, 0x02, 0x17, 0x44, 0x65, 0x70, 0x6f, 0x74, 0x5c, 0x43, 0x69, 0x5c, 0x56, 0x31, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x44, 0x65, - 0x70, 0x6f, 0x74, 0x3a, 0x3a, 0x43, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x72, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x99, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x64, 0x65, + 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x07, 0x43, 0x69, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x2f, 0x63, 0x69, 0x2f, 0x76, 0x31, + 0x3b, 0x63, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x44, 0x43, 0x58, 0xaa, 0x02, 0x0b, 0x44, 0x65, + 0x70, 0x6f, 0x74, 0x2e, 0x43, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0b, 0x44, 0x65, 0x70, 0x6f, + 0x74, 0x5c, 0x43, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x17, 0x44, 0x65, 0x70, 0x6f, 0x74, 0x5c, + 0x43, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x0d, 0x44, 0x65, 0x70, 0x6f, 0x74, 0x3a, 0x3a, 0x43, 0x69, 0x3a, 0x3a, 0x56, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3254,7 +3884,7 @@ func file_depot_ci_v1_ci_proto_rawDescGZIP() []byte { return file_depot_ci_v1_ci_proto_rawDescData } -var file_depot_ci_v1_ci_proto_msgTypes = make([]protoimpl.MessageInfo, 41) +var file_depot_ci_v1_ci_proto_msgTypes = make([]protoimpl.MessageInfo, 46) var file_depot_ci_v1_ci_proto_goTypes = []interface{}{ (*GetInstallationRequest)(nil), // 0: depot.ci.v1.GetInstallationRequest (*GetInstallationResponse)(nil), // 1: depot.ci.v1.GetInstallationResponse @@ -3286,65 +3916,75 @@ var file_depot_ci_v1_ci_proto_goTypes = []interface{}{ (*WorkflowStatus)(nil), // 27: depot.ci.v1.WorkflowStatus (*JobStatus)(nil), // 28: depot.ci.v1.JobStatus (*AttemptStatus)(nil), // 29: depot.ci.v1.AttemptStatus - (*GetJobAttemptLogsRequest)(nil), // 30: depot.ci.v1.GetJobAttemptLogsRequest - (*GetJobAttemptLogsResponse)(nil), // 31: depot.ci.v1.GetJobAttemptLogsResponse - (*LogLine)(nil), // 32: depot.ci.v1.LogLine - (*ListRunsRequest)(nil), // 33: depot.ci.v1.ListRunsRequest - (*ListRunsResponse)(nil), // 34: depot.ci.v1.ListRunsResponse - (*ListRunsResponseRun)(nil), // 35: depot.ci.v1.ListRunsResponseRun - (*ListWorkflowsRequest)(nil), // 36: depot.ci.v1.ListWorkflowsRequest - (*ListWorkflowsResponse)(nil), // 37: depot.ci.v1.ListWorkflowsResponse - (*ListWorkflowsResponseWorkflow)(nil), // 38: depot.ci.v1.ListWorkflowsResponseWorkflow - (*ListWorkflowsResponseJobCounts)(nil), // 39: depot.ci.v1.ListWorkflowsResponseJobCounts - nil, // 40: depot.ci.v1.DispatchWorkflowRequest.InputsEntry + (*GetWorkflowRequest)(nil), // 30: depot.ci.v1.GetWorkflowRequest + (*GetWorkflowResponse)(nil), // 31: depot.ci.v1.GetWorkflowResponse + (*GetWorkflowExecution)(nil), // 32: depot.ci.v1.GetWorkflowExecution + (*GetWorkflowJob)(nil), // 33: depot.ci.v1.GetWorkflowJob + (*GetWorkflowJobAttempt)(nil), // 34: depot.ci.v1.GetWorkflowJobAttempt + (*GetJobAttemptLogsRequest)(nil), // 35: depot.ci.v1.GetJobAttemptLogsRequest + (*GetJobAttemptLogsResponse)(nil), // 36: depot.ci.v1.GetJobAttemptLogsResponse + (*LogLine)(nil), // 37: depot.ci.v1.LogLine + (*ListRunsRequest)(nil), // 38: depot.ci.v1.ListRunsRequest + (*ListRunsResponse)(nil), // 39: depot.ci.v1.ListRunsResponse + (*ListRunsResponseRun)(nil), // 40: depot.ci.v1.ListRunsResponseRun + (*ListWorkflowsRequest)(nil), // 41: depot.ci.v1.ListWorkflowsRequest + (*ListWorkflowsResponse)(nil), // 42: depot.ci.v1.ListWorkflowsResponse + (*ListWorkflowsResponseWorkflow)(nil), // 43: depot.ci.v1.ListWorkflowsResponseWorkflow + (*ListWorkflowsResponseJobCounts)(nil), // 44: depot.ci.v1.ListWorkflowsResponseJobCounts + nil, // 45: depot.ci.v1.DispatchWorkflowRequest.InputsEntry } var file_depot_ci_v1_ci_proto_depIdxs = []int32{ 6, // 0: depot.ci.v1.GetInstallationResponse.installations:type_name -> depot.ci.v1.Installation 4, // 1: depot.ci.v1.ImportSecretsAndVarsResponse.dry_run_result:type_name -> depot.ci.v1.DryRunResult 5, // 2: depot.ci.v1.ImportSecretsAndVarsResponse.run_result:type_name -> depot.ci.v1.RunResult - 40, // 3: depot.ci.v1.DispatchWorkflowRequest.inputs:type_name -> depot.ci.v1.DispatchWorkflowRequest.InputsEntry + 45, // 3: depot.ci.v1.DispatchWorkflowRequest.inputs:type_name -> depot.ci.v1.DispatchWorkflowRequest.InputsEntry 27, // 4: depot.ci.v1.GetRunStatusResponse.workflows:type_name -> depot.ci.v1.WorkflowStatus 28, // 5: depot.ci.v1.WorkflowStatus.jobs:type_name -> depot.ci.v1.JobStatus 29, // 6: depot.ci.v1.JobStatus.attempts:type_name -> depot.ci.v1.AttemptStatus - 32, // 7: depot.ci.v1.GetJobAttemptLogsResponse.lines:type_name -> depot.ci.v1.LogLine - 35, // 8: depot.ci.v1.ListRunsResponse.runs:type_name -> depot.ci.v1.ListRunsResponseRun - 38, // 9: depot.ci.v1.ListWorkflowsResponse.workflows:type_name -> depot.ci.v1.ListWorkflowsResponseWorkflow - 39, // 10: depot.ci.v1.ListWorkflowsResponseWorkflow.job_counts:type_name -> depot.ci.v1.ListWorkflowsResponseJobCounts - 7, // 11: depot.ci.v1.CIService.Run:input_type -> depot.ci.v1.RunRequest - 9, // 12: depot.ci.v1.CIService.DispatchWorkflow:input_type -> depot.ci.v1.DispatchWorkflowRequest - 11, // 13: depot.ci.v1.CIService.RetryJob:input_type -> depot.ci.v1.RetryJobRequest - 13, // 14: depot.ci.v1.CIService.RerunWorkflow:input_type -> depot.ci.v1.RerunWorkflowRequest - 15, // 15: depot.ci.v1.CIService.RetryFailedJobs:input_type -> depot.ci.v1.RetryFailedJobsRequest - 17, // 16: depot.ci.v1.CIService.CancelJob:input_type -> depot.ci.v1.CancelJobRequest - 19, // 17: depot.ci.v1.CIService.CancelWorkflow:input_type -> depot.ci.v1.CancelWorkflowRequest - 21, // 18: depot.ci.v1.CIService.GetRun:input_type -> depot.ci.v1.GetRunRequest - 23, // 19: depot.ci.v1.CIService.CancelRun:input_type -> depot.ci.v1.CancelRunRequest - 25, // 20: depot.ci.v1.CIService.GetRunStatus:input_type -> depot.ci.v1.GetRunStatusRequest - 30, // 21: depot.ci.v1.CIService.GetJobAttemptLogs:input_type -> depot.ci.v1.GetJobAttemptLogsRequest - 33, // 22: depot.ci.v1.CIService.ListRuns:input_type -> depot.ci.v1.ListRunsRequest - 36, // 23: depot.ci.v1.CIService.ListWorkflows:input_type -> depot.ci.v1.ListWorkflowsRequest - 0, // 24: depot.ci.v1.MigrationService.GetInstallation:input_type -> depot.ci.v1.GetInstallationRequest - 2, // 25: depot.ci.v1.MigrationService.ImportSecretsAndVars:input_type -> depot.ci.v1.ImportSecretsAndVarsRequest - 8, // 26: depot.ci.v1.CIService.Run:output_type -> depot.ci.v1.RunResponse - 10, // 27: depot.ci.v1.CIService.DispatchWorkflow:output_type -> depot.ci.v1.DispatchWorkflowResponse - 12, // 28: depot.ci.v1.CIService.RetryJob:output_type -> depot.ci.v1.RetryJobResponse - 14, // 29: depot.ci.v1.CIService.RerunWorkflow:output_type -> depot.ci.v1.RerunWorkflowResponse - 16, // 30: depot.ci.v1.CIService.RetryFailedJobs:output_type -> depot.ci.v1.RetryFailedJobsResponse - 18, // 31: depot.ci.v1.CIService.CancelJob:output_type -> depot.ci.v1.CancelJobResponse - 20, // 32: depot.ci.v1.CIService.CancelWorkflow:output_type -> depot.ci.v1.CancelWorkflowResponse - 22, // 33: depot.ci.v1.CIService.GetRun:output_type -> depot.ci.v1.GetRunResponse - 24, // 34: depot.ci.v1.CIService.CancelRun:output_type -> depot.ci.v1.CancelRunResponse - 26, // 35: depot.ci.v1.CIService.GetRunStatus:output_type -> depot.ci.v1.GetRunStatusResponse - 31, // 36: depot.ci.v1.CIService.GetJobAttemptLogs:output_type -> depot.ci.v1.GetJobAttemptLogsResponse - 34, // 37: depot.ci.v1.CIService.ListRuns:output_type -> depot.ci.v1.ListRunsResponse - 37, // 38: depot.ci.v1.CIService.ListWorkflows:output_type -> depot.ci.v1.ListWorkflowsResponse - 1, // 39: depot.ci.v1.MigrationService.GetInstallation:output_type -> depot.ci.v1.GetInstallationResponse - 3, // 40: depot.ci.v1.MigrationService.ImportSecretsAndVars:output_type -> depot.ci.v1.ImportSecretsAndVarsResponse - 26, // [26:41] is the sub-list for method output_type - 11, // [11:26] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 32, // 7: depot.ci.v1.GetWorkflowResponse.executions:type_name -> depot.ci.v1.GetWorkflowExecution + 33, // 8: depot.ci.v1.GetWorkflowResponse.jobs:type_name -> depot.ci.v1.GetWorkflowJob + 34, // 9: depot.ci.v1.GetWorkflowJob.attempts:type_name -> depot.ci.v1.GetWorkflowJobAttempt + 37, // 10: depot.ci.v1.GetJobAttemptLogsResponse.lines:type_name -> depot.ci.v1.LogLine + 40, // 11: depot.ci.v1.ListRunsResponse.runs:type_name -> depot.ci.v1.ListRunsResponseRun + 43, // 12: depot.ci.v1.ListWorkflowsResponse.workflows:type_name -> depot.ci.v1.ListWorkflowsResponseWorkflow + 44, // 13: depot.ci.v1.ListWorkflowsResponseWorkflow.job_counts:type_name -> depot.ci.v1.ListWorkflowsResponseJobCounts + 7, // 14: depot.ci.v1.CIService.Run:input_type -> depot.ci.v1.RunRequest + 9, // 15: depot.ci.v1.CIService.DispatchWorkflow:input_type -> depot.ci.v1.DispatchWorkflowRequest + 11, // 16: depot.ci.v1.CIService.RetryJob:input_type -> depot.ci.v1.RetryJobRequest + 13, // 17: depot.ci.v1.CIService.RerunWorkflow:input_type -> depot.ci.v1.RerunWorkflowRequest + 15, // 18: depot.ci.v1.CIService.RetryFailedJobs:input_type -> depot.ci.v1.RetryFailedJobsRequest + 17, // 19: depot.ci.v1.CIService.CancelJob:input_type -> depot.ci.v1.CancelJobRequest + 19, // 20: depot.ci.v1.CIService.CancelWorkflow:input_type -> depot.ci.v1.CancelWorkflowRequest + 21, // 21: depot.ci.v1.CIService.GetRun:input_type -> depot.ci.v1.GetRunRequest + 23, // 22: depot.ci.v1.CIService.CancelRun:input_type -> depot.ci.v1.CancelRunRequest + 25, // 23: depot.ci.v1.CIService.GetRunStatus:input_type -> depot.ci.v1.GetRunStatusRequest + 30, // 24: depot.ci.v1.CIService.GetWorkflow:input_type -> depot.ci.v1.GetWorkflowRequest + 35, // 25: depot.ci.v1.CIService.GetJobAttemptLogs:input_type -> depot.ci.v1.GetJobAttemptLogsRequest + 38, // 26: depot.ci.v1.CIService.ListRuns:input_type -> depot.ci.v1.ListRunsRequest + 41, // 27: depot.ci.v1.CIService.ListWorkflows:input_type -> depot.ci.v1.ListWorkflowsRequest + 0, // 28: depot.ci.v1.MigrationService.GetInstallation:input_type -> depot.ci.v1.GetInstallationRequest + 2, // 29: depot.ci.v1.MigrationService.ImportSecretsAndVars:input_type -> depot.ci.v1.ImportSecretsAndVarsRequest + 8, // 30: depot.ci.v1.CIService.Run:output_type -> depot.ci.v1.RunResponse + 10, // 31: depot.ci.v1.CIService.DispatchWorkflow:output_type -> depot.ci.v1.DispatchWorkflowResponse + 12, // 32: depot.ci.v1.CIService.RetryJob:output_type -> depot.ci.v1.RetryJobResponse + 14, // 33: depot.ci.v1.CIService.RerunWorkflow:output_type -> depot.ci.v1.RerunWorkflowResponse + 16, // 34: depot.ci.v1.CIService.RetryFailedJobs:output_type -> depot.ci.v1.RetryFailedJobsResponse + 18, // 35: depot.ci.v1.CIService.CancelJob:output_type -> depot.ci.v1.CancelJobResponse + 20, // 36: depot.ci.v1.CIService.CancelWorkflow:output_type -> depot.ci.v1.CancelWorkflowResponse + 22, // 37: depot.ci.v1.CIService.GetRun:output_type -> depot.ci.v1.GetRunResponse + 24, // 38: depot.ci.v1.CIService.CancelRun:output_type -> depot.ci.v1.CancelRunResponse + 26, // 39: depot.ci.v1.CIService.GetRunStatus:output_type -> depot.ci.v1.GetRunStatusResponse + 31, // 40: depot.ci.v1.CIService.GetWorkflow:output_type -> depot.ci.v1.GetWorkflowResponse + 36, // 41: depot.ci.v1.CIService.GetJobAttemptLogs:output_type -> depot.ci.v1.GetJobAttemptLogsResponse + 39, // 42: depot.ci.v1.CIService.ListRuns:output_type -> depot.ci.v1.ListRunsResponse + 42, // 43: depot.ci.v1.CIService.ListWorkflows:output_type -> depot.ci.v1.ListWorkflowsResponse + 1, // 44: depot.ci.v1.MigrationService.GetInstallation:output_type -> depot.ci.v1.GetInstallationResponse + 3, // 45: depot.ci.v1.MigrationService.ImportSecretsAndVars:output_type -> depot.ci.v1.ImportSecretsAndVarsResponse + 30, // [30:46] is the sub-list for method output_type + 14, // [14:30] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_depot_ci_v1_ci_proto_init() } @@ -3714,7 +4354,7 @@ func file_depot_ci_v1_ci_proto_init() { } } file_depot_ci_v1_ci_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJobAttemptLogsRequest); i { + switch v := v.(*GetWorkflowRequest); i { case 0: return &v.state case 1: @@ -3726,7 +4366,7 @@ func file_depot_ci_v1_ci_proto_init() { } } file_depot_ci_v1_ci_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJobAttemptLogsResponse); i { + switch v := v.(*GetWorkflowResponse); i { case 0: return &v.state case 1: @@ -3738,7 +4378,7 @@ func file_depot_ci_v1_ci_proto_init() { } } file_depot_ci_v1_ci_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogLine); i { + switch v := v.(*GetWorkflowExecution); i { case 0: return &v.state case 1: @@ -3750,7 +4390,7 @@ func file_depot_ci_v1_ci_proto_init() { } } file_depot_ci_v1_ci_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRunsRequest); i { + switch v := v.(*GetWorkflowJob); i { case 0: return &v.state case 1: @@ -3762,7 +4402,7 @@ func file_depot_ci_v1_ci_proto_init() { } } file_depot_ci_v1_ci_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRunsResponse); i { + switch v := v.(*GetWorkflowJobAttempt); i { case 0: return &v.state case 1: @@ -3774,7 +4414,7 @@ func file_depot_ci_v1_ci_proto_init() { } } file_depot_ci_v1_ci_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRunsResponseRun); i { + switch v := v.(*GetJobAttemptLogsRequest); i { case 0: return &v.state case 1: @@ -3786,7 +4426,7 @@ func file_depot_ci_v1_ci_proto_init() { } } file_depot_ci_v1_ci_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWorkflowsRequest); i { + switch v := v.(*GetJobAttemptLogsResponse); i { case 0: return &v.state case 1: @@ -3798,7 +4438,7 @@ func file_depot_ci_v1_ci_proto_init() { } } file_depot_ci_v1_ci_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWorkflowsResponse); i { + switch v := v.(*LogLine); i { case 0: return &v.state case 1: @@ -3810,7 +4450,7 @@ func file_depot_ci_v1_ci_proto_init() { } } file_depot_ci_v1_ci_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWorkflowsResponseWorkflow); i { + switch v := v.(*ListRunsRequest); i { case 0: return &v.state case 1: @@ -3822,6 +4462,66 @@ func file_depot_ci_v1_ci_proto_init() { } } file_depot_ci_v1_ci_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListRunsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_depot_ci_v1_ci_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListRunsResponseRun); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_depot_ci_v1_ci_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListWorkflowsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_depot_ci_v1_ci_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListWorkflowsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_depot_ci_v1_ci_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListWorkflowsResponseWorkflow); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_depot_ci_v1_ci_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListWorkflowsResponseJobCounts); i { case 0: return &v.state @@ -3845,7 +4545,7 @@ func file_depot_ci_v1_ci_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_depot_ci_v1_ci_proto_rawDesc, NumEnums: 0, - NumMessages: 41, + NumMessages: 46, NumExtensions: 0, NumServices: 2, }, diff --git a/pkg/proto/depot/ci/v1/civ1connect/ci.connect.go b/pkg/proto/depot/ci/v1/civ1connect/ci.connect.go index 6373875b..6ece23f1 100644 --- a/pkg/proto/depot/ci/v1/civ1connect/ci.connect.go +++ b/pkg/proto/depot/ci/v1/civ1connect/ci.connect.go @@ -58,6 +58,8 @@ const ( CIServiceCancelRunProcedure = "/depot.ci.v1.CIService/CancelRun" // CIServiceGetRunStatusProcedure is the fully-qualified name of the CIService's GetRunStatus RPC. CIServiceGetRunStatusProcedure = "/depot.ci.v1.CIService/GetRunStatus" + // CIServiceGetWorkflowProcedure is the fully-qualified name of the CIService's GetWorkflow RPC. + CIServiceGetWorkflowProcedure = "/depot.ci.v1.CIService/GetWorkflow" // CIServiceGetJobAttemptLogsProcedure is the fully-qualified name of the CIService's // GetJobAttemptLogs RPC. CIServiceGetJobAttemptLogsProcedure = "/depot.ci.v1.CIService/GetJobAttemptLogs" @@ -95,6 +97,8 @@ type CIServiceClient interface { CancelRun(context.Context, *connect.Request[v1.CancelRunRequest]) (*connect.Response[v1.CancelRunResponse], error) // GetRunStatus returns the current status of a run including its workflows, jobs, and attempts GetRunStatus(context.Context, *connect.Request[v1.GetRunStatusRequest]) (*connect.Response[v1.GetRunStatusResponse], error) + // GetWorkflow returns curated workflow, run, execution, job, and attempt metadata for single-workflow inspection + GetWorkflow(context.Context, *connect.Request[v1.GetWorkflowRequest]) (*connect.Response[v1.GetWorkflowResponse], error) // GetJobAttemptLogs returns log lines for a job attempt GetJobAttemptLogs(context.Context, *connect.Request[v1.GetJobAttemptLogsRequest]) (*connect.Response[v1.GetJobAttemptLogsResponse], error) // ListRuns returns recent CI runs for the authenticated organization. @@ -166,6 +170,11 @@ func NewCIServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...c baseURL+CIServiceGetRunStatusProcedure, opts..., ), + getWorkflow: connect.NewClient[v1.GetWorkflowRequest, v1.GetWorkflowResponse]( + httpClient, + baseURL+CIServiceGetWorkflowProcedure, + opts..., + ), getJobAttemptLogs: connect.NewClient[v1.GetJobAttemptLogsRequest, v1.GetJobAttemptLogsResponse]( httpClient, baseURL+CIServiceGetJobAttemptLogsProcedure, @@ -196,6 +205,7 @@ type cIServiceClient struct { getRun *connect.Client[v1.GetRunRequest, v1.GetRunResponse] cancelRun *connect.Client[v1.CancelRunRequest, v1.CancelRunResponse] getRunStatus *connect.Client[v1.GetRunStatusRequest, v1.GetRunStatusResponse] + getWorkflow *connect.Client[v1.GetWorkflowRequest, v1.GetWorkflowResponse] getJobAttemptLogs *connect.Client[v1.GetJobAttemptLogsRequest, v1.GetJobAttemptLogsResponse] listRuns *connect.Client[v1.ListRunsRequest, v1.ListRunsResponse] listWorkflows *connect.Client[v1.ListWorkflowsRequest, v1.ListWorkflowsResponse] @@ -251,6 +261,11 @@ func (c *cIServiceClient) GetRunStatus(ctx context.Context, req *connect.Request return c.getRunStatus.CallUnary(ctx, req) } +// GetWorkflow calls depot.ci.v1.CIService.GetWorkflow. +func (c *cIServiceClient) GetWorkflow(ctx context.Context, req *connect.Request[v1.GetWorkflowRequest]) (*connect.Response[v1.GetWorkflowResponse], error) { + return c.getWorkflow.CallUnary(ctx, req) +} + // GetJobAttemptLogs calls depot.ci.v1.CIService.GetJobAttemptLogs. func (c *cIServiceClient) GetJobAttemptLogs(ctx context.Context, req *connect.Request[v1.GetJobAttemptLogsRequest]) (*connect.Response[v1.GetJobAttemptLogsResponse], error) { return c.getJobAttemptLogs.CallUnary(ctx, req) @@ -288,6 +303,8 @@ type CIServiceHandler interface { CancelRun(context.Context, *connect.Request[v1.CancelRunRequest]) (*connect.Response[v1.CancelRunResponse], error) // GetRunStatus returns the current status of a run including its workflows, jobs, and attempts GetRunStatus(context.Context, *connect.Request[v1.GetRunStatusRequest]) (*connect.Response[v1.GetRunStatusResponse], error) + // GetWorkflow returns curated workflow, run, execution, job, and attempt metadata for single-workflow inspection + GetWorkflow(context.Context, *connect.Request[v1.GetWorkflowRequest]) (*connect.Response[v1.GetWorkflowResponse], error) // GetJobAttemptLogs returns log lines for a job attempt GetJobAttemptLogs(context.Context, *connect.Request[v1.GetJobAttemptLogsRequest]) (*connect.Response[v1.GetJobAttemptLogsResponse], error) // ListRuns returns recent CI runs for the authenticated organization. @@ -355,6 +372,11 @@ func NewCIServiceHandler(svc CIServiceHandler, opts ...connect.HandlerOption) (s svc.GetRunStatus, opts..., ) + cIServiceGetWorkflowHandler := connect.NewUnaryHandler( + CIServiceGetWorkflowProcedure, + svc.GetWorkflow, + opts..., + ) cIServiceGetJobAttemptLogsHandler := connect.NewUnaryHandler( CIServiceGetJobAttemptLogsProcedure, svc.GetJobAttemptLogs, @@ -392,6 +414,8 @@ func NewCIServiceHandler(svc CIServiceHandler, opts ...connect.HandlerOption) (s cIServiceCancelRunHandler.ServeHTTP(w, r) case CIServiceGetRunStatusProcedure: cIServiceGetRunStatusHandler.ServeHTTP(w, r) + case CIServiceGetWorkflowProcedure: + cIServiceGetWorkflowHandler.ServeHTTP(w, r) case CIServiceGetJobAttemptLogsProcedure: cIServiceGetJobAttemptLogsHandler.ServeHTTP(w, r) case CIServiceListRunsProcedure: @@ -447,6 +471,10 @@ func (UnimplementedCIServiceHandler) GetRunStatus(context.Context, *connect.Requ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("depot.ci.v1.CIService.GetRunStatus is not implemented")) } +func (UnimplementedCIServiceHandler) GetWorkflow(context.Context, *connect.Request[v1.GetWorkflowRequest]) (*connect.Response[v1.GetWorkflowResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("depot.ci.v1.CIService.GetWorkflow is not implemented")) +} + func (UnimplementedCIServiceHandler) GetJobAttemptLogs(context.Context, *connect.Request[v1.GetJobAttemptLogsRequest]) (*connect.Response[v1.GetJobAttemptLogsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("depot.ci.v1.CIService.GetJobAttemptLogs is not implemented")) } diff --git a/proto/depot/ci/v1/ci.proto b/proto/depot/ci/v1/ci.proto index a8de0bbc..26bebebb 100644 --- a/proto/depot/ci/v1/ci.proto +++ b/proto/depot/ci/v1/ci.proto @@ -35,6 +35,9 @@ service CIService { // GetRunStatus returns the current status of a run including its workflows, jobs, and attempts rpc GetRunStatus(GetRunStatusRequest) returns (GetRunStatusResponse) {} + // GetWorkflow returns curated workflow, run, execution, job, and attempt metadata for single-workflow inspection + rpc GetWorkflow(GetWorkflowRequest) returns (GetWorkflowResponse) {} + // GetJobAttemptLogs returns log lines for a job attempt rpc GetJobAttemptLogs(GetJobAttemptLogsRequest) returns (GetJobAttemptLogsResponse) {} @@ -309,6 +312,75 @@ message AttemptStatus { string session_id = 5; } +// GetWorkflow messages + +message GetWorkflowRequest { + // workflow_id identifies the workflow to fetch + string workflow_id = 1; +} + +message GetWorkflowResponse { + string org_id = 1; + + // Parent run context + string run_id = 2; + string repo = 3; + string ref = 4; + string sha = 5; + string head_sha = 6; + string trigger = 7; + string run_status = 8; + string run_created_at = 9; + string run_started_at = 10; + string run_finished_at = 11; + + // Workflow metadata + string workflow_id = 12; + string workflow_name = 13; + string workflow_path = 14; + string workflow_status = 15; + string workflow_error_message = 16; + string workflow_created_at = 17; + string workflow_started_at = 18; + string workflow_finished_at = 19; + + // executions are workflow-level records; each re-run creates another execution. + repeated GetWorkflowExecution executions = 20; + // jobs are the workflow jobs and their per-job attempts. + repeated GetWorkflowJob jobs = 21; +} + +// GetWorkflowExecution describes one workflow execution/re-run. +message GetWorkflowExecution { + string execution_id = 1; + int32 execution = 2; + string status = 3; + string created_at = 4; + string started_at = 5; + string finished_at = 6; +} + +message GetWorkflowJob { + string job_id = 1; + string job_key = 2; + string status = 3; + string started_at = 4; + string finished_at = 5; + // attempts are per-job attempts, not workflow execution records. + repeated GetWorkflowJobAttempt attempts = 6; +} + +// GetWorkflowJobAttempt describes one attempt of a job returned by GetWorkflow. +message GetWorkflowJobAttempt { + string attempt_id = 1; + int32 attempt = 2; + string status = 3; + string sandbox_id = 4; + string session_id = 5; + string started_at = 6; + string finished_at = 7; +} + // GetJobAttemptLogs messages message GetJobAttemptLogsRequest {