Skip to content

Initial action implemention #112

Initial action implemention

Initial action implemention #112

---
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
}
]