From ef243fbf2ffcbd6eb2ecb7feb20b5b48d688123f Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Thu, 21 Nov 2024 10:33:07 +0000 Subject: [PATCH] fix: log skipped job and step result as info instead of debug This allows the Forgejo runner to obtain the job result from the logs even when it is not in debug mode. --- act/runner/action.go | 6 ++--- act/runner/run_context.go | 2 +- act/runner/runner_test.go | 38 +++++++++++++++++++++++++++++++ act/runner/step.go | 2 +- act/runner/testdata/skip/skip.yml | 9 ++++++++ 5 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 act/runner/testdata/skip/skip.yml diff --git a/act/runner/action.go b/act/runner/action.go index 416e5e40..fd52c0b6 100644 --- a/act/runner/action.go +++ b/act/runner/action.go @@ -619,17 +619,17 @@ func shouldRunPostStep(step actionStep) common.Conditional { stepResult := stepResults[step.getStepModel().ID] if stepResult == nil { - log.WithField("stepResult", model.StepStatusSkipped).Debugf("skipping post step for '%s'; step was not executed", step.getStepModel()) + log.WithField("stepResult", model.StepStatusSkipped).Infof("skipping post step for '%s'; step was not executed", step.getStepModel()) return false } if stepResult.Conclusion == model.StepStatusSkipped { - log.WithField("stepResult", model.StepStatusSkipped).Debugf("skipping post step for '%s'; main step was skipped", step.getStepModel()) + log.WithField("stepResult", model.StepStatusSkipped).Infof("skipping post step for '%s'; main step was skipped", step.getStepModel()) return false } if step.getActionModel() == nil { - log.WithField("stepResult", model.StepStatusSkipped).Debugf("skipping post step for '%s': no action model available", step.getStepModel()) + log.WithField("stepResult", model.StepStatusSkipped).Infof("skipping post step for '%s': no action model available", step.getStepModel()) return false } diff --git a/act/runner/run_context.go b/act/runner/run_context.go index 8ecdb2ba..6aaf2d88 100644 --- a/act/runner/run_context.go +++ b/act/runner/run_context.go @@ -911,7 +911,7 @@ func (rc *RunContext) isEnabled(ctx context.Context) (bool, error) { } if !runJob { - l.WithField("jobResult", "skipped").Debugf("Skipping job '%s' due to '%s'", job.Name, job.If.Value) + l.WithField("jobResult", "skipped").Infof("Skipping job '%s' due to '%s'", job.Name, job.If.Value) return false, nil } diff --git a/act/runner/runner_test.go b/act/runner/runner_test.go index 70e9634d..ecb5ce57 100644 --- a/act/runner/runner_test.go +++ b/act/runner/runner_test.go @@ -187,6 +187,7 @@ func (j *TestJobFileInfo) runTest(ctx context.Context, t *testing.T, cfg *Config GitHubInstance: "github.com", ContainerArchitecture: cfg.ContainerArchitecture, Matrix: cfg.Matrix, + JobLoggerLevel: cfg.JobLoggerLevel, } runner, err := New(runnerConfig) @@ -490,6 +491,43 @@ func TestRunDifferentArchitecture(t *testing.T) { tjfi.runTest(context.Background(), t, &Config{ContainerArchitecture: "linux/arm64"}) } +type runSkippedHook struct { + found bool +} + +func (h *runSkippedHook) Levels() []log.Level { + return []log.Level{log.InfoLevel} +} + +func (h *runSkippedHook) Fire(entry *log.Entry) error { + if v, ok := entry.Data["stepResult"]; ok { + h.found = (v == model.StepStatusSkipped) + } + return nil +} + +func TestRunSkipped(t *testing.T) { + if testing.Short() { + t.Skip("skipping integration test") + } + + tjfi := TestJobFileInfo{ + workdir: workdir, + workflowPath: "skip", + eventName: "push", + errorMessage: "", + platforms: platforms, + } + + h := &runSkippedHook{} + ctx := common.WithLoggerHook(context.Background(), h) + + jobLoggerLevel := log.InfoLevel + tjfi.runTest(ctx, t, &Config{ContainerArchitecture: "linux/arm64", JobLoggerLevel: &jobLoggerLevel}) + + assert.True(t, h.found) +} + type maskJobLoggerFactory struct { Output bytes.Buffer } diff --git a/act/runner/step.go b/act/runner/step.go index c67b5b04..ec3cfe22 100644 --- a/act/runner/step.go +++ b/act/runner/step.go @@ -94,7 +94,7 @@ func runStepExecutor(step step, stage stepStage, executor common.Executor) commo if !runStep { stepResult.Conclusion = model.StepStatusSkipped stepResult.Outcome = model.StepStatusSkipped - logger.WithField("stepResult", stepResult.Outcome).Debugf("Skipping step '%s' due to '%s'", stepModel, ifExpression) + logger.WithField("stepResult", stepResult.Outcome).Infof("Skipping step '%s' due to '%s'", stepModel, ifExpression) return nil } diff --git a/act/runner/testdata/skip/skip.yml b/act/runner/testdata/skip/skip.yml new file mode 100644 index 00000000..7f6d303a --- /dev/null +++ b/act/runner/testdata/skip/skip.yml @@ -0,0 +1,9 @@ +name: skip +on: push + +jobs: + check: + runs-on: ubuntu-latest + steps: + - if: false + run: echo nothing