3131 - uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
3232 with :
3333 fetch-depth : 2
34- - uses : dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
34+ - uses : cashapp/activate-hermit@cea9af7913204a965fd488637a8d1811bba2e616 # v1
35+ - uses : dorny/paths-filter@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d # v4.0.3
3536 id : filter
3637 with :
3738 token : ' '
@@ -46,32 +47,32 @@ jobs:
4647 - 'deny.toml'
4748 - '.github/workflows/ci.yml'
4849 - 'scripts/run-tests.sh'
50+ - 'scripts/model-capabilities.json'
51+ - 'scripts/normative-corpus.json'
4952 - 'justfile'
5053 desktop:
5154 - 'scripts/check-file-sizes-core.mjs'
5255 - 'scripts/check-file-sizes-core.test.mjs'
56+ - 'scripts/model-capabilities.json'
57+ - 'scripts/normative-corpus.json'
5358 - 'desktop/!(src-tauri)/**'
5459 - 'pnpm-lock.yaml'
5560 desktop-rust:
5661 - 'desktop/src-tauri/**'
62+ - 'pnpm-lock.yaml'
5763 web:
58- - 'scripts/check-file-sizes-core.mjs'
59- - 'scripts/check-file-sizes-core.test.mjs'
6064 - 'web/**'
6165 - 'pnpm-lock.yaml'
6266 mobile:
63- - 'scripts/check-file-sizes-core.mjs'
64- - 'scripts/check-file-sizes-core.test.mjs'
6567 - 'mobile/**'
66- - 'scripts/mobile-release.sh'
67- - 'scripts/mobile-worktree-overrides.sh'
68- - 'scripts/mobile-worktree-clean.sh'
69- - 'scripts/publish-mobile-release-candidate.sh'
70- - 'scripts/release-rulesets.sh'
71- - 'scripts/test-mobile-release-contract.sh'
72- - 'scripts/test-mobile-release-candidate-publisher.sh'
73- - 'scripts/test-mobile-worktree-overrides.sh'
74- - '.github/workflows/mobile-release-candidate.yml'
68+ relay:
69+ - 'crates/buzz-relay/**'
70+ - 'crates/buzz-core/**'
71+ - 'crates/buzz-db/**'
72+ - 'crates/buzz-backend-kubernetes/**'
73+ - 'Cargo.toml'
74+ - 'Cargo.lock'
75+ - 'deny.toml'
7576 - '.github/workflows/ci.yml'
7677 - name : Release workflow source contract
7778 run : scripts/test-release-ref-contract.sh
@@ -81,12 +82,18 @@ jobs:
8182 run : scripts/test-publish-sprig-rolling-release.sh
8283 - name : Desktop release candidate contract
8384 run : scripts/test-desktop-release-candidate.sh
85+ - name : OSS desktop promotion contract
86+ run : |
87+ scripts/test-oss-desktop-promotion.sh
88+ scripts/test-oss-desktop-promotion-behavior.sh
8489 - name : Mobile release contract
8590 run : |
8691 scripts/test-mobile-release-contract.sh
8792 scripts/test-mobile-release-candidate-publisher.sh
8893 - name : Mobile worktree identity contract
8994 run : scripts/test-mobile-worktree-overrides.sh
95+ - name : File size policy
96+ run : just file-size-check
9097 - name : File size ratchet unit tests
9198 run : node --test scripts/check-file-sizes-core.test.mjs
9299 - name : CI path filter contract
@@ -322,6 +329,9 @@ jobs:
322329 if : github.event_name == 'push' || needs.changes.outputs.desktop == 'true' || needs.changes.outputs.desktop-rust == 'true' || needs.changes.outputs.rust == 'true'
323330 permissions :
324331 contents : read
332+ env :
333+ SCCACHE_GHA_ENABLED : " true"
334+ SCCACHE_GHA_RW_MODE : ${{ (github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.number == 5224)) && 'READ_WRITE' || 'READ_ONLY' }}
325335 steps :
326336 - uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
327337 - uses : cashapp/activate-hermit@cea9af7913204a965fd488637a8d1811bba2e616 # v1
@@ -346,13 +356,22 @@ jobs:
346356 .
347357 desktop/src-tauri
348358 save-if : ${{ github.event_name != 'pull_request' }}
359+ # Cache rustc outputs for unchanged workspace crates. Trusted pushes write;
360+ # the bounded PR 5224 trial writes only to its isolated merge-ref scope.
361+ - name : Set up sccache
362+ if : steps.relay-artifacts-cache.outputs.cache-hit != 'true'
363+ uses : Mozilla-Actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 # zizmor: ignore[cache-poisoning] Bounded trial: only PR 5224 writes to its isolated merge-ref scope; trusted pushes retain production writes.
364+ with :
365+ version : v0.16.0
349366 - name : Install cargo-nextest
350367 if : steps.relay-artifacts-cache.outputs.cache-hit != 'true'
351368 uses : taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
352369 with :
353370 tool : cargo-nextest@0.9.136
354371 - name : Build relay artifacts
355372 if : steps.relay-artifacts-cache.outputs.cache-hit != 'true'
373+ env :
374+ RUSTC_WRAPPER : sccache
356375 run : |
357376 cargo build --profile ci -p buzz-relay -p git-credential-nostr
358377 cargo nextest archive \
@@ -364,7 +383,9 @@ jobs:
364383 --test e2e_event_reminder \
365384 --archive-file target/ci/backend-integration-tests.tar.zst
366385 - name : Save relay artifacts cache
367- if : steps.relay-artifacts-cache.outputs.cache-hit != 'true'
386+ # PR-scoped exact-source entries cannot warm main or other PRs and churn
387+ # the shared cache pool. sccache provides read-only PR reuse instead.
388+ if : steps.relay-artifacts-cache.outputs.cache-hit != 'true' && github.event_name == 'push'
368389 uses : actions/cache/save@caa296126883cff596d87d8935842f9db880ef25 # v5
369390 with :
370391 path : |
@@ -773,6 +794,19 @@ jobs:
773794 env :
774795 RELAY_URL : ws://localhost:3000
775796 GIT_CREDENTIAL_NOSTR_BIN : ${{ github.workspace }}/target/ci/git-credential-nostr
797+ - name : Media read-auth e2e
798+ # Reads require kind:24242 `t=get` auth, so these binaries are the only
799+ # coverage that a real relay rejects bare reads and honours host- and
800+ # hash-scoped tokens. They were #[ignore]d and selected by no CI job, so
801+ # the lane never ran; select it here, where MinIO and the seeded
802+ # 'localhost:3000' community already exist.
803+ # --no-fail-fast: without it cargo stops after the first failing binary,
804+ # so one broken case hides every later binary's result.
805+ run : |
806+ cargo test -p buzz-test-client --no-fail-fast --test e2e_media --test e2e_media_extended --test e2e_media_video -- --ignored --nocapture
807+ env :
808+ RELAY_URL : ws://localhost:3000
809+ RELAY_HTTP_URL : http://localhost:3000
776810 - name : Upload relay logs
777811 if : failure()
778812 uses : actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
@@ -866,8 +900,6 @@ jobs:
866900 with :
867901 path : ~/.pub-cache
868902 key : pub-${{ runner.os }}-${{ hashFiles('mobile/pubspec.lock') }}
869- - name : File size ratchet
870- run : node mobile/scripts/check-file-sizes.mjs
871903 - name : Format check
872904 run : cd mobile && dart format --output=none --set-exit-if-changed .
873905 - name : Analyze
@@ -1028,7 +1060,7 @@ jobs:
10281060 git log -1 --format=%s | grep -qx smoke
10291061 echo "Host bash resolved and functional; git commit round-trip passed"
10301062 - name : Check (Tauri crate)
1031- run : cargo check --manifest-path desktop/src-tauri/Cargo.toml --target $env:TARGET
1063+ run : cargo check --manifest-path desktop/src-tauri/Cargo.toml --workspace --all-targets -- target $env:TARGET
10321064 env :
10331065 CMAKE_POLICY_VERSION_MINIMUM : " 3.5"
10341066 - name : Test (Tauri crate)
0 commit comments