From 95d5fb905e6b62717f6dd0a6d46cd97ede34e477 Mon Sep 17 00:00:00 2001 From: Christopher Homberger Date: Fri, 27 Sep 2024 20:50:45 +0200 Subject: [PATCH] fix: if condition in composite action misbehaves with uses --- pkg/runner/step.go | 2 +- .../composite_action/action.yml | 47 +++++++++++++++++++ .../push.yml | 24 ++++++++++ 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 pkg/runner/testdata/uses-composite-check-for-input-in-if-uses/composite_action/action.yml create mode 100644 pkg/runner/testdata/uses-composite-check-for-input-in-if-uses/push.yml diff --git a/pkg/runner/step.go b/pkg/runner/step.go index e1bcf9ecfdc..54a39d26a84 100644 --- a/pkg/runner/step.go +++ b/pkg/runner/step.go @@ -261,7 +261,7 @@ func isStepEnabled(ctx context.Context, expr string, step step, stage stepStage) defaultStatusCheck = exprparser.DefaultStatusCheckSuccess } - runStep, err := EvalBool(ctx, rc.NewStepExpressionEvaluator(ctx, step), expr, defaultStatusCheck) + runStep, err := EvalBool(ctx, rc.NewExpressionEvaluatorWithEnv(ctx, *step.getEnv()), expr, defaultStatusCheck) if err != nil { return false, fmt.Errorf(" \u274C Error in if-expression: \"if: %s\" (%s)", expr, err) } diff --git a/pkg/runner/testdata/uses-composite-check-for-input-in-if-uses/composite_action/action.yml b/pkg/runner/testdata/uses-composite-check-for-input-in-if-uses/composite_action/action.yml new file mode 100644 index 00000000000..f4f87412bc5 --- /dev/null +++ b/pkg/runner/testdata/uses-composite-check-for-input-in-if-uses/composite_action/action.yml @@ -0,0 +1,47 @@ +name: "Test Composite Action" +description: "Test action uses composite" + +inputs: + b: + default: true + b2: {} + +runs: + using: "composite" + steps: + - uses: actions/github-script@v7 + if: inputs.b == 'true' + with: + script: | + console.log(${{ tojson(inputs) }}) + if( ${{ tojson(inputs.b) }} != 'true' ) { + process.exit(-1); + } + github-token: noop + - uses: actions/github-script@v7 + if: inputs.b != 'true' + with: + script: | + console.log(${{ tojson(inputs) }}) + if( ${{ tojson(inputs.b) }} == 'true' ) { + process.exit(-1); + } + github-token: noop + - uses: actions/github-script@v7 + if: inputs.b2 == 'false' + with: + script: | + console.log(${{ tojson(inputs) }}) + if( ${{ tojson(inputs.b2) }} != 'false' ) { + process.exit(-1); + } + github-token: noop + - uses: actions/github-script@v7 + if: inputs.b2 != 'false' + with: + script: | + console.log(${{ tojson(inputs) }}) + if( ${{ tojson(inputs.b2) }} == 'false' ) { + process.exit(-1); + } + github-token: noop diff --git a/pkg/runner/testdata/uses-composite-check-for-input-in-if-uses/push.yml b/pkg/runner/testdata/uses-composite-check-for-input-in-if-uses/push.yml new file mode 100644 index 00000000000..84441dcc893 --- /dev/null +++ b/pkg/runner/testdata/uses-composite-check-for-input-in-if-uses/push.yml @@ -0,0 +1,24 @@ +name: uses-composite-check-for-input-in-if-uses +on: push + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ./uses-composite-check-for-input-in-if-uses/composite_action + with: + b: true + b2: true + - uses: ./uses-composite-check-for-input-in-if-uses/composite_action + with: + b: false + b2: false + - uses: ./uses-composite-check-for-input-in-if-uses/composite_action + with: + b: true + b2: false + - uses: ./uses-composite-check-for-input-in-if-uses/composite_action + with: + b: false + b2: true \ No newline at end of file