ci: generate message in pull requests (#497) #320
Workflow file for this run
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: Build | |
| on: [push, pull_request] | |
| jobs: | |
| fetch-deps: | |
| name: Download original binaries | |
| uses: ./.github/workflows/racersbin.yml | |
| build-current-toolchain: | |
| name: Current MSVC | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup cmake | |
| uses: jwlawson/actions-setup-cmake@v2 | |
| - name: Setup Ninja | |
| uses: ./.github/actions/setup-ninja | |
| - name: Setup vcvars | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| with: | |
| arch: amd64_x86 | |
| - name: Install LLVM | |
| uses: KyleMayes/install-llvm-action@v2 | |
| with: | |
| version: '21' | |
| - name: Build | |
| run: | | |
| cmake -S . -B build -GNinja ` | |
| -DCMAKE_CXX_COMPILER=cl ` | |
| -DCMAKE_BUILD_TYPE=Debug ` | |
| -DENABLE_CLANG_TIDY=ON ` | |
| -Werror=dev | |
| cmake --build build -- -k0 | |
| build: | |
| name: 'MSVC 6.0' | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/checkout@v6 | |
| with: | |
| repository: isledecomp/MSVC600-8168 | |
| path: msvc600 | |
| - uses: actions/checkout@v6 | |
| with: | |
| repository: isledecomp/MSVC600-8447 | |
| path: msvc600sp3 | |
| - name: Setup cmake | |
| uses: jwlawson/actions-setup-cmake@v2 | |
| with: | |
| cmake-version: '3.25.x' | |
| - name: Build | |
| shell: cmd | |
| run: | | |
| call .\msvc600\VC98\Bin\VCVARS32.BAT x86 | |
| cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo "-DMSVC_CRT_SRC_PATH=${{ github.workspace }}/msvc600sp3/VC98/crt/src" -G "NMake Makefiles" | |
| cmake --build build --verbose | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@main | |
| with: | |
| name: Win32 | |
| path: | | |
| build/LEGORacers.exe | |
| build/LEGORacers.pdb | |
| build/GolDP.dll | |
| build/GolDP.pdb | |
| verify: | |
| name: Verify decomp | |
| needs: [build, fetch-deps] | |
| runs-on: windows-latest | |
| permissions: | |
| actions: read | |
| issues: write | |
| pull-requests: write | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.12' | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: Win32 | |
| path: build | |
| - name: Restore cached original binaries | |
| id: cache-original-binaries | |
| uses: actions/cache/restore@v5 | |
| with: | |
| enableCrossOsArchive: true | |
| path: racersbin | |
| key: racersbin | |
| - name: Install python packages | |
| shell: bash | |
| run: | | |
| pip install -r tools/requirements.txt | |
| - name: Detect binaries | |
| id: detection | |
| run: | | |
| reccmp-project detect --what original --search-path racersbin | |
| reccmp-project detect --what recompiled --search-path build | |
| - name: Summarize Accuracy | |
| shell: bash | |
| run: | | |
| reccmp-reccmp -S LEGORACERSPROGRESS.SVG --svg-icon assets/legoracers.png --target LEGORACERS --total 3986 --nolib --json LEGORACERSPROGRESS.json --html LEGORACERSPROGRESS.HTML | |
| reccmp-reccmp -S GOLDPPROGRESS.SVG --svg-icon assets/goldp.png --target GOLDP --total 1071 --nolib --json GOLDPPROGRESS.json --html GOLDPPROGRESS.HTML | |
| - name: Compare Accuracy With Current Master | |
| shell: bash | |
| env: | |
| RELEASE_URL: https://github.com/isledecomp/racers/releases/download/continuous | |
| run: | | |
| curl -fLSs -o LEGORACERSPROGRESS-old.json $RELEASE_URL/LEGORACERSPROGRESS.json || echo "" >LEGORACERSPROGRESS-old.json | |
| curl -fLSs -o GOLDPPROGRESS-old.json $RELEASE_URL/GOLDPPROGRESS.json || echo "" >GOLDPPROGRESS-old.json | |
| (reccmp-reccmp --target LEGORACERS --nolib --diff LEGORACERSPROGRESS-old.json || echo "Current master not found")>"LEGORACERS-diff.txt" | |
| (reccmp-reccmp --target GOLDP --nolib --diff GOLDPPROGRESS-old.json || echo "Current master not found")>"GOLDP-diff.txt" | |
| cat LEGORACERS-diff.txt | |
| cat GOLDP-diff.txt | |
| - name: Check Vtables | |
| if: ${{ steps.detection.conclusion == 'success' && always() }} | |
| shell: bash | |
| run: | | |
| reccmp-vtable --target LEGORACERS | |
| reccmp-vtable --target GOLDP | |
| - name: Check Variables | |
| if: ${{ steps.detection.conclusion == 'success' && always() }} | |
| shell: bash | |
| run: | | |
| reccmp-datacmp --target LEGORACERS | |
| reccmp-datacmp --target GOLDP | |
| - name: Check Folding | |
| if: ${{ steps.detection.conclusion == 'success' && always() }} | |
| shell: bash | |
| run: | | |
| python tools/check_folded.py --target LEGORACERS | |
| python tools/check_folded.py --target GOLDP | |
| - name: 'Create comment on PR' | |
| if: ${{ github.event_name == 'pull_request' }} | |
| shell: sh | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| section() { | |
| echo "## $1" | |
| echo '```' | |
| if [ -f "$2" ]; then | |
| python -c "print(open('$2').read().strip())"; | |
| else | |
| echo '(no diff available)'; | |
| fi | |
| echo '```' | |
| } | |
| { | |
| echo '# reccmp report' | |
| section 'LEGORACERS (LEGORacers.exe)' LEGORACERS-diff.txt | |
| section 'GOLDP (GolDP.dll)' GOLDP-diff.txt | |
| } >reccmp-pr-message.txt | |
| echo "${{ github.event.number }}" >pr-number.txt | |
| cat reccmp-pr-message.txt | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@main | |
| with: | |
| name: Accuracy Report | |
| path: | | |
| LEGORACERSPROGRESS* | |
| GOLDPPROGRESS* | |
| - name: Upload PR comment payload | |
| if: ${{ github.event_name == 'pull_request' && always() }} | |
| uses: actions/upload-artifact@main | |
| with: | |
| name: reccmp-pr-comment | |
| path: | | |
| reccmp-pr-message.txt | |
| pr-number.txt | |
| upload: | |
| name: Upload artifacts | |
| needs: [verify] | |
| runs-on: ubuntu-latest | |
| if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'isledecomp/racers' }} | |
| permissions: | |
| contents: write | |
| pages: write | |
| id-token: write | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| repository: probonopd/uploadtool | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: Win32 | |
| path: build | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: Accuracy Report | |
| - name: Upload Continuous Release | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| ./upload.sh \ | |
| build/LEGORacers.exe \ | |
| build/GolDP.dll \ | |
| LEGORACERSPROGRESS* \ | |
| GOLDPPROGRESS* | |
| - name: Prepare Pages | |
| run: | | |
| mkdir -p progress | |
| cp LEGORACERSPROGRESS.SVG progress/ | |
| cp GOLDPPROGRESS.SVG progress/ | |
| cp LEGORACERSPROGRESS.HTML progress/ | |
| cp GOLDPPROGRESS.HTML progress/ | |
| - uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: progress/ | |
| - name: Deploy to GitHub Pages | |
| uses: actions/deploy-pages@v5 | |
| decomplint: | |
| name: ${{ matrix.module }} annotations | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - module: LEGORACERS | |
| path: LEGORacers common | |
| - module: GOLDP | |
| path: GolDP common | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.12' | |
| - name: Install python libraries | |
| id: install | |
| run: | | |
| pip install -r tools/requirements.txt | |
| - name: Run decomplint | |
| if: ${{ steps.install.conclusion == 'success' && always() }} | |
| run: | | |
| reccmp-decomplint ${{ matrix.path }} --module ${{ matrix.module }} --warnfail | |
| - name: Check address padding | |
| if: ${{ steps.install.conclusion == 'success' && always() }} | |
| run: | | |
| python tools/reccmp_addr_padding.py | |
| clang-format: | |
| name: c++ clang-format | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Run clang-format | |
| run: | | |
| find LEGORacers GolDP common tools -iname '*.h' -o -iname '*.cpp' | xargs \ | |
| pipx run "clang-format>=22,<23" \ | |
| --style=file \ | |
| -i | |
| git diff --color --exit-code | |
| naming: | |
| name: Naming conventions | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install LLVM and Clang | |
| uses: KyleMayes/install-llvm-action@v2 | |
| with: | |
| version: '21' | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.12' | |
| - name: Install python libraries | |
| run: | | |
| pip install clang==21.* pyyaml | |
| - name: Run ncc | |
| run: | | |
| python3 tools/ncc/ncc.py \ | |
| --clang-lib ${{ env.LLVM_PATH }}/lib/libclang.so \ | |
| --recurse \ | |
| --style tools/ncc/ncc.style \ | |
| --skip tools/ncc/skip.yml \ | |
| --definition DEFINE_GUID PASCAL WINAPI FAR BOOL CALLBACK HWND__=HWND \ | |
| --include \ | |
| util \ | |
| LEGORacers/include \ | |
| LEGORacers \ | |
| GolDP/include \ | |
| GolDP \ | |
| common/include \ | |
| common \ | |
| --path LEGORacers GolDP common |