Initial action implemention #112
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: Integration Tests | |
on: | |
pull_request: | |
paths: | |
- "action.yaml" | |
- ".github/workflows/integration-tests.yaml" | |
jobs: | |
setup-simple: | |
name: Setup Simple | |
runs-on: ubuntu-latest | |
permissions: | |
actions: read | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
index: | |
- 1 | |
- 2 | |
outputs: | |
results-json: ${{ steps.matrix-output.outputs.json }} | |
steps: | |
- uses: actions/checkout@v4 | |
# Slow down on job to ensure that this is the last run | |
- if: ${{ strategy.job-index == 0 }} | |
run: sleep 5 | |
# Keep `id` the same between `setup-simple` and `setup-complex` | |
# to ensure we can separate output per job. | |
- uses: ./ | |
id: matrix-output | |
with: | |
yaml: | | |
index: ${{ matrix.index }} | |
debug: true | |
test-simple: | |
name: Test Simple | |
needs: setup-simple | |
runs-on: ubuntu-latest | |
steps: | |
- name: Output JSON | |
run: | | |
if [[ "${output_json}" != "${expected_json}" ]]; then | |
cat <<<"${output_json}" >"output" | |
cat <<<"${expected_json}" >"expected" | |
diff output expected | cat -te | |
exit 1 | |
fi | |
env: | |
output_json: ${{ needs.setup-simple.outputs.results-json }} | |
expected_json: |- | |
[ | |
{ | |
"index": 1 | |
}, | |
{ | |
"index": 2 | |
} | |
] | |
setup-complex: | |
name: Setup Complex | |
runs-on: ubuntu-latest | |
permissions: | |
actions: read | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
build: | |
- name: App One | |
repo: user/app1 | |
- name: App Two | |
repo: user/app2 | |
version: | |
- "1.0" | |
- "2.0" | |
outputs: | |
results-json: ${{ steps.matrix-output.outputs.json }} | |
steps: | |
- uses: actions/checkout@v4 | |
# Keep `id` the same between `setup-simple` and `setup-complex` | |
# to ensure we can separate output per job. | |
- uses: ./ | |
id: matrix-output | |
with: | |
yaml: | | |
name: ${{ matrix.build.name }} | |
repo: ${{ matrix.build.repo }} | |
version_string: "${{ matrix.version }}" | |
version_number: ${{ matrix.version }} | |
debug: true | |
test-complex: | |
name: Test Complex | |
needs: setup-complex | |
runs-on: ubuntu-latest | |
steps: | |
- name: Output JSON | |
run: | | |
if [[ "${output_json}" != "${expected_json}" ]]; then | |
cat <<<"${output_json}" >"output" | |
cat <<<"${expected_json}" >"expected" | |
diff output expected | cat -te | |
exit 1 | |
fi | |
env: | |
output_json: ${{ needs.setup-complex.outputs.results-json }} | |
expected_json: |- | |
[ | |
{ | |
"name": "App One", | |
"repo": "user/app1", | |
"version_string": "1.0", | |
"version_number": 1 | |
}, | |
{ | |
"name": "App One", | |
"repo": "user/app1", | |
"version_string": "2.0", | |
"version_number": 2 | |
}, | |
{ | |
"name": "App Two", | |
"repo": "user/app2", | |
"version_string": "1.0", | |
"version_number": 1 | |
}, | |
{ | |
"name": "App Two", | |
"repo": "user/app2", | |
"version_string": "2.0", | |
"version_number": 2 | |
} | |
] | |
test-empty: | |
name: Test Empty | |
runs-on: ubuntu-latest | |
permissions: | |
actions: read | |
contents: read | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./ | |
id: matrix-output | |
continue-on-error: true | |
with: | |
yaml: "" | |
debug: true | |
- name: Action failed | |
if: ${{ steps.matrix-output.outcome != 'failure' }} | |
run: exit 1 | |
test-duplicate: | |
name: Test Duplicate | |
runs-on: ubuntu-latest | |
permissions: | |
actions: read | |
contents: read | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./ | |
id: matrix-output1 | |
continue-on-error: true | |
with: | |
yaml: | | |
demo: 1 | |
debug: true | |
- uses: ./ | |
id: matrix-output2 | |
continue-on-error: true | |
with: | |
yaml: | | |
demo: 2 | |
debug: true | |
- name: Action failed | |
if: ${{ steps.matrix-output1.outcome != 'success' || steps.matrix-output2.outcome != 'failure' }} | |
run: exit 1 | |
setup-race-condition: | |
name: Setup Race Condition | |
runs-on: ubuntu-latest | |
permissions: | |
actions: read | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
index: | |
- 1 | |
- 2 | |
outputs: | |
results-json: ${{ steps.matrix-output.outputs.json }} | |
steps: | |
- uses: actions/checkout@v4 | |
- if: ${{ strategy.job-index == 0 }} | |
run: sleep 5 | |
- uses: ./ | |
id: matrix-output | |
with: | |
yaml: | | |
index: ${{ matrix.index }} | |
debug: true | |
- if: ${{ strategy.job-index == 1 }} | |
run: sleep 30 | |
test-race-condition: | |
name: Test Race Condition | |
needs: setup-race-condition | |
runs-on: ubuntu-latest | |
steps: | |
- name: Output JSON | |
run: | | |
if [[ "${output_json}" != "${expected_json}" ]]; then | |
cat <<<"${output_json}" >"output" | |
cat <<<"${expected_json}" >"expected" | |
diff output expected | cat -te | |
exit 1 | |
fi | |
env: | |
output_json: ${{ needs.setup-race-condition.outputs.results-json }} | |
expected_json: |- | |
[ | |
{ | |
"index": 1 | |
}, | |
{ | |
"index": 2 | |
} | |
] |