From 1957b496694cca11392a928f48ac692da9e780cb Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Mon, 4 Aug 2025 13:27:00 +0200 Subject: [PATCH] fix: log schema validation errors from actions Resolves forgejo/runner#809 --- act/runner/action.go | 5 ++++- act/runner/runner_test.go | 1 + .../action/action.yml | 7 +++++++ .../local-action-fails-schema-validation/push.yml | 9 +++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 act/runner/testdata/local-action-fails-schema-validation/action/action.yml create mode 100644 act/runner/testdata/local-action-fails-schema-validation/push.yml diff --git a/act/runner/action.go b/act/runner/action.go index 16961cd3..c777573d 100644 --- a/act/runner/action.go +++ b/act/runner/action.go @@ -45,7 +45,7 @@ func readActionImpl(ctx context.Context, step *model.Step, actionDir, actionPath allErrors := []error{} addError := func(fileName string, err error) { if err != nil { - allErrors = append(allErrors, fmt.Errorf("failed to read '%s' from action '%s' with path '%s' of step %w", fileName, step.String(), actionPath, err)) + allErrors = append(allErrors, fmt.Errorf("failed to read '%s' from action '%s' with path '%s': %w", fileName, step.String(), actionPath, err)) } else { // One successful read, clear error state allErrors = nil @@ -112,6 +112,9 @@ func readActionImpl(ctx context.Context, step *model.Step, actionDir, actionPath defer closer.Close() action, err := model.ReadAction(reader) + if err != nil { + err = fmt.Errorf("failed to validate action.y*ml from action '%s' with path '%s': %v", step.String(), actionPath, err) + } logger.Debugf("Read action %v from '%s'", action, "Unknown") return action, err } diff --git a/act/runner/runner_test.go b/act/runner/runner_test.go index b3401125..0a11a5ea 100644 --- a/act/runner/runner_test.go +++ b/act/runner/runner_test.go @@ -242,6 +242,7 @@ func TestRunner_RunEvent(t *testing.T) { {workdir, "shells/pwsh", "push", "", platforms, secrets}, // Local action + {workdir, "local-action-fails-schema-validation", "push", "Job 'test' failed", platforms, secrets}, {workdir, "local-action-docker-url", "push", "", platforms, secrets}, {workdir, "local-action-dockerfile", "push", "", platforms, secrets}, {workdir, "local-action-via-composite-dockerfile", "push", "", platforms, secrets}, diff --git a/act/runner/testdata/local-action-fails-schema-validation/action/action.yml b/act/runner/testdata/local-action-fails-schema-validation/action/action.yml new file mode 100644 index 00000000..75b4bef4 --- /dev/null +++ b/act/runner/testdata/local-action-fails-schema-validation/action/action.yml @@ -0,0 +1,7 @@ +inputs: + leak: + default: '${{ secrets.SOMESECRET }}' +runs: + using: composite + steps: + - run: echo OK diff --git a/act/runner/testdata/local-action-fails-schema-validation/push.yml b/act/runner/testdata/local-action-fails-schema-validation/push.yml new file mode 100644 index 00000000..1675478c --- /dev/null +++ b/act/runner/testdata/local-action-fails-schema-validation/push.yml @@ -0,0 +1,9 @@ +name: fails-schema-validation +on: push + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: https://data.forgejo.org/actions/checkout@v4 + - uses: ./local-action-fails-schema-validation/action