Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
a75fa8b
e2e-env-action
jake-perkins Jul 9, 2025
ab67bec
add more deps
jake-perkins Jul 9, 2025
22a7b88
fix cursor bug
jake-perkins Jul 9, 2025
610d928
new action shas
jake-perkins Jul 10, 2025
6ebb0f3
yarn install
jake-perkins Jul 10, 2025
f6e583d
yarn cache
jake-perkins Jul 10, 2025
e4322a4
cache act
jake-perkins Jul 10, 2025
4a81330
fix sim device
jake-perkins Jul 10, 2025
bc2f52f
bundler-cache
jake-perkins Jul 10, 2025
27eed96
try yarn.lock perf fix
jake-perkins Jul 11, 2025
c9e4d1e
cocoapods caching
jake-perkins Jul 11, 2025
f5c4f53
android tuning
jake-perkins Jul 11, 2025
860c7d4
tuning
jake-perkins Jul 11, 2025
4898cab
license-accepts
jake-perkins Jul 11, 2025
8b76ea8
foundry agnostic
jake-perkins Jul 11, 2025
f1008f7
setup
jake-perkins Jul 11, 2025
9884d8a
foundry ubuntu-mac-agnostic
jake-perkins Jul 11, 2025
682cafb
act
jake-perkins Jul 11, 2025
6a1ff90
foundry
jake-perkins Jul 11, 2025
38bd065
foundry android
jake-perkins Jul 11, 2025
2f5e2a6
remover chmod
jake-perkins Jul 11, 2025
a3ea5d4
act
jake-perkins Jul 11, 2025
8f3fdcb
act
jake-perkins Jul 11, 2025
c7d9987
act
jake-perkins Jul 11, 2025
90d1bd2
foundry
jake-perkins Jul 11, 2025
bfd20d8
act
jake-perkins Jul 11, 2025
6d49bac
cfgs
jake-perkins Jul 11, 2025
b2e0ef3
ndk setup
jake-perkins Jul 11, 2025
c35dbc6
ndk
jake-perkins Jul 11, 2025
9e75e06
ndk
jake-perkins Jul 11, 2025
dda3178
act
jake-perkins Jul 11, 2025
03cd24b
licenses
jake-perkins Jul 11, 2025
4b4e46f
android tools
jake-perkins Jul 11, 2025
02ff9a9
e2e
jake-perkins Jul 11, 2025
5695370
act
jake-perkins Jul 11, 2025
f399c35
act
jake-perkins Jul 11, 2025
4d87552
upgrade default xcode-version
jake-perkins Jul 11, 2025
929ddaa
e2e
jake-perkins Jul 11, 2025
d9de05d
lint
jake-perkins Jul 11, 2025
18421e8
android-simulator
jake-perkins Jul 11, 2025
93cf96a
android-act
jake-perkins Jul 11, 2025
db78229
fix emu bug
jake-perkins Jul 11, 2025
37051d0
act
jake-perkins Jul 11, 2025
dade476
act
jake-perkins Jul 11, 2025
8529256
emulator bugs
jake-perkins Jul 11, 2025
3b49d84
android-sim
jake-perkins Jul 11, 2025
a4ca242
act
jake-perkins Jul 11, 2025
b1867a9
act
jake-perkins Jul 11, 2025
860e85f
env
jake-perkins Jul 11, 2025
032380e
update android default abi
jake-perkins Jul 11, 2025
eea10a6
act
jake-perkins Jul 11, 2025
1366275
linting
jake-perkins Jul 12, 2025
1a08796
Merge branch 'main' into e2e-env-actions
jake-perkins Jul 12, 2025
367c013
always lay out simulator cfgs
jake-perkins Jul 15, 2025
d7a349b
E2e ubuntu runners (#87)
makemesteaks Jul 16, 2025
4459e30
E2e env actions keystore (#90)
jake-perkins Jul 18, 2025
4ee8ff1
keystore-integrations
jake-perkins Jul 18, 2025
9e04cea
keystores
jake-perkins Jul 18, 2025
aa884d6
keystore
jake-perkins Jul 18, 2025
a4d8ac3
manage node version
jake-perkins Jul 18, 2025
a3cd1cb
Emulator configs (#88)
makemesteaks Jul 18, 2025
b748908
remove cocoapods caching
jake-perkins Jul 18, 2025
8553525
fmt
jake-perkins Jul 18, 2025
cf5b15f
chore: add conditional to start decoupling some steps
alucardzom Aug 4, 2025
5827d99
chore: test more self hosted conditionals
alucardzom Aug 4, 2025
ac3212f
chore: test path xcode self hosted
alucardzom Aug 4, 2025
f850b3e
targets
jake-perkins Aug 4, 2025
a3886bc
fix target ref
jake-perkins Aug 5, 2025
af1ea7a
chore: comment line
alucardzom Aug 5, 2025
9c67713
chore: add code develop path
alucardzom Aug 5, 2025
87877ab
chore: now fail because can't find xcodebuild
alucardzom Aug 5, 2025
48f952e
chore: add shell removed by cursor
alucardzom Aug 5, 2025
7228375
chore: add conditional and point to the correct develop foler
alucardzom Aug 5, 2025
d942920
chore: rollback to previous state without duplicated block
alucardzom Aug 5, 2025
c9620dc
chore: set true to install ruby 3.1 compatible version
alucardzom Aug 7, 2025
6fe7aea
bundler slef-host flag
jake-perkins Aug 8, 2025
f8b417a
chore: some clean up
alucardzom Aug 8, 2025
11952a4
chore: remove unused blocks
alucardzom Aug 8, 2025
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
114 changes: 114 additions & 0 deletions .github/actions/configure-keystore/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
name: 'Configure Keystore'
description: 'Assume an AWS role and fetch a secret into environment variables'

inputs:
aws-role-to-assume:
description: 'The AWS IAM role to assume'
required: true
aws-region:
description: 'The AWS region where the secret is stored'
required: true
secret-name:
description: 'The name of the secret in AWS Secrets Manager'
required: true
Copy link

Choose a reason for hiding this comment

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

Bug: Redundant Secret Input Causes Confusion

The secret-name input is defined as required but is never used by the action. Instead, the secret name is dynamically determined from the environment input, rendering secret-name redundant and confusing.

Locations (1)
Fix in Cursor Fix in Web

Copy link

Choose a reason for hiding this comment

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

Bug: Unused Required Input Causes Misleading Behavior

The secret-name input is defined as required but is unused. The action derives the actual secret name from the environment input instead, rendering the secret-name input misleading and non-functional.

Locations (1)
Fix in Cursor Fix in Web

Copy link

Choose a reason for hiding this comment

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

Bug: Unused Required Input

The secret-name input is declared as required but is never used. The action determines the secret name dynamically based on the environment input instead.

Locations (1)
Fix in Cursor Fix in Web

Copy link

Choose a reason for hiding this comment

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

Bug: Unused Required Input Causes Workflow Failures

The secret-name input is defined as required but is never used by the action. The secret name is dynamically determined from the environment input in the "Determine signing secret name" step. This makes the secret-name input redundant and misleading, forcing users to provide a value that is ignored and causing workflow failures if omitted due to input validation.

Locations (1)
Fix in Cursor Fix in Web

Copy link

Choose a reason for hiding this comment

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

Bug: Required Input Ignored in Action

The secret-name input is declared as required but is entirely ignored by the action. Instead, the AWS secret name is determined by hardcoded logic based on the environment input, leading to user confusion and a misleading required input.

Locations (1)
Fix in Cursor Fix in Web

Copy link

Choose a reason for hiding this comment

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

Bug: Unused Required Input Causes Misleading Configuration

The secret-name input is defined as required but is never used by the action. Instead, the secret name is dynamically determined from the environment input via a hardcoded mapping. This makes the secret-name input misleading and forces callers to provide an unnecessary value.

Fix in Cursor Fix in Web

platform:
Copy link

Choose a reason for hiding this comment

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

Bug: Redundant Secret Name Input

The secret-name input is declared as required but is never used by the action. Instead, the action dynamically determines the secret name based on the environment input. This makes the secret-name input redundant and misleading, as callers must provide a value that is ignored.

Locations (1)
Fix in Cursor Fix in Web

description: 'The platform for which the keystore is being configured (e.g., ios, android)'
required: true
target:
description: 'The target for which the keystore is being configured (e.g., qa, flask, main)'
required: true

runs:
using: 'composite'
steps:
- name: Determine signing secret name
shell: bash
run: |
case "${{ inputs.target }}" in
qa)
SECRET_NAME="metamask-mobile-qa-signing-certificates"
;;
flask)
SECRET_NAME="metamask-mobile-flask-signing-certificates"
;;
main)
SECRET_NAME="metamask-mobile-main-signing-certificates"
;;
*)
echo "❌ Unknown environment: ${{ inputs.environment }}"
Copy link

Choose a reason for hiding this comment

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

Bug: Incorrect Error Message for Unknown Targets

The error message for unknown targets incorrectly references inputs.environment instead of the defined inputs.target, resulting in an empty value being displayed in the error output.

Fix in Cursor Fix in Web

Copy link

Choose a reason for hiding this comment

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

Bug: Incorrect Error Message Variable Reference

The Determine signing secret name step's error message incorrectly references ${{ inputs.environment }} instead of ${{ inputs.target }}. This causes the error message to display an empty value when an unknown target is provided, rather than the actual invalid input.

Fix in Cursor Fix in Web

Copy link

Choose a reason for hiding this comment

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

Bug: Invalid Target Error Message Bug

The error message for unknown targets incorrectly references inputs.environment instead of inputs.target. This causes an empty value to be displayed in the error message when an invalid target is provided.

Fix in Cursor Fix in Web

Copy link

Choose a reason for hiding this comment

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

Bug: Incorrect Target Reference in Error Message

The error message for an unknown target in the Determine signing secret name step incorrectly references inputs.environment instead of the defined inputs.target. This causes the error message to display an empty value.

Fix in Cursor Fix in Web

exit 1
;;
esac
echo "AWS_SIGNING_CERT_SECRET_NAME=$SECRET_NAME" >> "$GITHUB_ENV"

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ inputs.aws-role-to-assume }}
aws-region: ${{ inputs.aws-region }}

- name: Fetch secret and export as environment variables
shell: bash
run: |
echo "πŸ” Fetching secret from Secrets Manager..."
secret_json=$(aws secretsmanager get-secret-value \
--region "${{ inputs.aws-region }}" \
--secret-id "${AWS_SIGNING_CERT_SECRET_NAME}" \
--query SecretString \
--output text)

keys=$(echo "$secret_json" | jq -r 'keys[]')
for key in $keys; do
value=$(echo "$secret_json" | jq -r --arg k "$key" '.[$k]')
echo "::add-mask::$value"
echo "$key=$(printf '%s' "$value")" >> "$GITHUB_ENV"
echo "βœ… Set secret for key: $key"
done

- name: Configure Android Signing Certificates
if: inputs.platform == 'android'
shell: bash
run: |
echo "πŸ“¦ Configuring Android keystore..."
if [[ -z "$ANDROID_KEYSTORE" ]]; then
echo "⚠️ ANDROID_KEYSTORE is not set. Skipping keystore decoding."
exit 1
fi

# Use provided path if set, fallback to default
KEYSTORE_PATH="${ANDROID_KEYSTORE_PATH:-/tmp/android.keystore}"
echo "$ANDROID_KEYSTORE" | base64 --decode > "$KEYSTORE_PATH"
echo "βœ… Android keystore written to $KEYSTORE_PATH"

- name: Configure iOS Signing Certificates
if: inputs.platform == 'ios'
shell: bash
run: |
echo "πŸ“¦ Configuring iOS code signing..."

# Create paths
CERT_PATH="$RUNNER_TEMP/build_certificate.p12"
PROFILE_PATH="$RUNNER_TEMP/build_pp.mobileprovision"
KEYCHAIN_PATH="$RUNNER_TEMP/app-signing.keychain-db"
CERT_PW="${IOS_SIGNING_KEYSTORE_PASSWORD}"

# Decode base64 files
echo "$IOS_SIGNING_KEYSTORE" | base64 --decode > "$CERT_PATH"
echo "$IOS_SIGNING_PROFILE" | base64 --decode > "$PROFILE_PATH"
echo "βœ… Decoded .p12 and provisioning profile"

# Create and unlock keychain
security create-keychain -p "$CERT_PW" "$KEYCHAIN_PATH"
security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH"
security unlock-keychain -p "$CERT_PW" "$KEYCHAIN_PATH"

# Import cert
security import "$CERT_PATH" -P "$CERT_PW" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH" > /dev/null
security set-key-partition-list -S apple-tool:,apple: -k "$CERT_PW" "$KEYCHAIN_PATH" > /dev/null
security find-identity -p codesigning "$KEYCHAIN_PATH"


# Install provisioning profile
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp "$PROFILE_PATH" ~/Library/MobileDevice/Provisioning\ Profiles/
echo "βœ… Installed provisioning profile"
Loading
Loading