ci: namespace runner trial control plane#29557
Conversation
|
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
Add metamask-ci-linux profile label, a placeholder for the canonical Namespace Linux label (to be replaced before the trial dispatch with runner_provider: namespace), and the common nscloud-ubuntu-* inline labels so Phase 2 can pick any of them without a follow-up config edit. Phase 0 of INFRA-3592. No workflow references these labels yet.
…-4 entry points Adds the choice input current|namespace (default current) to the five Phase 1-4 entry-point workflows. No runs-on or job behavior changes yet — caller forwarding and runs-on ternary land in a follow-up commit. Phase 0 of INFRA-3592.
…eusables Adds the optional string input runner_provider (default current) to the seven Phase 1-4 reusable workflows. Phase 7 reusables (runway-*, nightly, testflight, etc.) are intentionally not modified — they continue to call without forwarding, and the default keeps behavior byte-identical. Phase 0 of INFRA-3592.
Adds with: runner_provider: ${{ inputs.runner_provider }} at every
in-scope caller site (55 sites across 7 caller workflows). Two iOS
build-ios-e2e.yml call sites had no with: block; a new minimal one
is added for them.
Phase 7 caller sites are intentionally not modified — push-eas-update,
nightly-build, runway-*, build-and-upload-to-testflight, build-rc-auto
continue to call without forwarding, the callee defaults to current,
and behavior is byte-identical.
Behavior is unchanged at this point: no runs-on consumes runner_provider
yet — that lands in I.3b.
Phase 0 of INFRA-3592.
Replaces every runs-on line in the in-scope Phase 1-4 workflows with the
additive ternary:
runs-on: ${{ inputs.runner_provider == 'namespace' && 'nscloud-PLACEHOLDER-CONFIRM-LABEL' || <existing> }}
Where <existing> is the previous literal label or expression. Three sites
already had a ${{ ... }} platform ternary (build.yml setup-dependencies,
run-e2e-workflow.yml test-e2e-mobile, setup-node-modules.yml setup); for
those the existing expression is preserved verbatim inside the
runner_provider == 'namespace' || branch.
29 sites across 10 workflows. With runner_provider: current (the default
on every existing trigger), each ternary collapses to its prior literal
and behavior is byte-identical. The 'namespace' branch points at the
PLACEHOLDER label by design — replacement happens before any
runner_provider: namespace dispatch (see .phase0/namespace-artifacts.md).
Phase 0 of INFRA-3592.
…abels Resolves Q1 of INFRA-3592 Phase 0. The four profile labels confirmed live in the metamask Namespace workspace (format: namespace-profile-<name>): - namespace-profile-metamask-ci-linux (Linux CI — Phase 1) - namespace-profile-metamask-android-build (Android — Phase 3) - namespace-profile-metamask-ios-build (iOS build / xl — Phase 4) - namespace-profile-metamask-ios-e2e (iOS E2E test — Phase 4) Each runs-on ternary now points at the profile that matches the existing runner class (ubuntu-latest → ci-linux; macos-latest → ios-build; Cirrus ubuntu-runner-amd64 → android-build; Cirrus macos-runner:tahoe-xl → ios-build; Cirrus macos-runner:tahoe → ios-e2e). The three pre-existing platform-driven dynamic expressions are preserved in both branches of the ternary so Namespace dispatch follows the same iOS/Android branching as the current runner choice. actionlint.yaml drops the speculative nscloud-* and metamask-ci-linux labels (never used) and registers the four canonical labels above. Behavior on runner_provider: current is unchanged (every ternary still collapses to its prior literal/expression). Phase 0 of INFRA-3592.
0188baa to
9046d5c
Compare
|
bugbot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 5a68282. Configure here.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 08caa40. Configure here.
# Conflicts: # .github/workflows/ci.yml
🔍 Smart E2E Test Selection
click to see 🤖 AI reasoning detailsE2E Test Selection:
Since no application code, test logic, or user-facing functionality was changed, there is no need to run any E2E test tags. The CI pipeline itself will validate the workflow syntax via the existing Performance Test Selection: |
|




Description
INFRA-3592 Phase 0 — adds a
runner_providercontrol input (current|namespace, defaultcurrent) to the Phase 1-4 entry-point and reusable workflows, threads forwarding through every in-scope caller, and wraps each in-scoperuns-on:in an additive ternary that selects between the existing runner and the matchingnamespace-profile-*label.No job is migrated. No default is changed. With
runner_provider: current(the default on every existing trigger) every ternary collapses to its prior literal/expression, so behavior is byte-identical tomain. Thenamespacebranch is reachable only via manualworkflow_dispatch.Branch is the long-lived working surface for Phases 1-4; do not merge.
Changelog
CHANGELOG entry: null
Related issues
Fixes: INFRA-3592 (parent epic INFRA-3511)
Manual testing steps
Verification evidence (already executed)
Both scenarios above were dispatched against this branch — results recorded:
runner_provider=namespace(Namespace path)namespace-profile-metamask-*runner; secrets resolved end-to-end (secrets: inheritflowing); job names + required-check contexts unchangedrunner_provider=current(existing runners)currentvia PR-trigger (no input)pull_requestruns on the branch completed successfully on existing runners — proves the byte-identical contract holds without a manual dispatchRequired-check parity verified statically against the 3 contexts on
main's branch protection (check-template-and-add-labels,Check all jobs pass,CLABot) — none renamed in this diff. Detailed cross-reference in INFRA-3592 comment 417866 §5.Screenshots/Recordings
N/A — CI infrastructure PR, no UI surface.
Notes for reviewers
workflow_dispatchinputs →workflow_callinputs → caller forwarding →runs-onternary → placeholder→canonical-label replacement.runway-*,nightly-build,build-and-upload-to-testflight,push-eas-update,build-rc-auto) are intentionally not modified — they continue to call without forwarding, callees default tocurrent.actionlint -config-file .github/actionlint.yamlproduces byte-identical output toorigin/main(84 lines, exit 1 from pre-existing warnings only — no new findings introduced by this PR).mainafter a conflict with #29431 (e2e label rename). Conflict resolution was mechanical — main's renamed jobs (swap-, stake-, money-) hadrunner_provider:re-applied; no semantic decision involved.Pre-merge author checklist
team-dev-ops,size-M)Performance checks (if applicable)
N/A — workflow YAML only, no app code.
Pre-merge reviewer checklist
Note
Medium Risk
Touches many GitHub Actions workflows and
runs-onexpressions, so miswiring could break CI execution or route jobs to the wrong runner. Default behavior remainscurrent, but the newnamespacepath changes execution environment when manually dispatched.Overview
Introduces a new
runner_providerinput (defaultcurrent, optionalnamespace) across in-scope entrypoint and reusable workflows, and forwards it through callers.Updates
runs-oninci.yml,build.yml,setup-node-modules.yml, and E2E build/test workflows to conditionally select between existing GitHub-hosted/Cirrus runners and newnamespace-profile-metamask-*runner labels.Registers the new
namespace-profile-*labels in.github/actionlint.yaml, and addsworkflow_dispatchinputs to enable manual trial runs using the namespace provider.Reviewed by Cursor Bugbot for commit fffcc88. Bugbot is set up for automated code reviews on this repo. Configure here.