Skip to content

Commit fef8883

Browse files
Qbandevclaude
andcommitted
feat(ci): POC Bitrise iOS runners for E2E benchmarking [INFRA-3527]
Adds temporary optional workflow to benchmark iOS E2E builds and tests on Bitrise-provided GitHub Actions self-hosted runners. Changes: - New temp-bitrise-ios-e2e.yml: workflow_dispatch-only benchmarking workflow - run-e2e-workflow.yml: use_bitrise_runner boolean input, conditional runner routing, Vagrant path fix (guarded by boolean + platform check) - run-e2e-smoke-tests-ios.yml: threaded use_bitrise_runner through all 13 jobs Security: workflow_dispatch only trigger, hardcoded runner group name, configure-keystores: false, sanitized diagnostics. Existing CI pipeline behavior unchanged — all defaults preserved. INFRA-3527 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 25febb0 commit fef8883

3 files changed

Lines changed: 404 additions & 1 deletion

File tree

.github/workflows/run-e2e-smoke-tests-ios.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ on:
1313
required: false
1414
type: string
1515
default: ''
16+
use_bitrise_runner:
17+
description: 'Route iOS E2E jobs to Bitrise self-hosted runner group.'
18+
required: false
19+
type: boolean
20+
default: false
1621

1722
permissions:
1823
contents: read
@@ -35,6 +40,7 @@ jobs:
3540
changed_files: ${{ inputs.changed_files }}
3641
build_type: 'main'
3742
metamask_environment: 'qa'
43+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
3844
secrets: inherit
3945

4046
trade-ios-smoke:
@@ -53,6 +59,7 @@ jobs:
5359
changed_files: ${{ inputs.changed_files }}
5460
build_type: 'main'
5561
metamask_environment: 'qa'
62+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
5663
secrets: inherit
5764

5865
perps-ios-smoke:
@@ -71,6 +78,7 @@ jobs:
7178
changed_files: ${{ inputs.changed_files }}
7279
build_type: 'main'
7380
metamask_environment: 'qa'
81+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
7482
secrets: inherit
7583

7684
wallet-platform-ios-smoke:
@@ -89,6 +97,7 @@ jobs:
8997
changed_files: ${{ inputs.changed_files }}
9098
build_type: 'main'
9199
metamask_environment: 'qa'
100+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
92101
secrets: inherit
93102

94103
identity-ios-smoke:
@@ -107,6 +116,7 @@ jobs:
107116
changed_files: ${{ inputs.changed_files }}
108117
build_type: 'main'
109118
metamask_environment: 'qa'
119+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
110120
secrets: inherit
111121

112122
accounts-ios-smoke:
@@ -125,6 +135,7 @@ jobs:
125135
changed_files: ${{ inputs.changed_files }}
126136
build_type: 'main'
127137
metamask_environment: 'qa'
138+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
128139
secrets: inherit
129140

130141
network-abstraction-ios-smoke:
@@ -143,6 +154,7 @@ jobs:
143154
changed_files: ${{ inputs.changed_files }}
144155
build_type: 'main'
145156
metamask_environment: 'qa'
157+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
146158
secrets: inherit
147159

148160
network-expansion-ios-smoke:
@@ -161,6 +173,7 @@ jobs:
161173
changed_files: ${{ inputs.changed_files }}
162174
build_type: 'main'
163175
metamask_environment: 'qa'
176+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
164177
secrets: inherit
165178

166179
prediction-market-ios-smoke:
@@ -179,6 +192,7 @@ jobs:
179192
changed_files: ${{ inputs.changed_files }}
180193
build_type: 'main'
181194
metamask_environment: 'qa'
195+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
182196
secrets: inherit
183197

184198
card-ios-smoke:
@@ -197,6 +211,7 @@ jobs:
197211
changed_files: ${{ inputs.changed_files }}
198212
build_type: 'main'
199213
metamask_environment: 'qa'
214+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
200215
secrets: inherit
201216

202217
ramps-ios-smoke:
@@ -215,6 +230,7 @@ jobs:
215230
changed_files: ${{ inputs.changed_files }}
216231
build_type: 'main'
217232
metamask_environment: 'qa'
233+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
218234
secrets: inherit
219235

220236
multichain-api-ios-smoke:
@@ -233,6 +249,7 @@ jobs:
233249
changed_files: ${{ inputs.changed_files }}
234250
build_type: 'main'
235251
metamask_environment: 'qa'
252+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
236253
secrets: inherit
237254

238255
seedless-onboarding-ios-smoke:
@@ -251,6 +268,7 @@ jobs:
251268
changed_files: ${{ inputs.changed_files }}
252269
build_type: 'main'
253270
metamask_environment: 'qa'
271+
use_bitrise_runner: ${{ inputs.use_bitrise_runner }}
254272
secrets: inherit
255273

256274
report-ios-smoke-tests:

.github/workflows/run-e2e-workflow.yml

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,16 @@ on:
5353
required: false
5454
type: string
5555
default: 'main-'
56+
use_bitrise_runner:
57+
description: 'Route iOS E2E jobs to Bitrise self-hosted runner group.'
58+
required: false
59+
type: boolean
60+
default: false
5661

5762
jobs:
5863
test-e2e-mobile:
5964
name: ${{ inputs.test-suite-name }}
60-
runs-on: ${{ inputs.platform == 'ios' && 'ghcr.io/cirruslabs/macos-runner:tahoe' || 'ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04-lg' }}
65+
runs-on: ${{ inputs.platform == 'ios' && (inputs.use_bitrise_runner && fromJSON('{"group":"temp-bitrise-runners"}') || 'ghcr.io/cirruslabs/macos-runner:tahoe') || 'ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04-lg' }}
6166
outputs:
6267
apk-target-path: ${{ steps.determine-target-paths.outputs.apk-target-path }}
6368
test-apk-target-path: ${{ steps.determine-target-paths.outputs.test-apk-target-path }}
@@ -102,6 +107,36 @@ jobs:
102107
- name: Checkout
103108
uses: actions/checkout@v4
104109

110+
# TEMPORARY: Bitrise runners use Vagrant (user=vagrant, HOME=/Users/vagrant).
111+
# GitHub Actions tools hardcode /Users/runner paths. Create symlink to fix.
112+
# TEMPORARY: Bitrise runners use Vagrant (user=vagrant, HOME=/Users/vagrant).
113+
# GitHub Actions tools hardcode /Users/runner paths. Create symlink to fix.
114+
- name: Fix Vagrant environment paths (Bitrise runners)
115+
if: ${{ inputs.use_bitrise_runner && inputs.platform == 'ios' }}
116+
run: |
117+
if [ -L /Users/runner ]; then
118+
current_target="$(readlink /Users/runner)"
119+
if [ "$current_target" = "/Users/vagrant" ]; then
120+
echo "Symlink already correct: /Users/runner → /Users/vagrant"
121+
else
122+
echo "Replacing incorrect symlink /Users/runner → $current_target"
123+
sudo rm /Users/runner
124+
sudo ln -s /Users/vagrant /Users/runner
125+
echo "Recreated symlink: /Users/runner → /Users/vagrant"
126+
fi
127+
elif [ -e /Users/runner ]; then
128+
echo "Error: /Users/runner exists but is not a symlink"
129+
ls -ld /Users/runner
130+
exit 1
131+
else
132+
sudo ln -s /Users/vagrant /Users/runner
133+
echo "Created symlink /Users/runner → /Users/vagrant"
134+
fi
135+
mkdir -p "$HOME/hostedtoolcache" "$HOME/tmp"
136+
echo "RUNNER_TOOL_CACHE=$HOME/hostedtoolcache" >> "$GITHUB_ENV"
137+
echo "RUNNER_TEMP=$HOME/tmp" >> "$GITHUB_ENV"
138+
shell: bash
139+
105140
- name: Set up E2E environment
106141
timeout-minutes: 15
107142
uses: ./.github/actions/setup-e2e-env

0 commit comments

Comments
 (0)