Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 11 additions & 16 deletions .github/workflows/ios-testflight.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
name: iOS TestFlight (beta)

on:
# Publish to the beta lane on every iOS-affecting merge to main, so testers get
# changes immediately instead of waiting for the nightly. Path-filtered to the
# inputs that actually change the iOS app (the iOS target, the linked Swift
# packages, and GhosttyKit); macOS-only Sources/ changes don't rebuild the iOS
# app, so they don't trigger an upload. Push runs always build (the SHA gate is
# schedule-only); each merge is a new commit, so there's no duplicate upload.
push:
branches: [main]
paths:
- "ios/**"
- "Packages/**"
- "ghostty"
- "scripts/ensure-ghosttykit.sh"
- "scripts/install-zig-ci.sh"
- "scripts/ghosttykit-checksums.txt"
- ".github/workflows/ios-testflight.yml"
# No push trigger. A TestFlight upload is a release action: you only ever want
# the LATEST main state in beta, exactly once per change, never one upload per
# commit. Triggering on every iOS-affecting push forced a concurrency group to
# dedup concurrent uploads, and GitHub cancels the superseded *pending* runs in
# that group during merge bursts; those cancelled runs surface as red checks on
# the intermediate main commits, making main look like CI is failing. The
# schedule below already SHA-compares HEAD to the last uploaded commit (the
# `decide` job), which is the correct primitive for a beta lane: it uploads the
# current main only when it has actually advanced, and skips (green) otherwise.
# For an immediate beta, use workflow_dispatch; intentional cuts go through the
# release flow. See nightly.yml for the rolling dogfood lane.
workflow_dispatch:
inputs:
build_number:
Expand Down
Loading