From d72ce8baa19c5530d88f4e2f1a988d021cdd8b71 Mon Sep 17 00:00:00 2001 From: ChristopherHX Date: Thu, 10 Nov 2022 21:16:00 +0100 Subject: [PATCH] fix: nil pointer access ( workflow_dispatch ) --- act/runner/expression.go | 20 ++++++++++--------- act/runner/runner_test.go | 3 +++ .../workflow_dispatch.yml | 17 ++++++++++++++++ .../workflow_dispatch.yml | 9 +++++++++ .../workflow_dispatch.yml | 10 ++++++++++ 5 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 act/runner/testdata/workflow_dispatch-scalar-composite-action/workflow_dispatch.yml create mode 100644 act/runner/testdata/workflow_dispatch-scalar/workflow_dispatch.yml create mode 100644 act/runner/testdata/workflow_dispatch_no_inputs_mapping/workflow_dispatch.yml diff --git a/act/runner/expression.go b/act/runner/expression.go index adba5699..43699800 100644 --- a/act/runner/expression.go +++ b/act/runner/expression.go @@ -331,15 +331,17 @@ func getEvaluatorInputs(ctx context.Context, rc *RunContext, step step, ghc *mod if ghc.EventName == "workflow_dispatch" { config := rc.Run.Workflow.WorkflowDispatchConfig() - for k, v := range config.Inputs { - value := nestedMapLookup(ghc.Event, "inputs", k) - if value == nil { - value = v.Default - } - if v.Type == "boolean" { - inputs[k] = value == "true" - } else { - inputs[k] = value + if config != nil && config.Inputs != nil { + for k, v := range config.Inputs { + value := nestedMapLookup(ghc.Event, "inputs", k) + if value == nil { + value = v.Default + } + if v.Type == "boolean" { + inputs[k] = value == "true" + } else { + inputs[k] = value + } } } } diff --git a/act/runner/runner_test.go b/act/runner/runner_test.go index dbf8a007..232fc163 100644 --- a/act/runner/runner_test.go +++ b/act/runner/runner_test.go @@ -183,6 +183,9 @@ func TestRunEvent(t *testing.T) { {workdir, "evalenv", "push", "", platforms}, {workdir, "ensure-post-steps", "push", "Job 'second-post-step-should-fail' failed", platforms}, {workdir, "workflow_dispatch", "workflow_dispatch", "", platforms}, + {workdir, "workflow_dispatch_no_inputs_mapping", "workflow_dispatch", "", platforms}, + {workdir, "workflow_dispatch-scalar", "workflow_dispatch", "", platforms}, + {workdir, "workflow_dispatch-scalar-composite-action", "workflow_dispatch", "", platforms}, {"../model/testdata", "strategy", "push", "", platforms}, // TODO: move all testdata into pkg so we can validate it with planner and runner // {"testdata", "issue-228", "push", "", platforms, }, // TODO [igni]: Remove this once everything passes {"../model/testdata", "container-volumes", "push", "", platforms}, diff --git a/act/runner/testdata/workflow_dispatch-scalar-composite-action/workflow_dispatch.yml b/act/runner/testdata/workflow_dispatch-scalar-composite-action/workflow_dispatch.yml new file mode 100644 index 00000000..f8447b45 --- /dev/null +++ b/act/runner/testdata/workflow_dispatch-scalar-composite-action/workflow_dispatch.yml @@ -0,0 +1,17 @@ +name: workflow_dispatch + +on: workflow_dispatch + +jobs: + test: + runs-on: ubuntu-latest + steps: + - run: | + runs: + using: composite + steps: + - run: | + exit 0 + shell: bash + shell: cp {0} action.yml + - uses: ./ diff --git a/act/runner/testdata/workflow_dispatch-scalar/workflow_dispatch.yml b/act/runner/testdata/workflow_dispatch-scalar/workflow_dispatch.yml new file mode 100644 index 00000000..9c900e87 --- /dev/null +++ b/act/runner/testdata/workflow_dispatch-scalar/workflow_dispatch.yml @@ -0,0 +1,9 @@ +name: workflow_dispatch + +on: workflow_dispatch + +jobs: + test: + runs-on: ubuntu-latest + steps: + - run: exit 0 diff --git a/act/runner/testdata/workflow_dispatch_no_inputs_mapping/workflow_dispatch.yml b/act/runner/testdata/workflow_dispatch_no_inputs_mapping/workflow_dispatch.yml new file mode 100644 index 00000000..9fc6b097 --- /dev/null +++ b/act/runner/testdata/workflow_dispatch_no_inputs_mapping/workflow_dispatch.yml @@ -0,0 +1,10 @@ +name: workflow_dispatch + +on: + workflow_dispatch: + +jobs: + test: + runs-on: ubuntu-latest + steps: + - run: exit 0