name: Workflow on: push: branches: - 'main' - 'ci-*' tags: - 'v*' pull_request: jobs: ci: strategy: matrix: platform: - { name: 'Linux', arch: 'x64', os: ubuntu-latest, werror: true } - { name: 'Linux', arch: 'arm64', os: ubuntu-24.04-arm, werror: true } - { name: 'MacOS', arch: 'arm64-x64', os: macos-latest, werror: true, cmake-args: '-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"' } - { name: 'Windows', arch: 'x86', os: windows-latest, msvc-arch: 'Win32' } - { name: 'Windows', arch: 'x64', os: windows-latest, msvc-arch: 'x64' } # - { name: 'Windows', arch: 'arm64', os: windows-latest, msvc-arch: 'amd64_arm64', cross: true } defaults: run: shell: sh runs-on: '${{ matrix.platform.os }}' name: 'CI ${{ matrix.platform.name }} ${{ matrix.platform.arch }}' steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Set up Ninja uses: aseprite/get-ninja@main - uses: ilammy/msvc-dev-cmd@v1.13.0 if: ${{ !!matrix.platform.msvc-arch }} with: arch: ${{ matrix.platform.msvc-arch }} - name: Install Linux dependencies if: ${{ runner.os == 'Linux' }} run: | sudo apt-get update sudo apt-get install -y libgl-dev libgl1-mesa-dev libglu1-mesa-dev libxext-dev - name: Set up SDL uses: libsdl-org/setup-sdl@main with: add-to-environment: true build-type: Release cmake-arguments: ${{ matrix.platform.cmake-args }} cmake-generator: Ninja cmake-toolchain-file: ${{ matrix.platform.cmake-toolchain-file }} discriminator: ${{ matrix.platform.arch }} version: 2-latest version-sdl12-compat: 1-head - name: 'Prepare sources for release' if: ${{ startsWith(github.ref, 'refs/tags/') }} run: | echo "${{ github.ref_name }}" >VERSION - name: 'Configure (CMake)' id: configure run: | cmake -B build -GNinja \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DBUILD_TESTS=ON \ -DDETHRACE_WERROR=${{ !!matrix.platform.werror }} \ -DCMAKE_POLICY_DEFAULT_CMP0074=NEW \ -DDETHRACE_INSTALL=ON \ -DDETHRACE_PACKAGE_PLATFORM=${{ matrix.platform.name }} \ -DDETHRACE_PACKAGE_ARCH=${{ matrix.platform.arch }} \ -DCMAKE_TOOLCHAIN_FILE=${{ matrix.platform.cmake-toolchain-file }} \ -DDETHRACE_PLATFORM_SDL1=ON \ -DDETHRACE_PLATFORM_SDL2=ON \ -DDETHRACE_PLATFORM_SDL_DYNAMIC=ON \ ${{ matrix.platform.cmake-args }} - name: 'Build (CMake)' run: | cmake --build build - name: 'Test (CTest)' if: ${{ !matrix.platform.cross }} run: | ctest --test-dir build --verbose - name: 'Package (CPack)' run: | cd build cpack . - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: '${{ steps.configure.outputs.filename }}' path: 'build/dist/${{ steps.configure.outputs.filename }}' if-no-files-found: error create-release: name: Create Release needs: [ci] if: startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest steps: - name: Fetch Build Artifacts uses: actions/download-artifact@v4 with: path: artifacts - name: Calculate Variables id: vars run: | echo "ref_name_without_v=$(echo ${GITHUB_REF_NAME} | cut -c2-)" >>$GITHUB_OUTPUT - name: Create Release id: create_release uses: softprops/action-gh-release@v2 with: draft: false prerelease: false name: Dethrace ${{ steps.vars.outputs.ref_name_without_v }} generate_release_notes: true files: | artifacts/** reccmp: name: Verify decomp runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 name: Checkout with: submodules: recursive - name: Checkout reccmp-report uses: actions/checkout@v4 with: repository: dethrace-labs/reccmp-report token: ${{ secrets.RECCMP_REPORT_TOKEN }} path: reccmp-report - uses: dethrace-labs/reccmp-action@main name: Build with: cmake_flags: -G Ninja -DCMAKE_BUILD_TYPE=Debug -DMSVC_42_FOR_RECCMP=on build_only: true - uses: dethrace-labs/reccmp-action@main name: Run reccmp with: cmake_flags: -G Ninja -DCMAKE_BUILD_TYPE=Debug -DMSVC_42_FOR_RECCMP=on target: CARM95 diff_report_filename: ${{ github.workspace}}/reccmp-report/report.json report_filename: ${{ github.workspace}}/new-reccmp-report.json original_binary_url: https://archive.org/download/carm-95/CARM95.EXE original_binary_filename: CARM95.EXE reccmp_output_filename: ${{ github.workspace}}/reccmp-output.txt - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: reccmp-output.txt path: ${{ github.workspace}}/reccmp-output.txt if-no-files-found: error - name: Validate correctness run: | if grep -q "Decreased" ${{ github.workspace}}/reccmp-output.txt; then echo "::warning file=reccmp-output.txt::Decomp correctness decreased" fi - name: Update report in reccmp-report if: github.ref == 'refs/heads/main' run: | cp new-reccmp-report.json reccmp-report/report.json cd reccmp-report git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git commit -am "Update report from ${GITHUB_SHA::7}" || echo "No changes to commit" git push