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
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//nolint:gocyclo
|
||||||
func getEvaluatorInputs(ctx context.Context, rc *RunContext, step step, ghc *model.GithubContext) map[string]interface{} {
|
func getEvaluatorInputs(ctx context.Context, rc *RunContext, step step, ghc *model.GithubContext) map[string]interface{} {
|
||||||
inputs := 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
|
return inputs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -288,6 +288,7 @@ func TestRunEvent(t *testing.T) {
|
||||||
{workdir, "docker-action-custom-path", "push", "", platforms, secrets},
|
{workdir, "docker-action-custom-path", "push", "", platforms, secrets},
|
||||||
{workdir, "GITHUB_ENV-use-in-env-ctx", "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, "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", "workflow_dispatch", "", platforms, secrets},
|
||||||
{workdir, "workflow_dispatch_no_inputs_mapping", "workflow_dispatch", "", platforms, secrets},
|
{workdir, "workflow_dispatch_no_inputs_mapping", "workflow_dispatch", "", platforms, secrets},
|
||||||
{workdir, "workflow_dispatch-scalar", "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