Skip to content

github(ci): implement dynamic build matrix generation #86

github(ci): implement dynamic build matrix generation

github(ci): implement dynamic build matrix generation #86

Workflow file for this run

name: GenCI
permissions:
contents: read
pull-requests: write
on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
detect-changes:
name: Detect File Changes
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
generals: ${{ steps.filter.outputs.generals }}
generalsmd: ${{ steps.filter.outputs.generalsmd }}
shared: ${{ steps.filter.outputs.shared }}
presets_generals: ${{ steps.matrix.outputs.presets_generals }}
presets_generalsmd: ${{ steps.matrix.outputs.presets_generalsmd }}
presets_generalsmd_replay: ${{ steps.matrix.outputs.presets_generalsmd_replay }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Filter Changed Paths
uses: dorny/paths-filter@v3
id: filter
with:
token: ""
filters: |
generals:
- 'Generals/**'
generalsmd:
- 'GeneralsMD/**'
shared:
- '.github/workflows/**'
- 'CMakeLists.txt'
- 'CMakePresets.json'
- 'cmake/**'
- 'Core/**'
- 'Dependencies/**'
- name: Define Build Matrix
id: matrix
shell: python
env:
GITHUB_EVENT_NAME: ${{ github.event_name }}
run: |
import os
script_path = os.path.join('.github', 'scripts', 'generate_matrix.py')
with open(script_path, 'r') as file:
exec(file.read())
- name: Changes Summary
run: |
echo "### πŸ” File Changes Summary" >> $GITHUB_STEP_SUMMARY
echo "- Generals: ${{ steps.filter.outputs.generals == 'true' && 'βœ…' || '❌' }}" >> $GITHUB_STEP_SUMMARY
echo "- GeneralsMD: ${{ steps.filter.outputs.generalsmd == 'true' && 'βœ…' || '❌' }}" >> $GITHUB_STEP_SUMMARY
echo "- Shared: ${{ steps.filter.outputs.shared == 'true' && 'βœ…' || '❌' }}" >> $GITHUB_STEP_SUMMARY
build-generals:
name: Build Generals${{ matrix.preset && '' }}
needs: detect-changes
if: ${{ github.event_name == 'workflow_dispatch' || needs.detect-changes.outputs.generals == 'true' || needs.detect-changes.outputs.shared == 'true' }}
strategy:
matrix:
include: ${{ fromJson(needs.detect-changes.outputs.presets_generals) }}
fail-fast: false
uses: ./.github/workflows/build-toolchain.yml
with:
game: "Generals"
preset: ${{ matrix.preset }}
tools: ${{ matrix.tools }}
extras: ${{ matrix.extras }}
secrets: inherit
build-generalsmd:
name: Build GeneralsMD${{ matrix.preset && '' }}
needs: detect-changes
if: ${{ github.event_name == 'workflow_dispatch' || needs.detect-changes.outputs.generalsmd == 'true' || needs.detect-changes.outputs.shared == 'true' }}
strategy:
matrix:
include: ${{ fromJson(needs.detect-changes.outputs.presets_generalsmd) }}
fail-fast: false
uses: ./.github/workflows/build-toolchain.yml
with:
game: "GeneralsMD"
preset: ${{ matrix.preset }}
tools: ${{ matrix.tools }}
extras: ${{ matrix.extras }}
secrets: inherit
replaycheck-generalsmd:
name: Replay Check GeneralsMD${{ matrix.preset && '' }}
needs: [detect-changes, build-generalsmd]
if: ${{ always() && needs.build-generalsmd.result == 'success' && (github.event_name == 'workflow_dispatch' || needs.detect-changes.outputs.generalsmd == 'true' || needs.detect-changes.outputs.shared == 'true') }}
strategy:
matrix:
include: ${{ fromJson(needs.detect-changes.outputs.presets_generalsmd_replay) }}
fail-fast: false
uses: ./.github/workflows/check-replays.yml
with:
game: "GeneralsMD"
userdata: "GeneralsReplays/GeneralsZH/1.04"
preset: ${{ matrix.preset }}
tools: ${{ matrix.tools }}
extras: ${{ matrix.extras }}
secrets: inherit