Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .android.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@ export MM_FOX_CODE="EXAMPLE_FOX_CODE"
export MM_BRANCH_KEY_TEST=
export MM_BRANCH_KEY_LIVE=
export METAMASK_BUILD_TYPE=
export MM_BRAZE_API_KEY_ANDROID=
export MM_BRAZE_SDK_ENDPOINT="sdk.iad-07.braze.com"
27 changes: 14 additions & 13 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,17 @@ scripts/set-secrets-from-config.js @MetaMask/mobile-adm
# Platform & Snaps Code Fencing File
metro.transform.js @MetaMask/mobile-platform @MetaMask/core-platform

# Ramps Team
app/components/UI/Ramp/ @MetaMask/ramp
app/reducers/fiatOrders/ @MetaMask/ramp
app/core/Engine/controllers/ramps-controller @MetaMask/ramp
app/core/Engine/messengers/ramps-controller-messenger @MetaMask/ramp
app/core/Engine/messengers/ramps-service-messenger @MetaMask/ramp
app/selectors/rampsController @MetaMask/ramp
**/Ramp/** @MetaMask/ramp
**/ramp/** @MetaMask/ramp
**/ramps/** @MetaMask/ramp
# Money Movement Team (formerly Ramps)
app/components/UI/Ramp/ @MetaMask/money-movement
app/reducers/fiatOrders/ @MetaMask/money-movement
app/core/Engine/controllers/ramps-controller @MetaMask/money-movement
app/core/Engine/messengers/ramps-controller-messenger @MetaMask/money-movement
app/core/Engine/messengers/ramps-service-messenger @MetaMask/money-movement
app/selectors/rampsController @MetaMask/money-movement
**/Ramp/** @MetaMask/money-movement
**/ramp/** @MetaMask/money-movement
**/ramps/** @MetaMask/money-movement
**/money-movement/** @MetaMask/money-movement

# Card Team
app/components/UI/Card/ @MetaMask/card
Expand Down Expand Up @@ -287,9 +288,9 @@ tests/flows/ @MetaMask/qa
# Note: Test builds (main-test, flask-test) in build/builds.yml are owned by QA team
# but the file itself is protected by mobile-platform for consistency

# Co-owned by Swaps and Ramps teams
app/util/parseAmount.ts @MetaMask/swaps-engineers @MetaMask/ramp
app/util/parseAmount.test.ts @MetaMask/swaps-engineers @MetaMask/ramp
# Co-owned by Swaps and Money Movement teams
app/util/parseAmount.ts @MetaMask/swaps-engineers @MetaMask/money-movement
app/util/parseAmount.test.ts @MetaMask/swaps-engineers @MetaMask/money-movement

# Snapshots – no code owners assigned
# This allows anyone with write access to approve changes to any *.snap files.
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/push-eas-update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,9 @@ jobs:
QUICKNODE_BSC_URL: ${{ secrets.QUICKNODE_BSC_URL }}
QUICKNODE_SEI_URL: ${{ secrets.QUICKNODE_SEI_URL }}
MM_CHARTING_LIBRARY_URL: ${{ secrets.MM_CHARTING_LIBRARY_URL }}
MM_BRAZE_API_KEY_IOS: ${{ secrets.MM_BRAZE_API_KEY_IOS }}
MM_BRAZE_API_KEY_ANDROID: ${{ secrets.MM_BRAZE_API_KEY_ANDROID }}
MM_BRAZE_SDK_ENDPOINT: ${{ secrets.MM_BRAZE_SDK_ENDPOINT }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand Down
41 changes: 41 additions & 0 deletions .github/workflows/runway-android-production-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
##############################################################################################
#
# Runway Android Production Workflow
#
# Triggered from Runway to either:
# - Push an OTA update to the production channel (when OTA_VERSION is bumped), or
# - Build the production mobile app (when there is no OTA version bump).
#
# When triggering workflow_dispatch, select the correct branch (e.g. main or release).
# Version bump: skipped — run Runway iOS Production first on the same branch for the bump.
#
##############################################################################################
name: Runway Android Production

on:
workflow_dispatch:
inputs:
source_branch:
description: >-
Optional branch, tag, or SHA (Build workflow source_branch).
Empty uses the branch selected in the "Use workflow from" UI.
required: false
type: string

permissions:
contents: write # required by build.yml (update-build-version job)
pull-requests: read
actions: write
id-token: write # required by build.yml

jobs:
runway-production:
uses: ./.github/workflows/runway-ota-build-core.yml
with:
platform: android
source_branch: ${{ inputs.source_branch }}
ota_channel: production
build_name: main-prod
create_production_ota_tag: true
skip_version_bump: true
secrets: inherit
38 changes: 38 additions & 0 deletions .github/workflows/runway-android-rc-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
##############################################################################################
#
# Runway Android RC Workflow
#
# Triggered from Runway to either:
# - Push an OTA update (when OTA_VERSION in app/constants/ota.ts line 9 is bumped), or
# - Build the mobile app (when there is no OTA version bump).
#
# When triggering workflow_dispatch, select the release branch (e.g. release/7.71.0).
# Version bump: skipped here — run Runway iOS RC first on the same branch so it performs the bump.
#
##############################################################################################
name: Runway Android RC

on:
workflow_dispatch:
inputs:
source_branch:
description: >-
Optional branch, tag, or SHA (Build workflow source_branch).
Empty uses the branch selected in the "Use workflow from" UI.
required: false
type: string

permissions:
contents: write # required by build.yml (update-build-version job)
pull-requests: read
actions: write
id-token: write # required by build.yml

jobs:
runway-rc:
uses: ./.github/workflows/runway-ota-build-core.yml
with:
platform: android
source_branch: ${{ inputs.source_branch }}
skip_version_bump: true
secrets: inherit
69 changes: 69 additions & 0 deletions .github/workflows/runway-create-ota-production-tag.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
##############################################################################################
#
# Reusable: create SemVer release tag after production OTA (idempotent).
#
# Callers: runway_*_production_workflow.yml after trigger-ota succeeds.
# Skips if the tag already points at the checked-out commit; fails if the tag exists elsewhere.
#
##############################################################################################
name: Create OTA production release tag

on:
workflow_call:
inputs:
tag_name:
description: 'Annotated tag to create; must match OTA_VERSION (app/constants/ota.ts) / decide ota_version'
required: true
type: string
checkout_ref:
description: 'Branch or ref that received the OTA (same as workflow source)'
required: true
type: string

permissions:
contents: write

jobs:
create-tag:
name: Create release tag (production OTA)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ inputs.checkout_ref }}

- name: Create or skip release tag
env:
TAG_NAME: ${{ inputs.tag_name }}
run: |
set -euo pipefail
if [[ -z "${TAG_NAME}" ]]; then
echo '::error::tag_name is empty; cannot create release tag'
exit 1
fi
if [[ ! "${TAG_NAME}" =~ ^v[^[:space:]]+$ ]]; then
echo "::error::tag_name must be non-empty and start with v (no spaces), got: ${TAG_NAME}"
exit 1
fi

HEAD_SHA=$(git rev-parse HEAD)
git fetch origin --tags --force 2>/dev/null || true

if git rev-parse -q --verify "refs/tags/${TAG_NAME}" >/dev/null 2>&1; then
TAG_SHA=$(git rev-parse "${TAG_NAME}^{commit}")
if [[ "${HEAD_SHA}" == "${TAG_SHA}" ]]; then
echo "Tag \`${TAG_NAME}\` already points at this commit (${HEAD_SHA}); skipping create and push."
exit 0
fi
echo "::error::Tag \`${TAG_NAME}\` already exists at ${TAG_SHA} but HEAD is ${HEAD_SHA}. Refusing to move the tag."
exit 1
fi

git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"

git tag -a "${TAG_NAME}" -m "Production OTA release ${TAG_NAME}"
git push origin "refs/tags/${TAG_NAME}"
echo "Created and pushed tag \`${TAG_NAME}\` at ${HEAD_SHA}"
42 changes: 42 additions & 0 deletions .github/workflows/runway-ios-production-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
##############################################################################################
#
# Runway iOS Production Workflow
#
# Triggered from Runway to either:
# - Push an OTA update to the production channel (when OTA_VERSION is bumped), or
# - Build the production app and upload the IPA to TestFlight (when there is no OTA bump).
#
# When triggering workflow_dispatch, select the correct branch (e.g. main or release).
# Version bump: this workflow bumps; run Android production after on the same branch.
#
##############################################################################################
name: Runway iOS Production

on:
workflow_dispatch:
inputs:
source_branch:
description: >-
Optional branch, tag, or SHA (Build workflow source_branch).
Empty uses the branch selected in the "Use workflow from" UI.
required: false
type: string

permissions:
contents: write # required by build.yml (update-build-version job)
pull-requests: read
actions: write
id-token: write # required by build.yml

jobs:
runway-production:
uses: ./.github/workflows/runway-ota-build-core.yml
with:
platform: ios
source_branch: ${{ inputs.source_branch }}
ota_channel: production
build_name: main-prod
upload_testflight: true
create_production_ota_tag: true
ios_testflight_summary_title: 'Runway iOS Production'
secrets: inherit
38 changes: 38 additions & 0 deletions .github/workflows/runway-ios-rc-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
##############################################################################################
#
# Runway iOS RC Workflow
#
# Triggered from Runway to either:
# - Push an OTA update (when OTA_VERSION in app/constants/ota.ts line 9 is bumped), or
# - Build the mobile app and upload the IPA to TestFlight (when there is no OTA version bump).
#
# When triggering workflow_dispatch, select the release branch (e.g. release/7.71.0).
# Version bump: this workflow bumps the repo build number; run Android RC after so it can skip bump.
#
##############################################################################################
name: Runway iOS RC

on:
workflow_dispatch:
inputs:
source_branch:
description: >-
Optional branch, tag, or SHA (Build workflow source_branch).
Empty uses the branch selected in the "Use workflow from" UI.
required: false
type: string

permissions:
contents: write # required by build.yml (update-build-version job)
pull-requests: read
actions: write
id-token: write # required by build.yml

jobs:
runway-rc:
uses: ./.github/workflows/runway-ota-build-core.yml
with:
platform: ios
source_branch: ${{ inputs.source_branch }}
upload_testflight: true
secrets: inherit
Loading
Loading