Skip to content

Use approved iOS version 1.0.1 for TestFlight beta CI - #7636

Merged
azooz2003-bit merged 2 commits into
mainfrom
fix-ios-approved-version
Jul 8, 2026
Merged

azooz2003-bit merged 2 commits into
mainfrom
fix-ios-approved-version

Conversation

@azooz2003-bit

@azooz2003-bit azooz2003-bit commented Jul 8, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • stop the scheduled iOS TestFlight lane from passing --auto-version
  • set checked-in iOS MARKETING_VERSION to the approved 1.0.1
  • keep scheduled external betas on the checked-in iOS MARKETING_VERSION so CI can publish builds under the already-approved version
  • document the TestFlight downgrade caveat for internal testers who installed a pending higher-version build

Caveat

External testers could not install the unapproved pending version, so this unblocks the external beta path. Internal testers who already installed a higher internal-only TestFlight build will not see lower-version builds as updates. They need a one-time reinstall, or an operator needs to cut an internal-only build on the higher version.

Verification

  • git diff --check
  • ruby -e 'require "yaml"; YAML.load_file(".github/workflows/ios-testflight.yml"); puts "workflow yaml ok"'\n- bash -n ios/scripts/upload-testflight.sh\n\nNo tagged reload: workflow/version metadata change.

Note

Medium Risk
Changes release versioning and TestFlight distribution behavior for all scheduled main betas; wrong MARKETING_VERSION in xcconfig could ship misleading user-visible versions or delay external access until review.

Overview
Scheduled iOS TestFlight uploads on main no longer pass --auto-version, so each beta uses the MARKETING_VERSION in ios/Config/Shared.xcconfig instead of stamping the next patch above the last ios-v* tag. That keeps external builds on an already Beta App Review–approved marketing version so CI can keep shipping main without waiting on a pending higher version.

The checked-in version is set to 1.0.1 (down from 1.0.3). Workflow comments, step summaries, and build metadata now label this path as checked_in_version rather than auto_version. ios/README.md explains that external testers are unblocked by the rollback, while internal testers who already installed a higher pending build must reinstall or take a one-off higher-version internal cut—TestFlight does not treat lower marketing versions as updates.

Reviewed by Cursor Bugbot for commit d9895d5. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • Documentation

    • Clarified TestFlight external eligibility, Beta App Review timing, and how unblocking works after version rollbacks.
    • Updated guidance that scheduled sync uses the checked-in iOS marketing version, and that a new Beta App Review submission occurs only when the marketing version is intentionally bumped.
  • Bug Fixes

    • Updated scheduled TestFlight uploads to stop auto-versioning and consistently use the checked-in marketing version.
    • Improved override behavior so it doesn’t affect the next scheduled canonical beta, with corrected build metadata and notes generation context.
  • Chores

    • Updated the iOS MARKETING_VERSION value from 1.0.3 to 1.0.1.

@vercel

vercel Bot commented Jul 8, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment Jul 9, 2026 1:25am
cmux-staging Building Building Preview, Comment Jul 9, 2026 1:25am

@coderabbitai

coderabbitai Bot commented Jul 8, 2026 •

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The TestFlight scheduled upload flow now reuses the checked-in iOS MARKETING_VERSION instead of auto-versioning. Workflow comments, the iOS version source, upload metadata, and README instructions were updated to match the new scheduled and override behavior.

Changes

Scheduled TestFlight versioning update

Layer / File(s) Summary
Workflow comments
.github/workflows/ios-testflight.yml
Updates schedule, override, and checkout comments to describe checked-in MARKETING_VERSION usage and note-generation history requirements.
Checked-in version upload path
ios/Config/Shared.xcconfig, .github/workflows/ios-testflight.yml
Changes the iOS MARKETING_VERSION source, removes --auto-version from the non-override upload path, and updates the displayed version text plus persisted upload mode.
README wording
ios/README.md
Rewords the TestFlight documentation to describe the external-review gate, checked-in MARKETING_VERSION reuse, and rollback visibility behavior.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • manaflow-ai/cmux#7419: Both PRs modify the same workflow’s external TestFlight upload path and version-gating behavior.
  • manaflow-ai/cmux#7464: Both PRs adjust how MARKETING_VERSION is selected and propagated across override and scheduled workflow paths.

Suggested reviewers: lawrencecchen

🚥 Pre-merge checks | ✅ 24 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description covers the summary and verification but omits required template sections like Testing, Review Trigger, and Checklist. Add the Testing section, the copy/paste Review Trigger block, and the Checklist; rename Verification to Testing if you want to follow the template.
✅ Passed checks (24 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed No production Swift files changed; the only patch is ios/Config/Shared.xcconfig, so no actor-isolation issue was introduced.
Cmux Swift Blocking Runtime ✅ Passed Diff changes only workflow/docs/config files; no Swift production code or blocking sync primitives were introduced.
Cmux Browser Automation Off-Main ✅ Passed PR only changes iOS workflow/docs/config; no browser automation, WebKit, or socket-worker code is touched.
Cmux Expensive Synchronous Load ✅ Passed PR changes only workflow/docs/config; no Swift files or agent-history loads were added or moved, so the expensive-sync-load rule isn’t implicated.
Cmux Cache Substitution Correctness ✅ Passed No cache substitution bug: the PR uses authoritative repo/GitHub history sources, not cached or stale state, and the check targets production Swift/TS/JS paths.
Cmux No Hacky Sleeps ✅ Passed Actual diff only changes ios/Config/Shared.xcconfig MARKETING_VERSION; no runtime script or sleep/poll/timer logic was added.
Cmux Algorithmic Complexity ✅ Passed Diff only changes workflow/docs/config; no new production or runtime algorithmic-complexity regression was introduced.
Cmux Swift Concurrency ✅ Passed Diff only changes ios/Config/Shared.xcconfig; no Swift files or async patterns were introduced or expanded.
Cmux Swift @Concurrent ✅ Passed No Swift files changed; the PR only touches workflow/docs/config, so the @concurrent review rule is not applicable.
Cmux Swift File And Package Boundaries ✅ Passed No production Swift files changed in the PR; only workflow/docs/xcconfig files were touched, so the Swift package-boundary rule isn’t implicated.
Cmux Swiftpm Lockfiles ✅ Passed PASS: The PR only changes workflow/docs and ios/Config/Shared.xcconfig; no Package.swift, Package.resolved, cmux.xcodeproj, or .gitignore changes trigger the lockfile policy.
Cmux Swift Logging ✅ Passed No production Swift files changed; diff only touches workflow/docs and an xcconfig value, so the Swift logging rule is not implicated.
Cmux User-Facing Error Privacy ✅ Passed Only docs, workflow comments, and CI summary text changed; no user-facing error, alert, or recovery copy was added or exposed secrets/details.
Cmux Full Internationalization ✅ Passed Diff only touches workflow comments, an xcconfig version token, and iOS README docs; no Swift/UI strings, xcstrings, web messages, or locale files changed.
Cmux Swiftui State Layout ✅ Passed Diff only updates ios/Config/Shared.xcconfig; no SwiftUI state/layout code is touched, so the rule isn’t applicable.
Cmux Architecture Rethink ✅ Passed PR only changes workflow/docs/config; the merge-base diff contains no .swift files, so no Swift architectural-rethink violation is introduced.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PR only changes ios/Config/Shared.xcconfig; no Swift or window-related code was added or modified, so the cmux auxiliary-window shortcut rule is not triggered.
Cmux Source Artifacts ✅ Passed The diff only changes ios/Config/Shared.xcconfig, a deliberate config file; no generated logs, caches, or artifact directories are added.
Cmux No Test Or Debug Seam In Production Source ✅ Passed PR changes only workflow/docs/config files; no Swift files under any production Sources path were modified.
Cmux No Ambient Global State ✅ Passed The PR only changes workflow/docs/config files; no Swift source files or new ambient-global-state patterns are introduced.
Title check ✅ Passed The title is concise and accurately describes the main change: switching scheduled TestFlight CI to the approved iOS 1.0.1 version.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-ios-approved-version

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Jul 8, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR stops the scheduled iOS TestFlight lane from passing --auto-version and rolls MARKETING_VERSION back from the pending 1.0.3 to the already-Apple-approved 1.0.1, so CI keeps publishing main-tracking builds that external testers can actually install. Documentation is updated throughout to reflect the checked-in-version policy and the one-time reinstall caveat for internal testers.

  • Workflow change (ios-testflight.yml): --auto-version is dropped from ARGS, the step-summary description and the persisted upload_mode metadata are updated from auto_version to checked_in_version. No downstream job or script parses the upload_mode field value, so the rename is safe.
  • Version rollback (Shared.xcconfig): MARKETING_VERSION is deliberately set to 1.0.1; the PR description and README both document the external-tester unblock and the internal-tester reinstall trade-off.
  • README update (ios/README.md): Adds the Beta App Review trigger/rollback caveat and clarifies that version bumps are now intentional rather than automatic.

Confidence Score: 5/5

Safe to merge — all three changed files make consistent, intentional adjustments to version policy and documentation with no logic regressions.

The workflow change (dropping --auto-version) aligns with the xcconfig rollback to the approved MARKETING_VERSION; the upload_mode rename is inert because no downstream job or script parses the field value. The README and inline comments are updated consistently, and the operator caveat for internal testers is clearly documented.

No files require special attention.

Important Files Changed

Filename Overview
.github/workflows/ios-testflight.yml Removes --auto-version from the scheduled upload path and renames the upload_mode metadata value from auto_version to checked_in_version; no downstream consumers parse that field so the rename is safe.
ios/Config/Shared.xcconfig Intentionally rolls MARKETING_VERSION back from 1.0.3 (pending/unapproved) to 1.0.1 (last Apple-approved version) to unblock external TestFlight testers.
ios/README.md Adds caveat about internal testers needing a one-time reinstall after a version rollback, and documents the checked-in MARKETING_VERSION policy for the scheduled lane.

Reviews (3): Last reviewed commit: "Use approved iOS beta version 1.0.1" | Re-trigger Greptile

@azooz2003-bit
azooz2003-bit force-pushed the fix-ios-approved-version branch from 32b096b to 302433d Compare July 8, 2026 18:13
@azooz2003-bit
azooz2003-bit force-pushed the fix-ios-approved-version branch from 302433d to d9895d5 Compare July 8, 2026 19:04
@azooz2003-bit azooz2003-bit changed the title Use approved iOS version for TestFlight beta CI Use approved iOS version 1.0.1 for TestFlight beta CI Jul 8, 2026
@azooz2003-bit
azooz2003-bit enabled auto-merge (squash) July 8, 2026 19:04

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d9895d5. Configure here.

# Test" notes from the commits since the previous beta (skipped if we
# have no base SHA yet).
ARGS=(--lane beta --signing manual --auto-version --external)
ARGS=(--lane beta --signing manual --external)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing range notes guard

Medium Severity

Dropping --auto-version without always enabling range-notes mode means canonical uploads with an empty LAST_UPLOADED_SHA fall back to changelog validation. This commit sets MARKETING_VERSION to 1.0.1 while ios/CHANGELOG.md still tops out at 1.0.3, so upload-testflight.sh preflight fails before archive.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit d9895d5. Configure here.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/ios-testflight.yml (1)

440-464: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Handle the empty LAST_UPLOADED_SHA path
When LAST_UPLOADED_SHA is empty, this upload falls back to the changelog version guard and compares ios/CHANGELOG.md’s top entry (1.0.3) against the archived MARKETING_VERSION (1.0.1), so the first no-history run will fail. Add a fallback --notes-from-range base for the empty-history case, or don’t reuse the older marketing version here.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ios-testflight.yml around lines 440 - 464, The beta upload
path in the workflow is missing a valid notes base when LAST_UPLOADED_SHA is
empty, which causes the changelog/version guard to compare the current top entry
against an older MARKETING_VERSION and fail. Update the upload logic around the
ARGS construction in the iOS TestFlight workflow to either supply a fallback
--notes-from-range value for the first no-history run or avoid reusing the
archived marketing version in that branch, so the upload script can proceed
cleanly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In @.github/workflows/ios-testflight.yml:
- Around line 440-464: The beta upload path in the workflow is missing a valid
notes base when LAST_UPLOADED_SHA is empty, which causes the changelog/version
guard to compare the current top entry against an older MARKETING_VERSION and
fail. Update the upload logic around the ARGS construction in the iOS TestFlight
workflow to either supply a fallback --notes-from-range value for the first
no-history run or avoid reusing the archived marketing version in that branch,
so the upload script can proceed cleanly.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 73739003-3c7d-4884-959b-c91240a5f316

📥 Commits

Reviewing files that changed from the base of the PR and between 302433d and d9895d5.

📒 Files selected for processing (3)
  • .github/workflows/ios-testflight.yml
  • ios/Config/Shared.xcconfig
  • ios/README.md

@azooz2003-bit
azooz2003-bit merged commit 01923d4 into main Jul 8, 2026
36 of 38 checks passed

This branch was successfully deployed

1 active deployment
Preview – cmux — d9895d50 Deployed Jul 9, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant