name: ci on: push: branches: - "main" pull_request: branches: - "main" env: SCCACHE_GHA_ENABLED: "on" SCCACHE_BASEDIRS: ${{ github.workspace }} SCCACHE_IGNORE_SERVER_IO_ERROR: "1" jobs: build-test-linux: strategy: matrix: build_arch: [x86, x64] toolset: [gcc, clang] include: - build_arch: x86 gtk_packages: libgtk-4-dev:i386 libwebkitgtk-6.0-dev:i386 - build_arch: x64 gtk_packages: libgtk-4-dev libwebkitgtk-6.0-dev name: Build-Test Linux ${{ matrix.toolset }} ${{ matrix.build_arch }} runs-on: ubuntu-latest container: ubuntu:24.04 defaults: run: shell: bash steps: - name: Enable i386 architecture if: ${{ matrix.build_arch == 'x86' }} run: dpkg --add-architecture i386 - name: Install base packages run: | apt-get update apt-get install -y wget tar git make curl ${{ matrix.gtk_packages }} - name: Checkout repository uses: actions/checkout@v7.0.0 with: submodules: recursive - name: Configure gcc uses: ./.github/actions/configure-gcc with: gcc_version: 14 enable_x86: ${{ case(matrix.build_arch == 'x86', 'true', 'false') }} - name: Configure clang if: ${{ matrix.toolset == 'clang' }} uses: ./.github/actions/configure-clang with: clang_version: 20 enable_x86: ${{ case(matrix.build_arch == 'x86', 'true', 'false') }} - name: Install node uses: actions/setup-node@v7.0.0 with: node-version: 24 - name: Set up sccache uses: mozilla-actions/sccache-action@v0.0.10 with: version: v0.15.0 - name: Premake generate working-directory: ${{ github.workspace }} env: PREMAKE_NO_PROMPT: 1 run: ./generate.sh --cc=${{ matrix.toolset }} --modman - name: Build UI working-directory: ${{ github.workspace }} run: | npm install npm run build - name: Build working-directory: ${{ github.workspace }} run: | if [[ "${{ matrix.toolset }}" == "gcc" ]]; then export CC="sccache gcc" export CXX="sccache g++" else export CC="sccache clang" export CXX="sccache clang++" fi [[ "${{ matrix.build_arch }}" == "x86" ]] && export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig:$PKG_CONFIG_PATH || true echo "Package config path: $PKG_CONFIG_PATH" scripts/build.sh release ${{ matrix.build_arch }} chmod +x build/bin/Release_${{ matrix.build_arch }}/{ModMan,ImageConverter,Unlinker,Linker} - name: Test working-directory: ${{ github.workspace }}/build/lib/Release_${{ matrix.build_arch }}/tests run: | ./CommonTests ./ObjCommonTests ./ObjCompilingTests ./ObjLoadingTests ./ObjWritingTests ./ParserTests ./SystemTests ./ZoneCodeGeneratorLibTests ./ZoneCommonTests build-test-windows: strategy: matrix: build_arch: [x86, x64] include: - build_arch: x86 msbuild_config: Win32 - build_arch: x64 msbuild_config: x64 name: Build-Test Windows ${{ matrix.build_arch }} runs-on: windows-2025-vs2026 steps: - name: Install node uses: actions/setup-node@v7.0.0 with: node-version: 24 - name: Add MSBuild to PATH uses: microsoft/setup-msbuild@v3.0.0 - name: Set up sccache uses: mozilla-actions/sccache-action@v0.0.10 with: version: v0.15.0 - name: Configure sccache for MSBuild shell: pwsh run: | $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" $installationPath = & $vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath if (-not $installationPath) { throw "Could not locate the Visual C++ tools" } $toolsVersionFile = Join-Path $installationPath "VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt" $toolsVersion = (Get-Content -Raw -LiteralPath $toolsVersionFile).Trim() $targetArchitecture = "${{ matrix.build_arch }}" $compilerDirectory = Join-Path $installationPath "VC\Tools\MSVC\$toolsVersion\bin\Hostx86\$targetArchitecture" $compilerPath = Join-Path $compilerDirectory "cl.exe" if (-not (Test-Path -LiteralPath $compilerPath)) { throw "Could not locate cl.exe at $compilerPath" } # A cl.exe-named copy enables sccache's compiler-proxy mode. The real # compiler directory must also be on PATH so cache misses can run cl.exe. $wrapperDirectory = Join-Path $env:RUNNER_TEMP "sccache-msvc" $wrapperPath = Join-Path $wrapperDirectory "cl.exe" New-Item -ItemType Directory -Path $wrapperDirectory -Force | Out-Null Copy-Item -LiteralPath (Get-Command sccache.exe).Source -Destination $wrapperPath -Force $compilerDirectory >> $env:GITHUB_PATH "SCCACHE_CL_WRAPPER=$wrapperPath" >> $env:GITHUB_ENV - name: Checkout repository uses: actions/checkout@v7.0.0 with: submodules: recursive - name: Premake generate working-directory: ${{ github.workspace }} env: PREMAKE_NO_PROMPT: 1 run: ./generate.bat --modman - name: Build UI working-directory: ${{ github.workspace }} run: | npm install npm run build - name: Build working-directory: ${{ github.workspace }} run: | msbuild /m /p:TrackFileAccess=false /p:UseMultiToolTask=true "/p:CLToolExe=$env:SCCACHE_CL_WRAPPER" /p:Configuration=Release /p:Platform=${{ matrix.msbuild_config }} build - name: Test working-directory: ${{ github.workspace }}/build/lib/Release_${{ matrix.build_arch }}/tests run: | $combinedExitCode = 0 ./CommonTests $combinedExitCode = [System.Math]::max($combinedExitCode, $LASTEXITCODE) ./ObjCommonTests $combinedExitCode = [System.Math]::max($combinedExitCode, $LASTEXITCODE) ./ObjCompilingTests $combinedExitCode = [System.Math]::max($combinedExitCode, $LASTEXITCODE) ./ObjLoadingTests $combinedExitCode = [System.Math]::max($combinedExitCode, $LASTEXITCODE) ./ObjWritingTests $combinedExitCode = [System.Math]::max($combinedExitCode, $LASTEXITCODE) ./ParserTests $combinedExitCode = [System.Math]::max($combinedExitCode, $LASTEXITCODE) ./SystemTests $combinedExitCode = [System.Math]::max($combinedExitCode, $LASTEXITCODE) ./ZoneCodeGeneratorLibTests $combinedExitCode = [System.Math]::max($combinedExitCode, $LASTEXITCODE) ./ZoneCommonTests $combinedExitCode = [System.Math]::max($combinedExitCode, $LASTEXITCODE) exit $combinedExitCode