Skip to content

Commit d28ce2e

Browse files
authored
ci: remove legacy Runway per-platform workflows (phase 2 cleanup) (#29298)
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until this PR meets the canonical Definition of Ready For Review in `docs/readme/ready-for-review.md`. In short: the template must be materially complete (not just section titles present), all status checks must be currently passing, and the only expected follow-up commits must be reviewer-driven. --> ## **Description** Phase 2 cleanup of the Runway workflow split. Removes the legacy per-platform Runway entry workflows now that Runway has been flipped to dispatch the combined OTA-only and build-only workflows introduced in phase 1, and `release/7.73.x` / `release/7.74.x` are no longer actively maintained. ### Context Phase 1 (previous PR) added 5 new workflow files without touching anything existing: - `runway-ota-resolve-context.yml` - `runway-production-builds.yml` - `runway-rc-builds.yml` - `runway-ota-production.yml` - `runway-ota-rc.yml` That PR intentionally deferred the cleanup so Runway could keep dispatching the old per-platform workflow names against `release/7.73.x` and `release/7.74.x` (which cannot receive cherry-picks). ### What this PR does - **Deletes** the 4 legacy per-platform Runway entry workflows: - `runway-ios-production-workflow.yml` - `runway-android-production-workflow.yml` - `runway-ios-rc-workflow.yml` - `runway-android-rc-workflow.yml` - **Renames** `runway-ota-build-core.yml` → `auto-rc-ota-build-core.yml` to reflect that its only remaining caller is `build-rc-auto.yml` (auto-RC on push), not Runway. - **Refactors** the renamed core to call the reusable `runway-ota-resolve-context.yml` from phase 1 instead of keeping the `decide` + `resolve-pr` logic inline. Behaviour is identical; the logic is now shared with the OTA-only Runway workflows. - **Updates** `build-rc-auto.yml` `uses:` paths (two call sites) and the header comment to point at the renamed core. ### What this PR does NOT change - No behaviour change for `build-rc-auto.yml` — same OTA-vs-build auto-detection, same parallel platform dispatch, same Slack notification. - No behaviour change for the 4 phase-1 Runway workflows. ### Precondition for merge Before merging this PR, verify that: 1. Runway has been reconfigured to dispatch the 4 new workflow names (`runway-production-builds.yml`, `runway-rc-builds.yml`, `runway-ota-production.yml`, `runway-ota-rc.yml`). 2. `release/7.73.x` and `release/7.74.x` are no longer being hotfixed via Runway dispatch (they can still receive direct pushes — `build-rc-auto.yml` on those branches uses the files present on that ref, which still include the legacy core until those branches are fully retired). ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** <!-- Every checklist item must be consciously assessed before marking this PR as "Ready for review". A checked box means you deliberately considered that responsibility, not that you literally performed every action listed. Unchecked boxes are ambiguous: they are not an implicit "N/A" and they are not a silent "skip". See `docs/readme/ready-for-review.md` for the full checklist semantics. --> - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. #### Performance checks (if applicable) - [ ] I've tested on Android - Ideally on a mid-range device; emulator is acceptable - [ ] I've tested with a power user scenario - Use these [power-user SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93) to import wallets with many accounts and tokens - [ ] I've instrumented key operations with Sentry traces for production performance metrics - See [`trace()`](/app/util/trace.ts) for usage and [`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274) for an example For performance guidelines and tooling, see the [Performance Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers). ## **Pre-merge reviewer checklist** <!-- Reviewer checklist items follow the same semantics as the author checklist: an unchecked box is ambiguous, a checked box means the reviewer consciously assessed that responsibility. See `docs/readme/ready-for-review.md`. --> - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Moderate risk because it changes GitHub Actions workflow entry points and reusable workflow wiring for OTA-vs-build detection, which could break release/RC automation if references or outputs diverge. > > **Overview** > Refactors the auto-RC release flow by replacing the legacy reusable `runway-ota-build-core.yml` with a new `auto-rc-ota-build-core.yml` that delegates OTA bump/PR resolution to `runway-ota-resolve-context.yml`, while keeping the same OTA-vs-build branching behavior. > > Cleans up CI by deleting the four per-platform Runway `workflow_dispatch` entry workflows (iOS/Android, RC/production) and updating `build-rc-auto.yml` to call the renamed core workflow for both iOS and Android RC triggers. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 54fc5ee. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 parent e144b40 commit d28ce2e

7 files changed

Lines changed: 148 additions & 409 deletions
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
##############################################################################################
2+
#
3+
# Auto RC OTA / build core (reusable)
4+
#
5+
# Shared logic for the Auto RC flow (build-rc-auto.yml): detect an OTA_VERSION bump and either
6+
# dispatch push-eas-update.yml, or fall through to build.yml.
7+
#
8+
# Runway's manual entry workflows no longer use this file — they call the dedicated OTA-only or
9+
# build-only workflows (runway-ota-*.yml, runway-*-builds.yml) directly. Kept here to preserve
10+
# automatic OTA-vs-build detection on every push to a release branch.
11+
#
12+
##############################################################################################
13+
name: Auto RC OTA Build Core
14+
15+
on:
16+
workflow_call:
17+
inputs:
18+
platform:
19+
description: 'Target platform passed to push-eas-update and build.yml (android or ios)'
20+
required: true
21+
type: string
22+
source_branch:
23+
description: >-
24+
Optional branch, tag, or SHA (Build workflow source_branch).
25+
Empty uses the branch selected in the caller workflow_dispatch "Use workflow from" UI.
26+
required: false
27+
type: string
28+
default: ''
29+
ota_channel:
30+
description: 'push-eas-update channel input (e.g. rc, production)'
31+
required: false
32+
type: string
33+
default: rc
34+
build_name:
35+
description: 'build.yml build_name (e.g. main-rc, main-prod)'
36+
required: false
37+
type: string
38+
default: main-rc
39+
create_production_ota_tag:
40+
description: 'If true, create OTA release tag after production trigger-ota (callers: *production* only)'
41+
required: false
42+
type: boolean
43+
default: false
44+
environment:
45+
description: 'Build environment / track passed to upload-to-testflight (e.g. rc, prod)'
46+
required: false
47+
type: string
48+
default: 'rc'
49+
skip_version_bump:
50+
description: >-
51+
If true, build.yml skips update-latest-build-version. Auto-RC callers set true since the
52+
bump is performed once upstream.
53+
required: false
54+
type: boolean
55+
default: false
56+
outputs:
57+
semantic_version:
58+
description: 'package.json version at the built commit (empty when OTA path taken)'
59+
value: ${{ jobs.trigger-build.outputs.semantic_version }}
60+
ios_version_code:
61+
description: 'iOS CURRENT_PROJECT_VERSION at the built commit (empty when OTA path taken)'
62+
value: ${{ jobs.trigger-build.outputs.ios_version_code }}
63+
android_version_code:
64+
description: 'Android versionCode at the built commit (empty when OTA path taken)'
65+
value: ${{ jobs.trigger-build.outputs.android_version_code }}
66+
67+
permissions:
68+
contents: write # required by build.yml (update-build-version job)
69+
pull-requests: read
70+
actions: write
71+
id-token: write # required by build.yml
72+
73+
jobs:
74+
resolve-context:
75+
name: Resolve OTA context
76+
uses: ./.github/workflows/runway-ota-resolve-context.yml
77+
with:
78+
source_branch: ${{ inputs.source_branch }}
79+
secrets: inherit
80+
81+
validate-ota-pr:
82+
name: Validate PR for OTA
83+
needs: resolve-context
84+
if: needs.resolve-context.outputs.ota_bump == 'true'
85+
runs-on: ubuntu-latest
86+
steps:
87+
- name: Validate PR number
88+
run: |
89+
if [[ -z "${{ needs.resolve-context.outputs.pr_number }}" ]]; then
90+
echo "::error::No PR found for this branch. OTA update requires a PR number."
91+
echo "::error::If you ran the workflow manually (workflow_dispatch), select your release branch in the 'Use workflow from' dropdown (e.g. release/7.71.0), not main."
92+
exit 1
93+
fi
94+
echo "Using PR #${{ needs.resolve-context.outputs.pr_number }}"
95+
96+
trigger-ota:
97+
name: Trigger OTA update
98+
needs: [resolve-context, validate-ota-pr]
99+
if: needs.resolve-context.outputs.ota_bump == 'true'
100+
uses: ./.github/workflows/push-eas-update.yml
101+
with:
102+
pr_number: ${{ needs.resolve-context.outputs.pr_number }}
103+
base_branch: ${{ needs.resolve-context.outputs.base_ref }}
104+
message: ${{ needs.resolve-context.outputs.ota_version }}
105+
channel: ${{ inputs.ota_channel }}
106+
platform: ${{ inputs.platform }}
107+
secrets: inherit
108+
109+
trigger-build:
110+
name: Trigger build mobile app
111+
needs: resolve-context
112+
if: needs.resolve-context.outputs.ota_bump != 'true'
113+
uses: ./.github/workflows/build.yml
114+
with:
115+
build_name: ${{ inputs.build_name }}
116+
platform: ${{ inputs.platform }}
117+
skip_version_bump: ${{ inputs.skip_version_bump }}
118+
source_branch: ${{ inputs.source_branch || github.ref_name }}
119+
upload_to_sentry: true
120+
secrets: inherit
121+
122+
create-ota-production-tag:
123+
name: Create OTA production release tag
124+
needs: [resolve-context, trigger-ota]
125+
if: ${{ inputs.create_production_ota_tag == true }}
126+
uses: ./.github/workflows/runway-create-ota-production-tag.yml
127+
with:
128+
tag_name: ${{ needs.resolve-context.outputs.ota_version }}
129+
checkout_ref: ${{ inputs.source_branch || github.ref_name }}
130+
secrets: inherit
131+
132+
upload-ios-testflight:
133+
name: Upload iOS to TestFlight
134+
needs: [trigger-build]
135+
if: ${{ inputs.platform == 'ios' }}
136+
uses: ./.github/workflows/upload-to-testflight.yml
137+
with:
138+
environment: ${{ inputs.environment }}
139+
source_branch: ${{ inputs.source_branch || github.ref_name }}
140+
build_branch: ${{ inputs.source_branch || github.ref_name }}
141+
build_name: ${{ inputs.build_name }}
142+
build_commit_sha: ${{ needs.trigger-build.outputs.built_commit_sha }}
143+
build_version: ${{ needs.trigger-build.outputs.semantic_version }}
144+
build_number: ${{ needs.trigger-build.outputs.ios_version_code }}
145+
secrets: inherit

.github/workflows/build-rc-auto.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
# Bitrise "Rolling builds" / "Abort running builds" for one branch + one workflow).
99
#
1010
# Version bump runs once (update-latest-build-version.yml), then iOS and Android
11-
# builds are triggered in parallel via runway-ota-build-core.yml (skip_version_bump).
11+
# builds are triggered in parallel via auto-rc-ota-build-core.yml (skip_version_bump).
1212
#
1313
# The RC build comment includes an AI-generated test plan (inline with collapsible sections).
1414
#
@@ -104,7 +104,7 @@ jobs:
104104

105105
trigger-ios-rc-build:
106106
name: Trigger iOS RC Build
107-
uses: ./.github/workflows/runway-ota-build-core.yml
107+
uses: ./.github/workflows/auto-rc-ota-build-core.yml
108108
needs:
109109
- validate-and-find-pr
110110
- update_rc_build_version
@@ -117,7 +117,7 @@ jobs:
117117

118118
trigger-android-rc-build:
119119
name: Trigger Android RC Build
120-
uses: ./.github/workflows/runway-ota-build-core.yml
120+
uses: ./.github/workflows/auto-rc-ota-build-core.yml
121121
needs:
122122
- validate-and-find-pr
123123
- update_rc_build_version

.github/workflows/runway-android-production-workflow.yml

Lines changed: 0 additions & 41 deletions
This file was deleted.

.github/workflows/runway-android-rc-workflow.yml

Lines changed: 0 additions & 50 deletions
This file was deleted.

.github/workflows/runway-ios-production-workflow.yml

Lines changed: 0 additions & 41 deletions
This file was deleted.

.github/workflows/runway-ios-rc-workflow.yml

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
 (0)