Skip to content

Document the ci-ios pipeline and fix the stale Ruby pin in BITRISE.md - #639

Closed
kieran-osgood-shopify wants to merge 1 commit into
graphite-base/639from
kieran-osgood/macos-ci-11-docs
Closed

Document the ci-ios pipeline and fix the stale Ruby pin in BITRISE.md#639
kieran-osgood-shopify wants to merge 1 commit into
graphite-base/639from
kieran-osgood/macos-ci-11-docs

Conversation

@kieran-osgood-shopify

@kieran-osgood-shopify kieran-osgood-shopify commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Part of the macOS CI speed-up. Tracked on shop/issues-checkout-kit#1213, under shop/issues-checkout-kit#1202.

Docs only. No behaviour change, no code path touched.

Change

e2e/BITRISE.md gains a ci-ios section

The file described one pipeline, e2e. There are now two, and the second one is a
merge gate, so its non-obvious properties need writing down. Three subsections:

  • Its trigger carries no changed_files. Unlike e2e, the ci-ios entry has no
    filter at all. A required check that never posts leaves a pull request permanently
    unmergeable, so the pipeline starts on every pull request and the cheap Linux
    ci-ios-plan workflow decides which macOS jobs are worth starting. Same two-layer
    idea as e2e, with the first layer set to "always".
  • The check is self-posted. ci-ios-report runs with should_always_run: workflow.
    Bitrise's own pipeline status cannot tell the two kinds of not-run apart: a job the
    plan did not select is a pass, a job the plan did select but that never finished is
    a failure. A failed ci-ios-plan is a failure, not a green off an empty selection.
  • Changing which files select which job. Edit e2e/config/ios_ci.yml, not the
    workflows. e2e/test/ios_ci_run_plan_test.rb enforces set equality between the
    emitted variables and the run_if expressions.

The ## Caching section gains a paragraph for the two caches phases 8 and 9 add, and
records the trap that cost time in phase 9: restore-cache takes a single key input
holding one key per line in priority order. There is no plural keys input, and
bitrise validate does not catch that mistake — e2e/test/bitrise_config_test.rb does.

e2e/RUNBOOK.md gains "The iOS check failed or never posted"

The first question on a red or missing Checkout Kit iOS check is which of the three
layers broke: the trigger, the plan, or one macOS job. The entry is keyed by symptom, in
the order worth checking:

Symptom Layer Usual cause
Never appears Trigger Branch head older than the trigger_map entry, or still a draft
Red, every job skipped Plan ci-ios-plan failed — expired token or malformed config
Red, names a job One macOS job Failed, or timed out and reported nothing
Green, every job skipped None Expected on a docs, Android or web change

The last row is the one that looks wrong and is not, so it carries the command to
confirm the selection is right rather than empty by accident:

ruby e2e/scripts/ios_ci_run_plan selected-jobs --changed-file <path>

🟡 Stale Ruby version

BITRISE.md claimed ruby: 3.3.6. e2e/bitrise.yml pins 3.4:installed. The doc has
been wrong since that pin changed, and it is the line a reader copies when adding a
workflow. The correction also explains the :installed suffix, which is the part that
matters: it tells each stack to use its own preinstalled 3.4.x rather than compiling one
from source.

Verification

  • shadowenv exec -- ./scripts/test_ruby — green.
  • The runbook command was run before it was written down. Package.swift prints
    swift-package-tests,swift-samples,react-native-build-ios,react-native-test-ios;
    README.md prints nothing. An earlier draft omitted the selected-jobs subcommand
    and errored with Unknown command "--changed-file".

Before you merge

Important

  • I've added tests to support my implementation
  • I have read and agree with the Contribution Guidelines
  • I have read and agree with the Code of Conduct
  • I've updated the relevant platform README (platforms/swift/README.md and/or platforms/android/README.md)

Releasing a new Swift version?
  • I have bumped the version in ShopifyCheckoutKit.podspec
  • I have bumped the version in platforms/swift/Sources/ShopifyCheckoutKit/ShopifyCheckoutKit.swift
  • I have updated the SwiftPM/CocoaPods version snippets in platforms/swift/README.md (major version only)
Releasing a new Embedded Checkout Protocol version?
  • I have bumped embeddedCheckoutProtocolAndroid in platforms/android/gradle/libs.versions.toml
  • I have updated protocol/languages/kotlin/embedded-checkout-protocol/api/embedded-checkout-protocol.api if the public API changed
Releasing a new Android version?
  • I have bumped checkoutKitAndroid in platforms/android/gradle/libs.versions.toml
  • I have updated the Gradle/Maven version snippets in platforms/android/README.md

Tip

See the Contributing documentation for the full release process per platform.

@github-actions github-actions Bot added the #gsd:50662 Rebase Checkout Kit on UCP label Aug 13, 2026
Part of the macOS CI speed-up. Tracked on shop/issues-checkout-kit#1213, under shop/issues-checkout-kit#1202.

Docs only. No behaviour change, no code path touched.

## Change

**`e2e/BITRISE.md` gains a `ci-ios` section**

The file described one pipeline, `e2e`. There are now two, and the second one is a
merge gate, so its non-obvious properties need writing down. Three subsections:

- *Its trigger carries no `changed_files`.* Unlike `e2e`, the `ci-ios` entry has no
  filter at all. A required check that never posts leaves a pull request permanently
  unmergeable, so the pipeline starts on every pull request and the cheap Linux
  `ci-ios-plan` workflow decides which macOS jobs are worth starting. Same two-layer
  idea as `e2e`, with the first layer set to "always".
- *The check is self-posted.* `ci-ios-report` runs with `should_always_run: workflow`.
  Bitrise's own pipeline status cannot tell the two kinds of not-run apart: a job the
  plan did not select is a pass, a job the plan did select but that never finished is
  a failure. A failed `ci-ios-plan` is a failure, not a green off an empty selection.
- *Changing which files select which job.* Edit `e2e/config/ios_ci.yml`, not the
  workflows. `e2e/test/ios_ci_run_plan_test.rb` enforces set equality between the
  emitted variables and the `run_if` expressions.

The `## Caching` section gains a paragraph for the two caches phases 8 and 9 add, and
records the trap that cost time in phase 9: `restore-cache` takes a single `key` input
holding one key per line in priority order. There is no plural `keys` input, and
`bitrise validate` does not catch that mistake — `e2e/test/bitrise_config_test.rb` does.

**`e2e/RUNBOOK.md` gains "The iOS check failed or never posted"**

The first question on a red or missing `Checkout Kit iOS` check is which of the three
layers broke: the trigger, the plan, or one macOS job. The entry is keyed by symptom, in
the order worth checking:

| Symptom | Layer | Usual cause |
| --- | --- | --- |
| Never appears | Trigger | Branch head older than the `trigger_map` entry, or still a draft |
| Red, every job skipped | Plan | `ci-ios-plan` failed — expired token or malformed config |
| Red, names a job | One macOS job | Failed, or timed out and reported nothing |
| Green, every job skipped | None | Expected on a docs, Android or web change |

The last row is the one that looks wrong and is not, so it carries the command to
confirm the selection is right rather than empty by accident:

```bash
ruby e2e/scripts/ios_ci_run_plan selected-jobs --changed-file <path>
```

**🟡 Stale Ruby version**

`BITRISE.md` claimed `ruby: 3.3.6`. `e2e/bitrise.yml` pins `3.4:installed`. The doc has
been wrong since that pin changed, and it is the line a reader copies when adding a
workflow. The correction also explains the `:installed` suffix, which is the part that
matters: it tells each stack to use its own preinstalled 3.4.x rather than compiling one
from source.

## Verification

- `shadowenv exec -- ./scripts/test_ruby` — green.
- The runbook command was run before it was written down. `Package.swift` prints
  `swift-package-tests,swift-samples,react-native-build-ios,react-native-test-ios`;
  `README.md` prints nothing. An earlier draft omitted the `selected-jobs` subcommand
  and errored with `Unknown command "--changed-file"`.
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/macos-ci-9-ccache branch from 1780924 to e8b55e9 Compare August 13, 2026 09:22
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/macos-ci-11-docs branch from 9551275 to 5ffc39b Compare August 13, 2026 09:22
@kieran-osgood-shopify
kieran-osgood-shopify changed the base branch from kieran-osgood/macos-ci-9-ccache to graphite-base/639 August 13, 2026 11:36
@kieran-osgood-shopify
kieran-osgood-shopify deleted the kieran-osgood/macos-ci-11-docs branch August 13, 2026 11:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

#gsd:50662 Rebase Checkout Kit on UCP

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant