feat(mobile): full TestFlight CI on mobile-v* tag push (NAN-700)#336
Open
yagudaev wants to merge 3 commits into
Open
feat(mobile): full TestFlight CI on mobile-v* tag push (NAN-700)#336yagudaev wants to merge 3 commits into
yagudaev wants to merge 3 commits into
Conversation
Empty desktop releases were appearing on the GitHub Releases page with no DMG asset for ~15 min after each tag push. Cause: release- please publishes the GitHub release synchronously with the tag, then the release-desktop workflow takes 14-17 min to build, sign, notarize, and upload the DMG. During that window the release existed publicly with only Source code zip/tar.gz, looking broken. Two-line fix: - release-please-config.json: set draft: true on the desktop package so release-please creates the release as draft initially - release-desktop.yml: after the DMG upload step succeeds, flip the release from draft to published with gh release edit --draft=false --latest Mobile package keeps draft: false (default) since it doesn't have a CI asset upload — TestFlight is its own delivery channel. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rewrites the scaffold release-mobile.yml with a full xcodebuild pipeline on macos-14: writes ASC API key, imports iOS Distribution cert, runs build-ios.sh, submits via eas submit. Adds workflow_dispatch inputs for tag, variant (staging|production), and submit (boolean dry-run gate). Also fixes eas.json staging ascApiKeyPath from absolute local path to ~/ so EAS CLI can resolve it on CI runners. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Earlier draft of the mobile CI workflow expected new secrets named IOS_DIST_CERT_P12 + IOS_DIST_CERT_PASSWORD on the assumption that DEVELOPER_ID_CERT_P12 was strictly the macOS Developer ID Application cert. Repo only has DEVELOPER_ID_CERT_P12 — its actual contents may be a multi-identity export including the iOS Apple Distribution cert, in which case xcodebuild signs cleanly. If the .p12 turns out to contain only the macOS cert, the verification step at the end of the import (security find-identity grep "Apple Distribution|iPhone Distribution") will fail loudly with a clear message — no silent breakage. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
.github/workflows/release-mobile.ymlwith a fullxcodebuildpipeline onmacos-14, mirroringrelease-desktop.ymlworkflow_dispatchinputs:tag(required),variant(staging|production, default staging),submit(boolean, default true — set false for dry-run)inputs.submit != 'false'(tag-push defaults to submit=true)mobile/eas.jsonstagingascApiKeyPathfrom hardcoded absolute local path to~/so EAS CLI resolves it correctly on CI runners⚠ BLOCKER: iOS Distribution cert secret missing
The
DEVELOPER_ID_CERT_P12secret in the repo contains the macOS "Developer ID Application" certificate — used for macOS DMG notarization via electron-builder. This is a DIFFERENT cert than what iOS App Store distribution requires.iOS App Store distribution (
method: app-store-connectinExportOptions.plist) needs an "Apple Distribution" cert (also called "iPhone Distribution").xcodebuildwithCODE_SIGN_STYLE=Automaticwill look for this cert in the keychain at archive time. Without it, the archive step fails.Action required before the first real build:
.p12format → set a passwordbase64 -i cert.p12 | pbcopyIOS_DIST_CERT_P12— the base64 string from step 4IOS_DIST_CERT_PASSWORD— the password from step 3The workflow will fail at the "Import iOS Distribution certificate" step with a clear error until these are added. It will NOT silently produce an ad-hoc-signed IPA.
How to test before relying on this
IOS_DIST_CERT_P12+IOS_DIST_CERT_PASSWORDsecrets (see BLOCKER above).mobile-v1.2.0(latest existing — re-uses existing version, won't bump)stagingfalse← KEY — skips upload to TestFlight, just verifies build pathsubmit: trueto do a full end-to-end test. Note: TestFlight will reject as duplicate build number — that's OK, it proves the submit auth + path works without polluting TestFlight with a real release.mobile-v*tag push (created by release-please) will hands-off ship to TestFlight.Other fixes in this PR
mobile/eas.jsonstaging profile path fix — theascApiKeyPathwas"/Users/michaelyagudaev/.appstore/..."(absolute local path). Changed to"~/.appstore/...". Without this fix, EAS CLI on the runner couldn't find the API key and would fall back to interactive Apple ID login, breaking CI. Local flow is unaffected since~resolves to the same place.Secrets summary
APPLE_API_KEY_P8.p8for altool validate + eas submitAPPLE_API_KEY_IDAPPLE_API_ISSUERIOS_DIST_CERT_P12IOS_DIST_CERT_PASSWORDEXPO_TOKENeas submitauthenticationTest plan
IOS_DIST_CERT_P12+IOS_DIST_CERT_PASSWORDsecrets to repoworkflow_dispatchwithsubmit: false→ IPA artifact downloads, build log presentworkflow_dispatchwithsubmit: true→ EAS submit runs, TestFlight processes buildyarn release:ios:stagingstill works unchanged🤖 Generated with Claude Code