From 5e3cb5468c2453eded1c1b4f2038ff3fd66d9934 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Fri, 11 Jul 2025 07:10:41 +0000 Subject: [PATCH] fix: use accessors on protobuf messages instead of struct members (#684) So it does not panic if one is nil. Closes forgejo/runner#146 Reviewed-on: https://code.forgejo.org/forgejo/runner/pulls/684 Reviewed-by: Michael Kriese Co-authored-by: Earl Warren Co-committed-by: Earl Warren --- internal/app/cmd/create-runner-file.go | 2 +- internal/app/cmd/create-runner-file_test.go | 2 +- internal/app/cmd/daemon.go | 6 +++--- internal/app/cmd/job.go | 2 +- internal/app/cmd/register.go | 8 ++++---- internal/app/job/job.go | 8 ++++---- internal/app/poll/poller.go | 8 ++++---- internal/pkg/report/reporter.go | 6 +++--- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/internal/app/cmd/create-runner-file.go b/internal/app/cmd/create-runner-file.go index 9e60842e..f3d01bf1 100644 --- a/internal/app/cmd/create-runner-file.go +++ b/internal/app/cmd/create-runner-file.go @@ -156,7 +156,7 @@ func runCreateRunnerFile(ctx context.Context, args *createRunnerFileArgs, config return err } else { log.Infof("connection successful: %s, with version: %s, with labels: %v", - resp.Msg.Runner.Name, resp.Msg.Runner.Version, resp.Msg.Runner.Labels) + resp.Msg.GetRunner().GetName(), resp.Msg.GetRunner().GetVersion(), resp.Msg.GetRunner().GetLabels()) } } return nil diff --git a/internal/app/cmd/create-runner-file_test.go b/internal/app/cmd/create-runner-file_test.go index f2eb68bf..5d3373de 100644 --- a/internal/app/cmd/create-runner-file_test.go +++ b/internal/app/cmd/create-runner-file_test.go @@ -114,5 +114,5 @@ func Test_runCreateRunnerFile(t *testing.T) { ) resp, err := cli.FetchTask(ctx, connect.NewRequest(&runnerv1.FetchTaskRequest{})) assert.NoError(t, err) - assert.Nil(t, resp.Msg.Task) + assert.Nil(t, resp.Msg.GetTask()) } diff --git a/internal/app/cmd/daemon.go b/internal/app/cmd/daemon.go index def8f4af..16fe1aa9 100644 --- a/internal/app/cmd/daemon.go +++ b/internal/app/cmd/daemon.go @@ -105,7 +105,7 @@ func runDaemon(ctx context.Context, configFile *string) func(cmd *cobra.Command, return err } else { log.Infof("runner: %s, with version: %s, with labels: %v, declared successfully", - resp.Msg.Runner.Name, resp.Msg.Runner.Version, resp.Msg.Runner.Labels) + resp.Msg.GetRunner().GetName(), resp.Msg.GetRunner().GetVersion(), resp.Msg.GetRunner().GetLabels()) // if declared successfully, override the labels in the.runner file with valid labels in the config file (if specified) runner.Update(ctx, ls) reg.Labels = ls.ToStrings() @@ -119,14 +119,14 @@ func runDaemon(ctx context.Context, configFile *string) func(cmd *cobra.Command, go poller.Poll() <-ctx.Done() - log.Infof("runner: %s shutdown initiated, waiting [runner].shutdown_timeout=%s for running jobs to complete before shutting down", resp.Msg.Runner.Name, cfg.Runner.ShutdownTimeout) + log.Infof("runner: %s shutdown initiated, waiting [runner].shutdown_timeout=%s for running jobs to complete before shutting down", resp.Msg.GetRunner().GetName(), cfg.Runner.ShutdownTimeout) ctx, cancel := context.WithTimeout(context.Background(), cfg.Runner.ShutdownTimeout) defer cancel() err = poller.Shutdown(ctx) if err != nil { - log.Warnf("runner: %s cancelled in progress jobs during shutdown", resp.Msg.Runner.Name) + log.Warnf("runner: %s cancelled in progress jobs during shutdown", resp.Msg.GetRunner().GetName()) } return nil } diff --git a/internal/app/cmd/job.go b/internal/app/cmd/job.go index f3e7ad8b..63251245 100644 --- a/internal/app/cmd/job.go +++ b/internal/app/cmd/job.go @@ -101,7 +101,7 @@ func runJob(ctx context.Context, configFile *string) func(cmd *cobra.Command, ar return err } else { log.Infof("runner: %s, with version: %s, with labels: %v, declared successfully", - resp.Msg.Runner.Name, resp.Msg.Runner.Version, resp.Msg.Runner.Labels) + resp.Msg.GetRunner().GetName(), resp.Msg.GetRunner().GetVersion(), resp.Msg.GetRunner().GetLabels()) // if declared successfully, override the labels in the.runner file with valid labels in the config file (if specified) runner.Update(ctx, ls) reg.Labels = ls.ToStrings() diff --git a/internal/app/cmd/register.go b/internal/app/cmd/register.go index c036448d..0d1f46d7 100644 --- a/internal/app/cmd/register.go +++ b/internal/app/cmd/register.go @@ -343,10 +343,10 @@ func doRegister(ctx context.Context, cfg *config.Config, inputs *registerInputs) return err } - reg.ID = resp.Msg.Runner.Id - reg.UUID = resp.Msg.Runner.Uuid - reg.Name = resp.Msg.Runner.Name - reg.Token = resp.Msg.Runner.Token + reg.ID = resp.Msg.GetRunner().GetId() + reg.UUID = resp.Msg.GetRunner().GetUuid() + reg.Name = resp.Msg.GetRunner().GetName() + reg.Token = resp.Msg.GetRunner().GetToken() if err := config.SaveRegistration(cfg.Runner.File, reg); err != nil { return fmt.Errorf("failed to save runner config: %w", err) diff --git a/internal/app/job/job.go b/internal/app/job/job.go index ee84f93c..6fe6cfc9 100644 --- a/internal/app/job/job.go +++ b/internal/app/job/job.go @@ -80,15 +80,15 @@ func (j *Job) fetchTask(ctx context.Context) (*runnerv1.Task, bool) { return nil, false } - if resp.Msg.TasksVersion > v { - j.tasksVersion.CompareAndSwap(v, resp.Msg.TasksVersion) + if resp.Msg.GetTasksVersion() > v { + j.tasksVersion.CompareAndSwap(v, resp.Msg.GetTasksVersion()) } if resp.Msg.Task == nil { return nil, false } - j.tasksVersion.CompareAndSwap(resp.Msg.TasksVersion, 0) + j.tasksVersion.CompareAndSwap(resp.Msg.GetTasksVersion(), 0) - return resp.Msg.Task, true + return resp.Msg.GetTask(), true } diff --git a/internal/app/poll/poller.go b/internal/app/poll/poller.go index 0afadb4e..22e54874 100644 --- a/internal/app/poll/poller.go +++ b/internal/app/poll/poller.go @@ -152,8 +152,8 @@ func (p *poller) fetchTask(ctx context.Context) (*runnerv1.Task, bool) { return nil, false } - if resp.Msg.TasksVersion > v { - p.tasksVersion.CompareAndSwap(v, resp.Msg.TasksVersion) + if resp.Msg.GetTasksVersion() > v { + p.tasksVersion.CompareAndSwap(v, resp.Msg.GetTasksVersion()) } if resp.Msg.Task == nil { @@ -161,7 +161,7 @@ func (p *poller) fetchTask(ctx context.Context) (*runnerv1.Task, bool) { } // got a task, set `tasksVersion` to zero to focre query db in next request. - p.tasksVersion.CompareAndSwap(resp.Msg.TasksVersion, 0) + p.tasksVersion.CompareAndSwap(resp.Msg.GetTasksVersion(), 0) - return resp.Msg.Task, true + return resp.Msg.GetTask(), true } diff --git a/internal/pkg/report/reporter.go b/internal/pkg/report/reporter.go index 57c6a4f7..5d3cc028 100644 --- a/internal/pkg/report/reporter.go +++ b/internal/pkg/report/reporter.go @@ -315,7 +315,7 @@ func (r *Reporter) ReportLog(noMore bool) error { return err } - ack := int(resp.Msg.AckIndex) + ack := int(resp.Msg.GetAckIndex()) if ack < r.logOffset { return fmt.Errorf("submitted logs are lost %d < %d", ack, r.logOffset) } @@ -356,11 +356,11 @@ func (r *Reporter) ReportState() error { return err } - for _, k := range resp.Msg.SentOutputs { + for _, k := range resp.Msg.GetSentOutputs() { r.outputs.Store(k, struct{}{}) } - if resp.Msg.State != nil && resp.Msg.State.Result == runnerv1.Result_RESULT_CANCELLED { + if resp.Msg.GetState().GetResult() == runnerv1.Result_RESULT_CANCELLED { r.cancel() }