Allow inputs for workflow_calls (#1845)
This commit is contained in:
parent
70e1e37280
commit
e60018a6d9
4 changed files with 60 additions and 0 deletions
|
@ -397,6 +397,7 @@ func rewriteSubExpression(ctx context.Context, in string, forceFormat bool) (str
|
|||
return out, nil
|
||||
}
|
||||
|
||||
//nolint:gocyclo
|
||||
func getEvaluatorInputs(ctx context.Context, rc *RunContext, step step, ghc *model.GithubContext) map[string]interface{} {
|
||||
inputs := map[string]interface{}{}
|
||||
|
||||
|
@ -432,6 +433,22 @@ func getEvaluatorInputs(ctx context.Context, rc *RunContext, step step, ghc *mod
|
|||
}
|
||||
}
|
||||
|
||||
if ghc.EventName == "workflow_call" {
|
||||
config := rc.Run.Workflow.WorkflowCallConfig()
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return inputs
|
||||
}
|
||||
|
||||
|
|
|
@ -288,6 +288,7 @@ func TestRunEvent(t *testing.T) {
|
|||
{workdir, "docker-action-custom-path", "push", "", platforms, secrets},
|
||||
{workdir, "GITHUB_ENV-use-in-env-ctx", "push", "", platforms, secrets},
|
||||
{workdir, "ensure-post-steps", "push", "Job 'second-post-step-should-fail' failed", platforms, secrets},
|
||||
{workdir, "workflow_call_inputs", "workflow_call", "", platforms, secrets},
|
||||
{workdir, "workflow_dispatch", "workflow_dispatch", "", platforms, secrets},
|
||||
{workdir, "workflow_dispatch_no_inputs_mapping", "workflow_dispatch", "", platforms, secrets},
|
||||
{workdir, "workflow_dispatch-scalar", "workflow_dispatch", "", platforms, secrets},
|
||||
|
|
6
pkg/runner/testdata/workflow_call_inputs/event.json
vendored
Normal file
6
pkg/runner/testdata/workflow_call_inputs/event.json
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"inputs": {
|
||||
"required": "required input",
|
||||
"boolean": "true"
|
||||
}
|
||||
}
|
36
pkg/runner/testdata/workflow_call_inputs/workflow_call_inputs.yml
vendored
Normal file
36
pkg/runner/testdata/workflow_call_inputs/workflow_call_inputs.yml
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
name: workflow_call
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
required:
|
||||
description: a required input
|
||||
required: true
|
||||
with_default:
|
||||
description: an input with default
|
||||
required: false
|
||||
default: default
|
||||
boolean:
|
||||
description: an input of type boolean
|
||||
required: false
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: test required input
|
||||
run: |
|
||||
echo input.required=${{ inputs.required }}
|
||||
[[ "${{ inputs.required }}" = "required input" ]] || exit 1
|
||||
- name: test input with default
|
||||
run: |
|
||||
echo input.with_default=${{ inputs.with_default }}
|
||||
[[ "${{ inputs.with_default }}" = "default" ]] || exit 1
|
||||
- id: boolean-test
|
||||
name: run on boolean input
|
||||
if: ${{ inputs.boolean == true }}
|
||||
run: echo "::set-output name=value::executed"
|
||||
- name: has boolean test?
|
||||
run: |
|
||||
[[ "${{ steps.boolean-test.outputs.value }}" = "executed" ]] || exit 1
|
Loading…
Reference in a new issue