Release swapchain buffers on bg tabs #214
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: CI | |
| on: | |
| pull_request: | |
| jobs: | |
| cliff-smoke: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - uses: DeterminateSystems/nix-installer-action@v22 | |
| - name: git-cliff smoke test (v0.0.41..v0.0.42) | |
| run: | | |
| out=$(nix run nixpkgs#git-cliff -- v0.0.41..v0.0.42 --strip all) | |
| echo "$out" | |
| # Must include expected real commits. | |
| echo "$out" | grep -qF '*(sidebar)* Sync tab chrome' \ | |
| || { echo "missing fix(sidebar) entry"; exit 1; } | |
| echo "$out" | grep -qF '*(readme)* Add todo list feature' \ | |
| || { echo "missing docs(readme) entry"; exit 1; } | |
| echo "$out" | grep -qF '### Bug Fixes' \ | |
| || { echo "missing Bug Fixes section"; exit 1; } | |
| echo "$out" | grep -qF '### Documentation' \ | |
| || { echo "missing Documentation section"; exit 1; } | |
| # Must not include filtered commits. | |
| if echo "$out" | grep -q 'release v0\.0\.42'; then | |
| echo "release commit leaked" | |
| exit 1 | |
| fi | |
| if echo "$out" | grep -q 'nix: update package\.nix'; then | |
| echo "nix-bump commit leaked" | |
| exit 1 | |
| fi | |
| # Section order: Bug Fixes must precede Documentation. | |
| bugs_line=$(echo "$out" | grep -n '### Bug Fixes' | head -1 | cut -d: -f1) | |
| docs_line=$(echo "$out" | grep -n '### Documentation' | head -1 | cut -d: -f1) | |
| [ "$bugs_line" -lt "$docs_line" ] \ | |
| || { echo "section order wrong: Bug Fixes($bugs_line) >= Documentation($docs_line)"; exit 1; } | |
| - name: git-cliff smoke test (v0.0.40..v0.0.41 - Other catchall) | |
| # This range has only non-conventional commits (`update agents.md` | |
| # and `Impl per-pane todo list feature (#49)`) plus the filtered | |
| # `release v0.0.41`. Verifies the `.*` -> Other catchall keeps | |
| # non-conventional commits visible instead of dropping them. | |
| run: | | |
| out=$(nix run nixpkgs#git-cliff -- v0.0.40..v0.0.41 --strip all) | |
| echo "$out" | |
| echo "$out" | grep -qF '### Other' \ | |
| || { echo "missing Other section for non-conventional commits"; exit 1; } | |
| echo "$out" | grep -qF 'Update agents.md' \ | |
| || { echo "non-conventional commit dropped from Other"; exit 1; } | |
| if echo "$out" | grep -q 'release v0\.0\.41'; then | |
| echo "release commit leaked into Other" | |
| exit 1 | |
| fi | |
| - name: git-cliff smoke test (v0.0.39..v0.0.40 - tightened parser guard) | |
| # This range contains both a conventional `fix: downgrade | |
| # swift-tools-version ...` commit and a non-conventional `fix | |
| # release workflow auto-merge step ...` commit (no colon after | |
| # "fix"). With broad `^fix` parsers the latter would mis-group | |
| # under Bug Fixes; the tightened `^fix(\([^)]+\))?!?:` parser | |
| # must let it fall through to Other. | |
| run: | | |
| out=$(nix run nixpkgs#git-cliff -- v0.0.39..v0.0.40 --strip all) | |
| echo "$out" | |
| other_line=$(echo "$out" | grep -n '^### Other' | head -1 | cut -d: -f1) | |
| bugs_line=$(echo "$out" | grep -n '^### Bug Fixes' | head -1 | cut -d: -f1) | |
| target_line=$(echo "$out" | grep -nF 'Fix release workflow auto-merge step' | head -1 | cut -d: -f1) | |
| fix_conv_line=$(echo "$out" | grep -nF 'Downgrade swift-tools-version' | head -1 | cut -d: -f1) | |
| [ -n "$other_line" ] || { echo "missing Other section"; exit 1; } | |
| [ -n "$bugs_line" ] || { echo "missing Bug Fixes section"; exit 1; } | |
| [ -n "$target_line" ] || { echo "non-conventional 'fix release workflow ...' missing entirely"; exit 1; } | |
| [ -n "$fix_conv_line" ] || { echo "conventional 'fix:' commit missing"; exit 1; } | |
| # Non-conventional `fix release workflow ...` must be under Other, | |
| # i.e. after the Other header. | |
| [ "$target_line" -gt "$other_line" ] \ | |
| || { echo "non-conventional 'fix release workflow ...' leaked into Bug Fixes"; exit 1; } | |
| # Conventional `fix:` must be in Bug Fixes, i.e. between the | |
| # Bug Fixes header and the Other header. | |
| [ "$fix_conv_line" -gt "$bugs_line" ] && [ "$fix_conv_line" -lt "$other_line" ] \ | |
| || { echo "conventional 'fix:' not in Bug Fixes section"; exit 1; } | |
| # The shell-integration check is declared for x86_64-linux, and a Linux | |
| # runner is the only place it can actually execute. Building it here is | |
| # what proves the assets and their test are hermetic: a Linux Nix build | |
| # sandbox has no /usr/bin/env, /bin/bash, /usr/bin/expect, /bin/cat, or | |
| # /bin/rm, so any surviving absolute path fails this step. | |
| - name: Shell integration check (x86_64-linux) | |
| run: nix build --print-build-logs .#checks.x86_64-linux.shell-integration | |
| # The home-manager module is only claimed to evaluate on a non-Darwin | |
| # host with just `shellIntegration` enabled, and a Linux runner is the | |
| # only place that claim can be tested. The check evaluates a real Home | |
| # Manager configuration against the pinned input and forces it by | |
| # building the activation package. | |
| - name: Home Manager module evaluation (x86_64-linux) | |
| run: nix build --print-build-logs .#checks.x86_64-linux.home-manager-shell-integration | |
| theme-freshness: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Verify tracked theme freshness | |
| run: | | |
| python3 ./scripts/import-themes.py | |
| test -z "$(git status --porcelain --untracked-files=all -- themes)" | |
| build: | |
| runs-on: macos-26 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Build app bundle | |
| run: ./build-app.sh | |
| - name: Codesign (ad-hoc) | |
| run: | | |
| scripts/sign-app-bundle.sh \ | |
| build/DanTerm.app .spm-build/bundle-layout-release.json . - | |
| release-build-check: | |
| runs-on: macos-26 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Build app bundle (release validation) | |
| run: ./build-app.sh --version "0.0.0-test" | |
| - name: Verify release bundle | |
| run: | | |
| APP_PATH="build/DanTerm.app" | |
| VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$APP_PATH/Contents/Info.plist") | |
| [ "$VERSION" = "0.0.0-test" ] || { echo "Version mismatch: $VERSION"; exit 1; } | |
| scripts/sign-app-bundle.sh \ | |
| "$APP_PATH" .spm-build/bundle-layout-release.json . - | |
| ( cd build && zip -qr DanTerm-test.zip DanTerm.app ) | |
| scripts/unpack-app-zip.sh build/DanTerm-test.zip \ | |
| "$RUNNER_TEMP/release-build-ziptest" \ | |
| .spm-build/bundle-layout-release.json . | |
| echo "Release build validation passed" |