fix: deep evaluate matrix strategy (#964)
* fix: deep evaluate matrix strategy * Try to make linter happy. * Apply PR feedback, fix insert directive more tests * Fix: logic error Co-authored-by: Casey Lee <cplee@nektos.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
12
pkg/runner/testdata/evalmatrix-merge-array/push.yml
vendored
Normal file
12
pkg/runner/testdata/evalmatrix-merge-array/push.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
on: push
|
||||
jobs:
|
||||
a:
|
||||
strategy:
|
||||
matrix:
|
||||
a:
|
||||
- env:
|
||||
key1: ${{'val'}}1
|
||||
- ${{fromJSON('[{"env":{"key2":"val2"}},{"env":{"key3":"val3"}}]')}}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: exit ${{ (matrix.a.env.key2 == 'val2' || matrix.a.env.key1 == 'val1' || matrix.a.env.key3 == 'val3' ) && '0' || '1' }}
|
14
pkg/runner/testdata/evalmatrix-merge-map/push.yml
vendored
Normal file
14
pkg/runner/testdata/evalmatrix-merge-map/push.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
on: push
|
||||
jobs:
|
||||
a:
|
||||
strategy:
|
||||
matrix:
|
||||
a:
|
||||
- env:
|
||||
key1: val1
|
||||
${{insert}}:
|
||||
key2: val2
|
||||
${{ insert }}: ${{fromJSON('{"key3":"val3"}')}}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: exit ${{ (matrix.a.env.key2 == 'val2' && matrix.a.env.key1 == 'val1' && matrix.a.env.key3 == 'val3' ) && '0' || '1' }}
|
18
pkg/runner/testdata/evalmatrix/push.yml
vendored
Normal file
18
pkg/runner/testdata/evalmatrix/push.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
on: push
|
||||
jobs:
|
||||
evalm:
|
||||
strategy:
|
||||
matrix: |-
|
||||
${{fromJson('
|
||||
{
|
||||
"A": [ "A", "B" ]
|
||||
}
|
||||
')}}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check if the matrix key A exists
|
||||
run: |
|
||||
echo $MATRIX
|
||||
exit ${{matrix.A && '0' || '1'}}
|
||||
env:
|
||||
MATRIX: ${{toJSON(matrix)}}
|
24
pkg/runner/testdata/evalmatrixneeds/push.yml
vendored
Normal file
24
pkg/runner/testdata/evalmatrixneeds/push.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
on: push
|
||||
jobs:
|
||||
prepare:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: |
|
||||
echo '::set-output name=matrix::{"package": ["a", "b"]}'
|
||||
id: r1
|
||||
outputs:
|
||||
matrix: ${{steps.r1.outputs.matrix}}
|
||||
evalm:
|
||||
needs:
|
||||
- prepare
|
||||
strategy:
|
||||
matrix: |-
|
||||
${{fromJson(needs.prepare.outputs.matrix)}}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check if the matrix key package exists
|
||||
run: |
|
||||
echo $MATRIX
|
||||
exit ${{matrix.package && '0' || '1'}}
|
||||
env:
|
||||
MATRIX: ${{toJSON(matrix)}}
|
29
pkg/runner/testdata/evalmatrixneeds2/push.yml
vendored
Normal file
29
pkg/runner/testdata/evalmatrixneeds2/push.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
on: push
|
||||
jobs:
|
||||
prepare:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: |
|
||||
echo '::set-output name=matrix::["a", "b"]'
|
||||
id: r1
|
||||
outputs:
|
||||
matrix: ${{steps.r1.outputs.matrix}}
|
||||
helix: steady
|
||||
evalm:
|
||||
needs:
|
||||
- prepare
|
||||
strategy:
|
||||
matrix:
|
||||
${{needs.prepare.outputs.helix}}: |-
|
||||
${{fromJson(needs.prepare.outputs.matrix)}}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check if the matrix key doesn't ends up unevaluated
|
||||
run: |
|
||||
echo $MATRIX
|
||||
exit ${{matrix['${{needs.prepare.outputs.helix}}'] && '1' || '0'}}
|
||||
env:
|
||||
MATRIX: ${{toJSON(matrix)}}
|
||||
- name: Check if the evaluated matrix key contains a value
|
||||
run: |
|
||||
exit ${{matrix[needs.prepare.outputs.helix] && '0' || '1'}}
|
Reference in New Issue
Block a user