ci(release): run tvOS on the canary track alongside iOS/macOS
ci / rust (push) Failing after 29s
apple / swift (push) Successful in 55s
ci / web (push) Successful in 37s
ci / docs-site (push) Successful in 59s
android / android (push) Successful in 3m13s
deb / build-publish (push) Successful in 2m20s
decky / build-publish (push) Successful in 11s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 5s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 4s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 3s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 4s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 3s
ci / bench (push) Successful in 4m40s
release / apple (push) Successful in 7m27s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 8m47s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 8m39s
docker / deploy-docs (push) Successful in 16s

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) <noreply@anthropic.com>
This commit is contained in:
2026-06-22 14:47:14 +02:00
parent 118752c136
commit 51de8ccbdb
+10 -15
View File
@@ -46,8 +46,8 @@ name: release
on: on:
push: push:
# Canary: a relevant main push uploads the iOS + macOS builds to TestFlight (Apple's own # Canary: a relevant main push uploads the iOS + macOS + tvOS builds to TestFlight (Apple's
# canary channel) — no notarized DMG, no tvOS (those are stable-only; see the per-step gates). # 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 # 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. # continue-on-error until the App Store Connect record exists, so this no-ops until then.
branches: [main] branches: [main]
@@ -118,16 +118,11 @@ jobs:
"$RUSTUP" toolchain install nightly --profile minimal "$RUSTUP" toolchain install nightly --profile minimal
"$RUSTUP" component add rust-src --toolchain nightly "$RUSTUP" component add rust-src --toolchain nightly
- name: Build PunktfunkCore.xcframework (mac + iOS; + tvOS on stable tags) - name: Build PunktfunkCore.xcframework (mac + iOS + tvOS)
# tvOS uses nightly -Zbuild-std (slow) — build it only for a real release, not on every # tvOS is a tier-3 target (nightly -Zbuild-std): slow on the first build, then cached on
# canary main push. # the self-hosted runner. Built on canary too so the tvOS archive/upload below runs on the
run: | # same track as iOS/macOS (the nightly toolchain is installed unconditionally above).
TV="" run: BUILD_IOS=1 BUILD_TVOS=1 bash scripts/build-xcframework.sh
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: Stage App Store Connect API key - name: Stage App Store Connect API key
env: env:
@@ -293,9 +288,9 @@ jobs:
-authenticationKeyIssuerID "${{ secrets.ASC_API_ISSUER_ID }}" -authenticationKeyIssuerID "${{ secrets.ASC_API_ISSUER_ID }}"
- name: tvOS — archive + upload to TestFlight - name: tvOS — archive + upload to TestFlight
# Stable only — the tvOS xcframework slice is built just for releases (above), and the # Canary + stable, the same track as iOS/macOS — the tvOS xcframework slice is now built
# App Store Connect record + runner platform are tvOS prerequisites. # on every apple push (above), so this matches the iOS step's gate exactly.
if: startsWith(gitea.ref, 'refs/tags/v') && (gitea.event_name != 'workflow_dispatch' || inputs.testflight == 'true') if: gitea.event_name != 'workflow_dispatch' || inputs.testflight == 'true'
# Needs tvOS added to the App Store Connect app record + the tvOS platform installed # Needs tvOS added to the App Store Connect app record + the tvOS platform installed
# on the runner (xcodebuild -downloadPlatform tvOS). # on the runner (xcodebuild -downloadPlatform tvOS).
continue-on-error: true continue-on-error: true