Skip to content

build(e2e): pin the Maestro version in one file - #568

Merged
kieran-osgood-shopify merged 3 commits into
mainfrom
kieran-osgood/maestro-pin-version
Aug 5, 2026
Merged

build(e2e): pin the Maestro version in one file#568
kieran-osgood-shopify merged 3 commits into
mainfrom
kieran-osgood/maestro-pin-version

Conversation

@kieran-osgood-shopify

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

Copy link
Copy Markdown
Contributor

What changes are you making?

We weren't pinning maestro to a specific version locally or in CI
Tests would pass locally but not on browserstack (e.g. openLink / clearState aren't available)

The approach here looks non typical, unfortunately maestro cli isn't distributed via any versioned package manager except homebrew where we can't install specific versions easily

The sanctioned means to install is via this script

export MAESTRO_VERSION={version}; curl -Ls "https://get.maestro.mobile.dev" | bash

I've wrapped this up into dev up and some validation scripts to validate the version doesn't drift

How to test

dev up # if you have maestro installed already, expect a warning highlighting this
maestro --version
# expect 2.4.0

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 4, 2026

Copy link
Copy Markdown
Contributor Author

Local Maestro and the BrowserStack run shared no pin, so they drifted. A local
1.x passes every iOS test against a simulator, because it opens the control link
through `xcrun simctl openurl`. That command accepts a simulator only, so a real
device answers "Invalid device" and the same tests failed on every BrowserStack
run. Nothing in the repository recorded which version to use.

e2e/.maestro-version now holds it. Two guards keep the value usable: BrowserStack
offers 1.39.13, 2.0.7 and 2.4.0 only, and iOS openLink needs at least 2.0.7.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/maestro-pin-version branch from 57b888e to 728a360 Compare August 4, 2026 17:07
@kieran-osgood-shopify
kieran-osgood-shopify marked this pull request as ready for review August 4, 2026 17:08
@kieran-osgood-shopify
kieran-osgood-shopify requested a review from a team as a code owner August 4, 2026 17:08
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

React Native — Coverage Report

Lines Statements Branches Functions
Coverage: 92%
91.85% (327/356) 87.98% (183/208) 100% (86/86)

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

Package Size

Platform Artifact Base Head Delta
React Native npm tarball 103.1 KiB 103.1 KiB 0 B
React Native file breakdown
File Base Head Delta
node_modules/@shopify/checkout-kit-protocol/src/generated/Models.ts 85.4 KiB 85.4 KiB 0 B
node_modules/@shopify/checkout-kit-protocol/src/generated/Models.d.ts 53.0 KiB 53.0 KiB 0 B
ios/ShopifyCheckoutKit.swift 15.0 KiB 15.0 KiB 0 B
ios/AcceleratedCheckoutButtons.swift 14.0 KiB 14.0 KiB 0 B
lib/commonjs/index.js 13.1 KiB 13.1 KiB 0 B
src/components/AcceleratedCheckoutButtons.tsx 12.9 KiB 12.9 KiB 0 B
src/index.ts 12.5 KiB 12.5 KiB 0 B
lib/commonjs/components/AcceleratedCheckoutButtons.js 11.4 KiB 11.4 KiB 0 B
android/src/main/java/com/shopify/reactnative/checkoutkit/ShopifyCheckoutKitModule.java 11.1 KiB 11.1 KiB 0 B
lib/module/index.js 10.4 KiB 10.4 KiB 0 B
lib/commonjs/components/AcceleratedCheckoutButtons.js.map 10.3 KiB 10.3 KiB 0 B
lib/module/components/AcceleratedCheckoutButtons.js 10.2 KiB 10.2 KiB 0 B
node_modules/@shopify/checkout-kit-protocol/src/generated/ProtocolNotifications.ts 9.5 KiB 9.5 KiB 0 B
lib/module/components/AcceleratedCheckoutButtons.js.map 9.1 KiB 9.1 KiB 0 B
src/index.d.ts 8.9 KiB 8.9 KiB 0 B
lib/module/index.js.map 8.2 KiB 8.2 KiB 0 B
src/present-dispatcher.ts 8.0 KiB 8.0 KiB 0 B
lib/commonjs/index.js.map 7.7 KiB 7.7 KiB 0 B
node_modules/@shopify/checkout-kit-protocol/src/generated/ProtocolNotifications.d.ts 7.6 KiB 7.6 KiB 0 B
node_modules/@shopify/checkout-kit-protocol/src/generated/ProtocolRenameMap.ts 7.2 KiB 7.2 KiB 0 B
…and 110 smaller files

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.

@kieran-osgood-shopify
kieran-osgood-shopify marked this pull request as draft August 4, 2026 17:13
@bitrise

bitrise Bot commented Aug 4, 2026

Copy link
Copy Markdown

Install this build

Open Tophat, select your target device, then click Install. Links open on the Mac running Tophat.

SDK Install
React Native Install with Tophat
Swift Install with Tophat
Kotlin Install with Tophat

Checkout Kit E2E results

Status Suite Target Platform OS version tag Device
tests/shared/launch-smoke.yaml react-native ios latest iPhone 15
iOS 27 Beta
tests/shared/launch-smoke.yaml react-native android latest Google Pixel 9
Android 17.0
tests/shared/launch-smoke.yaml kotlin android latest Google Pixel 9
Android 17.0
tests/shared/launch-smoke.yaml swift ios latest iPhone 15
iOS 27 Beta

@kieran-osgood-shopify
kieran-osgood-shopify marked this pull request as ready for review August 5, 2026 08:33
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/maestro-pin-version branch from 728a360 to d0f0c8f Compare August 5, 2026 08:35
Assisted-By: devx/5b4b8d5b-690a-4389-841e-039723ade1da
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/maestro-pin-version branch from d0f0c8f to fd2fad6 Compare August 5, 2026 08:41

@kiftio kiftio left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Just that point r.e. whether we need to somehow pass the pinned version into browserstack

BrowserStack builds the suite with its own Maestro CLI. Without a maestroVersion
parameter it picks a years-old default, which drives iOS openLink through
xcrun simctl openurl and fails on every real device.

The executor now reads e2e/.maestro-version, the same file e2e/scripts/maestro_bin
reads for the local CLI, so the two cannot drift. E2E_MAESTRO_VERSION still
overrides it, because probing a second version must edit no tracked file.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Assisted-By: devx/5b4b8d5b-690a-4389-841e-039723ade1da
kieran-osgood-shopify added a commit that referenced this pull request Aug 5, 2026
Eight BrowserStack iOS builds carrying clearState failed on five different
units. Three builds without it passed, two of them on units that had just
failed. The fault is deterministic, so a retry cannot recover it and the
removal stands on measurement rather than on one run.

Also confirms flake B4. The Android sample gives a guest cart a Canadian
buyer identity, while Swift and React Native take the shop market, so the
Kotlin checkout renders a Canadian form against a United States fixture.

The Maestro version pin moves out of this stack. #568 adds e2e/.maestro-version
and makes the executor read it, so DEFAULT_MAESTRO_VERSION and its tests leave
here rather than sit as a second copy of the same number. The iOS control link
tests fail until #568 merges.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Assisted-By: devx/5b4b8d5b-690a-4389-841e-039723ade1da
@kieran-osgood-shopify
kieran-osgood-shopify merged commit 8c92220 into main Aug 5, 2026
33 checks passed

Copy link
Copy Markdown
Contributor Author

Merge activity

@kieran-osgood-shopify
kieran-osgood-shopify deleted the kieran-osgood/maestro-pin-version branch August 5, 2026 09:32
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.

3 participants