From 51de8ccbdb46f82cd44f8e873a024b2bda71dcbc Mon Sep 17 00:00:00 2001 From: enricobuehler Date: Mon, 22 Jun 2026 14:47:14 +0200 Subject: [PATCH] ci(release): run tvOS on the canary track alongside iOS/macOS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The canary/stable split (0205c7b) gated the tvOS archive/upload — and its xcframework slice — to vX.Y.Z tags, while moving iOS/macOS onto canary main pushes. No tag has been cut since (both existing tags predate the split), so tvOS stopped reaching TestFlight entirely while iOS/macOS kept shipping on canary. Build the tvOS tier-3 slice unconditionally again (BUILD_TVOS=1; the nightly -Zbuild-std std is cached on the self-hosted runner) and drop the tag gate on the tvOS step so its if: matches the iOS / macOS App Store steps exactly — tvOS now uploads on canary main pushes + stable tags + dispatch, same as the others. Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitea/workflows/release.yml | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index a407437..78c3972 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -46,8 +46,8 @@ name: release on: push: - # Canary: a relevant main push uploads the iOS + macOS builds to TestFlight (Apple's own - # canary channel) — no notarized DMG, no tvOS (those are stable-only; see the per-step gates). + # Canary: a relevant main push uploads the iOS + macOS + tvOS builds to TestFlight (Apple's + # own canary channel) — no notarized DMG (that's stable-only; see the per-step gates). # Heavy on the shared mac-mini runner, so paths-filtered; the TestFlight steps are # continue-on-error until the App Store Connect record exists, so this no-ops until then. branches: [main] @@ -118,16 +118,11 @@ jobs: "$RUSTUP" toolchain install nightly --profile minimal "$RUSTUP" component add rust-src --toolchain nightly - - name: Build PunktfunkCore.xcframework (mac + iOS; + tvOS on stable tags) - # tvOS uses nightly -Zbuild-std (slow) — build it only for a real release, not on every - # canary main push. - run: | - TV="" - case "$GITHUB_REF" in refs/tags/v*) TV="BUILD_TVOS=1" ;; esac - # `env` (not a bare prefix): a $TV-expanded `NAME=val` word is NOT re-promoted to a shell - # assignment, so `BUILD_IOS=1 $TV bash …` would try to RUN `BUILD_TVOS=1` (exit 127). env - # treats its leading NAME=val args as assignments post-expansion; empty $TV is a no-op. - env BUILD_IOS=1 $TV bash scripts/build-xcframework.sh + - name: Build PunktfunkCore.xcframework (mac + iOS + tvOS) + # tvOS is a tier-3 target (nightly -Zbuild-std): slow on the first build, then cached on + # the self-hosted runner. Built on canary too so the tvOS archive/upload below runs on the + # same track as iOS/macOS (the nightly toolchain is installed unconditionally above). + run: BUILD_IOS=1 BUILD_TVOS=1 bash scripts/build-xcframework.sh - name: Stage App Store Connect API key env: @@ -293,9 +288,9 @@ jobs: -authenticationKeyIssuerID "${{ secrets.ASC_API_ISSUER_ID }}" - name: tvOS — archive + upload to TestFlight - # Stable only — the tvOS xcframework slice is built just for releases (above), and the - # App Store Connect record + runner platform are tvOS prerequisites. - if: startsWith(gitea.ref, 'refs/tags/v') && (gitea.event_name != 'workflow_dispatch' || inputs.testflight == 'true') + # Canary + stable, the same track as iOS/macOS — the tvOS xcframework slice is now built + # on every apple push (above), so this matches the iOS step's gate exactly. + if: gitea.event_name != 'workflow_dispatch' || inputs.testflight == 'true' # Needs tvOS added to the App Store Connect app record + the tvOS platform installed # on the runner (xcodebuild -downloadPlatform tvOS). continue-on-error: true