Aggregate CI fixes (#1753) #308
This file contains hidden or 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: Compare | |
| on: | |
| push: | |
| branches: | |
| - master | |
| workflow_dispatch: | |
| inputs: | |
| builds_per_job: | |
| description: 'How many builds to run in parallel on each job.' | |
| default: 4 | |
| required: true | |
| type: choice | |
| options: [1, 2, 4, 8, 16, 32, 64] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| fetch-deps: | |
| name: Download original binaries | |
| uses: ./.github/workflows/legobin.yml | |
| reccmp: | |
| name: Setup python environment | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.12' | |
| # The typical cache key would include a hash on requirements.txt. | |
| # We currently run reccmp from latest so we would have to manually purge it. | |
| # The goal is simply to restore the cache across entropy build jobs. | |
| - name: Cache venv | |
| uses: actions/cache@v4 | |
| with: | |
| key: venv-entropy-${{ github.run_id }}-${{ github.run_attempt }} | |
| path: .venv | |
| - name: Install python packages | |
| run: | | |
| python -m venv .venv | |
| .venv\Scripts\Activate | |
| pip install -r tools/requirements.txt | |
| build: | |
| name: 'MSVC 4.20' | |
| needs: [fetch-deps, reccmp] | |
| runs-on: windows-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| job: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] | |
| builds: | |
| - ${{ inputs.builds_per_job && inputs.builds_per_job || 16 }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.12' | |
| - uses: actions/checkout@v4 | |
| with: | |
| repository: itsmattkc/msvc420 | |
| path: msvc420 | |
| - name: Setup cmake | |
| uses: jwlawson/actions-setup-cmake@v2 | |
| with: | |
| # Use minimum supported version | |
| cmake-version: '3.15.x' | |
| - name: Patch MSVC 4.2 | |
| run: | | |
| tools/patch_c2.py msvc420/bin/C2.EXE | |
| - name: Restore cached original binaries | |
| id: cache-original-binaries | |
| uses: actions/cache/restore@v4 | |
| with: | |
| enableCrossOsArchive: true | |
| path: legobin | |
| key: legobin | |
| - name: Install python packages | |
| run: | | |
| python -m venv .venv | |
| .venv\Scripts\Activate | |
| echo ($env:VIRTUAL_ENV + "\Scripts") >> $env:GITHUB_PATH | |
| echo ("VIRTUAL_ENV=" + $env:VIRTUAL_ENV) >> $env:GITHUB_ENV | |
| - name: Restore cached virtualenv | |
| uses: actions/cache@v4 | |
| with: | |
| key: venv-entropy-${{ github.run_id }}-${{ github.run_attempt }} | |
| path: .venv | |
| - name: Prepare builds | |
| shell: pwsh | |
| run: | | |
| cmd /c "call `".\msvc420\bin\VCVARS32.BAT`" x86 && set > %temp%\vcvars32.txt" | |
| Get-Content "$env:temp\vcvars32.txt" | Foreach-Object { if ($_ -match "^(.*?)=(.*)$") { Set-Content "env:\$($matches[1])" $matches[2] } } | |
| .\tools\multi-prepare.ps1 ${{ matrix.job }} ${{ matrix.builds }} | |
| - name: Run builds | |
| shell: pwsh | |
| run: | | |
| cmd /c "call `".\msvc420\bin\VCVARS32.BAT`" x86 && set > %temp%\vcvars32.txt" | |
| Get-Content "$env:temp\vcvars32.txt" | Foreach-Object { if ($_ -match "^(.*?)=(.*)$") { Set-Content "env:\$($matches[1])" $matches[2] } } | |
| .\tools\multi-build.ps1 ${{ matrix.builds }} | |
| - name: Analyze builds | |
| shell: pwsh | |
| run: | | |
| .\tools\multi-analyze.ps1 ${{ matrix.builds }} | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@main | |
| with: | |
| name: Win32-Entropy-${{ matrix.job }} | |
| path: | | |
| CONFIGPROGRESS* | |
| ISLEPROGRESS* | |
| LEGO1PROGRESS* | |
| merge-artifacts: | |
| name: 'Merge entropy artifacts' | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - name: Merge Artifacts | |
| uses: actions/upload-artifact/merge@v4 | |
| with: | |
| name: Win32-Entropy | |
| pattern: Win32-Entropy-* | |
| separate-directories: true | |
| compare: | |
| name: Compare with master | |
| needs: [merge-artifacts] | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@main | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.12' | |
| - uses: actions/download-artifact@main | |
| with: | |
| name: Win32-Entropy | |
| path: build-entropy | |
| - name: Install python packages | |
| run: | | |
| python -m venv .venv | |
| .venv\Scripts\Activate | |
| echo ($env:VIRTUAL_ENV + "\Scripts") >> $env:GITHUB_PATH | |
| echo ("VIRTUAL_ENV=" + $env:VIRTUAL_ENV) >> $env:GITHUB_ENV | |
| - name: Restore cached virtualenv | |
| uses: actions/cache@v4 | |
| with: | |
| key: venv-entropy-${{ github.run_id }}-${{ github.run_attempt }} | |
| path: .venv | |
| - name: Aggregate Accuracy | |
| shell: bash | |
| run: | | |
| find build-entropy -type f -name "CONFIGPROGRESS*.json" > configsamples.txt | |
| find build-entropy -type f -name "ISLEPROGRESS*.json" > islesamples.txt | |
| find build-entropy -type f -name "LEGO1PROGRESS*.json" > lego1samples.txt | |
| reccmp-aggregate --samples @configsamples.txt --output CONFIGPROGRESS-agg.json --html CONFIGPROGRESS-agg.html --svg CONFIGPROGRESS-agg.svg --svg-icon assets/config.png | |
| reccmp-aggregate --samples @islesamples.txt --output ISLEPROGRESS-agg.json --html ISLEPROGRESS-agg.html --svg ISLEPROGRESS-agg.svg --svg-icon assets/isle.png | |
| reccmp-aggregate --samples @lego1samples.txt --output LEGO1PROGRESS-agg.json --html LEGO1PROGRESS-agg.html --svg LEGO1PROGRESS-agg.svg --svg-icon assets/lego1.png | |
| - name: Compare Aggregate Accuracy With Current Master | |
| shell: bash | |
| env: | |
| RELEASE_URL: https://github.com/isledecomp/isle/releases/download/continuous-accuracy | |
| run: | | |
| # Download the current master state | |
| curl -fLSs -o CONFIGPROGRESS-agg-old.json $RELEASE_URL/CONFIGPROGRESS-agg.json || echo "" >CONFIGPROGRESS-agg-old.json | |
| curl -fLSs -o ISLEPROGRESS-agg-old.json $RELEASE_URL/ISLEPROGRESS-agg.json || echo "" >ISLEPROGRESS-agg-old.json | |
| curl -fLSs -o LEGO1PROGRESS-agg-old.json $RELEASE_URL/LEGO1PROGRESS-agg.json || echo "" >LEGO1PROGRESS-agg-old.json | |
| # Compare with current master | |
| reccmp-aggregate --diff CONFIGPROGRESS-agg-old.json CONFIGPROGRESS-agg.json || echo "Current master not found" | |
| reccmp-aggregate --diff ISLEPROGRESS-agg-old.json ISLEPROGRESS-agg.json || echo "Current master not found" | |
| reccmp-aggregate --diff LEGO1PROGRESS-agg-old.json LEGO1PROGRESS-agg.json || echo "Current master not found" | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@main | |
| with: | |
| name: Accuracy Report | |
| path: | | |
| CONFIGPROGRESS* | |
| ISLEPROGRESS* | |
| LEGO1PROGRESS* | |
| upload: | |
| name: Upload artifacts | |
| needs: [compare] | |
| runs-on: ubuntu-latest | |
| if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'isledecomp/isle' }} | |
| permissions: | |
| contents: write | |
| pages: write | |
| id-token: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| repository: probonopd/uploadtool | |
| - uses: actions/download-artifact@main | |
| with: | |
| name: Accuracy Report | |
| - name: Upload Continuous Release | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| export UPLOADTOOL_SUFFIX=accuracy | |
| ./upload.sh \ | |
| CONFIGPROGRESS* \ | |
| ISLEPROGRESS* \ | |
| LEGO1PROGRESS* | |
| - name: Prepare Pages | |
| run: | | |
| mkdir -p progress | |
| cp CONFIGPROGRESS-agg.svg progress/CONFIGPROGRESS.SVG | |
| cp ISLEPROGRESS-agg.svg progress/ISLEPROGRESS.SVG | |
| cp LEGO1PROGRESS-agg.svg progress/LEGO1PROGRESS.SVG | |
| cp CONFIGPROGRESS-agg.html progress/CONFIGPROGRESS.HTML | |
| cp ISLEPROGRESS-agg.html progress/ISLEPROGRESS.HTML | |
| cp LEGO1PROGRESS-agg.html progress/LEGO1PROGRESS.HTML | |
| - uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: progress/ | |
| - name: Deploy to GitHub Pages | |
| uses: actions/deploy-pages@v5 |