Add ci-ios PR pipeline - #635
Merged
kieran-osgood-shopify merged 1 commit intoAug 26, 2026
Merged
Conversation
11 tasks
Contributor
Author
This was referenced Aug 13, 2026
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-3-bitrise-prerequisites
branch
from
August 13, 2026 09:22
db74123 to
dc792a1
Compare
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-4-bitrise-gate
branch
2 times, most recently
from
August 13, 2026 11:36
ade88b9 to
f952221
Compare
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-3-bitrise-prerequisites
branch
from
August 13, 2026 11:36
dc792a1 to
2d471a8
Compare
ci-ios PR pipeline
kieran-osgood-shopify
marked this pull request as ready for review
August 14, 2026 11:17
ci-ios PR pipelineci-ios PR pipeline
Package Size
Web file breakdown
React Native file breakdown
Android file breakdown
Measured from the PR base SHA and PR head SHA. The file breakdown shows uncompressed sizes within each package artifact, so individual files do not sum to the compressed artifact total. This comment reports package artifact sizes only; it is not a final app binary-size report. |
Install this buildOpen Tophat, select your target device, then click Install. Links open on the Mac running Tophat.
Checkout Kit E2E results
|
ci-ios PR pipelineci-ios PR pipeline
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-3-bitrise-prerequisites
branch
from
August 14, 2026 12:35
2d471a8 to
61287b4
Compare
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-4-bitrise-gate
branch
from
August 14, 2026 12:36
f952221 to
4a0efcf
Compare
markmur
reviewed
Aug 14, 2026
kieran-osgood-shopify
changed the base branch from
kieran-osgood/macos-ci-3-bitrise-prerequisites
to
graphite-base/635
August 14, 2026 14:08
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-4-bitrise-gate
branch
from
August 14, 2026 16:32
4a0efcf to
1473d71
Compare
kieran-osgood-shopify
force-pushed
the
graphite-base/635
branch
from
August 14, 2026 16:32
61287b4 to
0941456
Compare
kieran-osgood-shopify
changed the base branch from
graphite-base/635
to
kieran-osgood/macos-ci-3-bitrise-prerequisites
August 14, 2026 16:32
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-3-bitrise-prerequisites
branch
from
August 17, 2026 15:50
0941456 to
74d6e93
Compare
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-4-bitrise-gate
branch
from
August 17, 2026 15:50
1473d71 to
00bc5fd
Compare
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-3-bitrise-prerequisites
branch
from
August 18, 2026 16:23
74d6e93 to
60087ab
Compare
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-4-bitrise-gate
branch
from
August 18, 2026 16:23
00bc5fd to
68b1194
Compare
kieran-osgood-shopify
changed the base branch from
kieran-osgood/macos-ci-3-bitrise-prerequisites
to
graphite-base/635
August 18, 2026 17:01
kieran-osgood-shopify
force-pushed
the
graphite-base/635
branch
from
August 18, 2026 17:01
60087ab to
3a69b9f
Compare
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-4-bitrise-gate
branch
from
August 18, 2026 17:01
68b1194 to
b209bb5
Compare
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-4-bitrise-gate
branch
2 times, most recently
from
August 18, 2026 18:26
591facb to
e585e76
Compare
Part of the macOS CI speed-up. Tracked on shop/issues-checkout-kit#1206, under shop/issues-checkout-kit#1202. ## Why a new pipeline Bitrise reports one status per pipeline. Reusing the `e2e` pipeline would tie the merge gate to the BrowserStack device flake that `e2e/BITRISE.md:53` deliberately keeps non-blocking. `ci-ios` is separate for that reason. ## How it works 1. `ci-ios-plan` runs on the cheap default Linux stack. It derives the changed files, maps them through `e2e/config/ios_ci.yml`, and publishes one `CI_IOS_*` flag per job with `share-pipeline-variable@1`. Every macOS machine this pipeline boots is decided here, so a change needing no iOS job costs one short Linux build. 2. Each job workflow carries a `run_if` on its own flag. 3. `ci-ios-report` has **no** `run_if` and `should_always_run: workflow`. It posts the `Checkout Kit iOS` check run on every build, including one where the plan selected nothing. The `trigger_map` entry for `ci-ios` has no `changed_files` filter, on purpose. A required check that never posts leaves a pull request permanently unmergeable, so the trigger is unconditional and the cheap Linux gate decides the rest. ## Files | File | Role | | --- | --- | | `e2e/config/ios_ci.yml` | job → changed-file-filter mapping | | `e2e/lib/ios_ci_run_plan.rb` | selection, flag names, validation | | `e2e/lib/ios_ci_reporter.rb` | the `Checkout Kit iOS` check run | | `e2e/scripts/ios_ci_run_plan` | `validate` / `bitrise-env` / `selected-jobs` / `assert-pipeline-coverage` | | `e2e/scripts/report_ios_ci_results` | Bitrise entry point for the reporter | | `e2e/scripts/bitrise_ci_helpers` | changed-files, branch config, GitHub token — shared with the E2E gate | | `e2e/BITRISE.md` | the `ci-ios` section: why the trigger is unfiltered, why the check is self-posted | | `e2e/RUNBOOK.md` | "The iOS check failed or never posted", by symptom | ## Drift protection Three invariants in `e2e/test/ios_ci_run_plan_test.rb` assert set-equality between `ios_ci.yml`, the pipeline `run_if` expressions, and the `share-pipeline-variable@1` list, read from the real `e2e/bitrise.yml`. Adding a job to one side and not the others fails the suite. All three were confirmed red against a deliberately broken config before this was submitted. `ci-ios-plan` also runs `assert-pipeline-coverage` against the **branch head** `e2e/bitrise.yml`. Bitrise resolves the pipeline graph from the branch head while the plan is generated from the merged tree, so a stale branch can select a job whose workflow does not exist. This fails it fast with a rebase hint. ## Verification - `shadowenv exec -- ./scripts/test_ruby` — green. - `shadowenv exec -- bitrise validate --config=e2e/bitrise.yml` — valid. - CLI smoke tests for Swift-only, docs-only, and `e2e/bitrise.yml` changes. Still to do on a real build, per the plan: four probe pull requests — Swift-only, React Native-only, docs-only, and one touching `e2e/bitrise.yml`. `Checkout Kit iOS` must post on all four with the right pass/skip split. ## Decisions made without you - **Simulator**: settled on `iPhone 17 Pro` for every job. GitHub Actions used 17 Pro for Swift and 16 Pro for React Native; one `app.envs` value replaces the split. - **YAML anchor**: the `&macos_stack` definition moved to `ci-ios-swift-package-tests`, because YAML requires an anchor before its first alias and that workflow now comes first in document order. - **Beyond the plan text**: `e2e-report` and `e2e-produce-browserstack-run-plan` were refactored onto the new shared helpers, so the two gates cannot derive different changed-file lists from one commit. The `scripts` infra filter in `ci.yml` was widened to `e2e/config/**` *and* `e2e/bitrise.yml`. - **Docs land here, not in a separate PR**: the `BITRISE.md` and `RUNBOOK.md` sections describe this pipeline, so they ship with it. The stale `ruby: 3.3.6` in `BITRISE.md` is corrected to the actual `"3.4:installed"` in the same pass. ## Open question `ci-ios-report` needs a GitHub token. `e2e_export_github_token` falls back to the Bitrise GitHub App's `GIT_HTTP_PASSWORD`, which requires **Project settings → Repository → Extend GitHub App permissions to builds**. Please confirm that setting is on before the soak.
kieran-osgood-shopify
force-pushed
the
kieran-osgood/macos-ci-4-bitrise-gate
branch
from
August 19, 2026 14:09
e585e76 to
4fd7ce0
Compare
markmur
approved these changes
Aug 26, 2026
Contributor
Author
Merge activity
|
kieran-osgood-shopify
deleted the
kieran-osgood/macos-ci-4-bitrise-gate
branch
August 26, 2026 11:30
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.

Part of the macOS CI speed-up
Epic
Issue
What
Adds a new
ci-iospipeline in bitriseci-ioswill be non-blocking until stable and will run in parallel to the github actionsci-ioswill run all macosxcodejobs to improve speedWhy
Bitrise reports one status per pipeline.
Reusing the
e2epipeline would tie the merge gate to the BrowserStack device flake thate2e/BITRISE.md:53deliberately keeps non-blocking.How it works
ci-ios-planruns on the cheap default Linux stack. It derives the changed files, maps them throughe2e/config/ios_ci.yml, and publishes oneCI_IOS_*flag per job withshare-pipeline-variable@1. Every macOS machine his pipeline boots is decided here, so a change needing no iOS job costs one short Linux build.run_ifon its own flag.ci-ios-reporthas norun_ifandshould_always_run: workflow. It posts theCheckout Kit iOScheck run on every build, including one where the plan selected nothing.The
trigger_mapentry forci-ioshas nochanged_filesfilter, on purpose.A required check that never posts leaves a pull request permanently unmergeable, so the trigger is unconditional and the cheap Linux gate decides the rest.
Files
e2e/config/ios_ci.ymle2e/lib/ios_ci_run_plan.rbe2e/lib/ios_ci_reporter.rbCheckout Kit iOScheck rune2e/scripts/ios_ci_run_planvalidate/bitrise-env/selected-jobs/assert-pipeline-coveragee2e/scripts/report_ios_ci_resultse2e/scripts/bitrise_ci_helpersTesting
It wont run on this pr until it hits main so i manually dispatched:
curl -X POST \ 'https://api.bitrise.io/v0.1/apps/f51f9054-053e-40f1-81e9-ae727567ae76/builds' \ -H 'accept: application/json' \ -H "Authorization: ${BITRISE_PAT}" \ -H 'Content-Type: application/json' \ -d '{ "hook_info": { "type": "bitrise" }, "build_params": { "branch": "kieran-osgood/macos-ci-4-bitrise-gate", "branch_dest": "main", "branch_repo_owner": "Shopify", "branch_dest_repo_owner": "Shopify", "commit_hash": "4fd7ce0dd2c8c18c98a3e9fab71a93cd46a46fab", "pull_request_id": 635, "pipeline_id": "ci-ios" } }'https://app.bitrise.io/app/f51f9054-053e-40f1-81e9-ae727567ae76/pipelines/8c1b9e60-6905-43e9-9387-17857c34df2c

Before you merge
Important
platforms/swift/README.mdand/orplatforms/android/README.md)Releasing a new Swift version?
ShopifyCheckoutKit.podspecplatforms/swift/Sources/ShopifyCheckoutKit/ShopifyCheckoutKit.swiftplatforms/swift/README.md(major version only)Releasing a new Embedded Checkout Protocol version?
embeddedCheckoutProtocolAndroidinplatforms/android/gradle/libs.versions.tomlprotocol/languages/kotlin/embedded-checkout-protocol/api/embedded-checkout-protocol.apiif the public API changedReleasing a new Android version?
checkoutKitAndroidinplatforms/android/gradle/libs.versions.tomlplatforms/android/README.mdTip
See the Contributing documentation for the full release process per platform.