fix(sdl2): pixel-perfect rendering across DPI levels (#2222) #591
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: Nix CI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| # Trigger manually to optionally include heavier/unstable targets | |
| workflow_dispatch: | |
| inputs: | |
| include_optional: | |
| description: 'Include optional targets (SDL2, Intel Mac)' | |
| type: boolean | |
| default: false | |
| jobs: | |
| # 1. Job to generate the matrix dynamically based on inputs | |
| setup: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| os: ${{ steps.set-matrix.outputs.os }} | |
| backend: ${{ steps.set-matrix.outputs.backend }} | |
| steps: | |
| - name: Generate Matrix JSON | |
| id: set-matrix | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| // Default configuration (Stable & Lightweight targets) | |
| let osList = ["ubuntu-24.04", "ubuntu-24.04-arm", "macos-15"]; | |
| let backendList = ["lem-ncurses", "lem-webview"]; | |
| // Check if optional targets should be included | |
| // (Only strictly when triggered via workflow_dispatch with the flag set to true) | |
| if (context.payload.inputs && context.payload.inputs.include_optional === 'true') { | |
| console.log("Adding optional targets (SDL2, Intel Mac)..."); | |
| osList.push("macos-15-intel"); | |
| backendList.push("lem-sdl2"); | |
| } | |
| // Set outputs for the next job to consume | |
| core.setOutput('os', JSON.stringify(osList)); | |
| core.setOutput('backend', JSON.stringify(backendList)); | |
| # 2. Build job using the dynamically generated matrix | |
| build: | |
| needs: setup | |
| name: builds ${{ matrix.backend }} on ${{ matrix.os }} | |
| # The 'runs-on' key also uses the dynamic matrix | |
| runs-on: ${{ matrix.os }} | |
| # FlakeHub Cache authenticates via GitHub OIDC, which needs id-token: write. | |
| permissions: | |
| id-token: write | |
| contents: read | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # Parse JSON strings from the setup job outputs | |
| os: ${{ fromJson(needs.setup.outputs.os) }} | |
| backend: ${{ fromJson(needs.setup.outputs.backend) }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Nix | |
| uses: DeterminateSystems/nix-installer-action@v16 | |
| # magic-nix-cache-action was sunset 2025-02-01 and now rate-limits / | |
| # 418s, causing intermittent "no substituter" failures. FlakeHub Cache | |
| # is its supported successor (auth via the OIDC token above). | |
| - name: Setup FlakeHub Cache | |
| uses: DeterminateSystems/flakehub-cache-action@main | |
| - name: Check flake | |
| run: nix flake check --all-systems --no-build | |
| - name: Build ${{ matrix.backend }} | |
| run: nix build .#${{ matrix.backend }} --print-build-logs |