Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
b0252d4
chore: upload builds to bucket
ignaciosantise Oct 15, 2025
c83f6c8
chore: added workflow permissions
ignaciosantise Oct 15, 2025
c8b372e
chore: minor fixes
ignaciosantise Oct 15, 2025
4fdb162
chore: added aws metadata
ignaciosantise Oct 15, 2025
229a223
chore: added missing secret param + added commit sha to aws action
ignaciosantise Oct 15, 2025
d5b07fb
chore: changed aws credentials version
ignaciosantise Oct 16, 2025
d5a1bb5
chore: added id-token permission to android wallet action
ignaciosantise Oct 16, 2025
4f43383
chore: added id-token write to remaining actions
ignaciosantise Oct 16, 2025
be6b453
chore: removed wrong param on aws bucket
ignaciosantise Oct 16, 2025
f5eafd4
chore: added slack notification
ignaciosantise Oct 16, 2025
9cf384c
chore: added CI condition when removing fastlane artifacts
ignaciosantise Oct 16, 2025
53cc094
chore: moved store urls to inputs
ignaciosantise Oct 16, 2025
9924e6e
chore: reverted last change + added urls to secrets
ignaciosantise Oct 16, 2025
ea4bb03
chore: remove xcode set from base workflow
ignaciosantise Oct 16, 2025
fbb58d8
chore: correctly access store urls
ignaciosantise Oct 16, 2025
b3f5aa2
chore: dont send slack notification if workflow was cancelled
ignaciosantise Oct 16, 2025
35039d6
chore: slack message ui change
ignaciosantise Oct 16, 2025
0114008
chore: added missing id on build step
ignaciosantise Oct 16, 2025
5ee0a8c
chore: removed project type from slack report
ignaciosantise Oct 16, 2025
b0cd4e7
chore: changed architecture on android wallet
ignaciosantise Oct 17, 2025
4398a7c
chore: added new lane to build for simulators
ignaciosantise Oct 17, 2025
06b8b3f
chore: create ios version for simulators
ignaciosantise Oct 17, 2025
2577ce9
chore: improvements
ignaciosantise Oct 17, 2025
88a7ba2
chore: disable slack notif
ignaciosantise Oct 17, 2025
6c71844
chore: changed archive path
ignaciosantise Oct 17, 2025
6e6930a
chore: enabled slack notif again
ignaciosantise Oct 17, 2025
7c99567
chore: fixed app to ipa script
ignaciosantise Oct 17, 2025
8b8bd14
chore: changed keys and path of gradle cache
ignaciosantise Oct 20, 2025
7fe7d4c
chore: scope aws credentials
ignaciosantise Oct 20, 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
97 changes: 91 additions & 6 deletions .github/workflows/release-android-base.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
name: release-android-base

permissions:
id-token: write
contents: read

on:
Expand All @@ -18,6 +19,10 @@ on:
description: 'Release type of the project (debug/internal/production)'
default: 'internal'
type: string
project-type:
description: 'Type of project (wallet/dapp)'
required: true
type: string
output-path:
description: 'Path to get the APK file'
required: true
Expand Down Expand Up @@ -45,6 +50,13 @@ on:
required: true
google-services-file:
required: false
aws-account-id:
required: true
slack-webhook-url:
required: true
firebase-url:
description: 'Firebase URL of the project'
required: false

jobs:
build:
Expand Down Expand Up @@ -90,16 +102,18 @@ jobs:
echo "org.gradle.caching=true" >> ${{ inputs.root-path }}/android/gradle.properties

- name: Cache Gradle
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
${{ inputs.root-path }}/android/.gradle
key: ${{ runner.os }}-gradle-${{ inputs.name }}-${{ hashFiles(format('{0}/android/**/*.gradle*', inputs.root-path), format('{0}/android/**/gradle-wrapper.properties', inputs.root-path)) }}
restore-keys: |
${{ runner.os }}-gradle-
${{ runner.os }}-gradle-${{ inputs.name }}-

- name: Build APK
id: build
run: |
if [ ${{ inputs.release-type }} = 'internal' ]; then
cd ${{ inputs.root-path }} && yarn install && yarn run android:build:internal
Expand All @@ -113,9 +127,80 @@ jobs:
tools-version: 13.0.1
gcp_sa_key: ${{ secrets.gsa-key }}

- name: Upload APK
- name: Upload APK to Firebase
id: firebase-upload
continue-on-error: false
env:
APP_ID: ${{ secrets.firebase-app-id }}
run: |
firebase appdistribution:distribute ${{ inputs.output-path }} --app $APP_ID --release-notes "${{ inputs.name }} ${{ inputs.release-type }} release" --groups "flutter-team, javascript-team, kotlin-team, unity, rust-team, swift-team, wc-testers"

firebase appdistribution:distribute ${{ inputs.output-path }} \
--app $APP_ID \
--release-notes "${{ inputs.name }} (${{ inputs.project-type }}) - ${{ inputs.release-type }} - Branch: ${{ github.ref_name }}" \
--groups "flutter-team, javascript-team, kotlin-team, unity, rust-team, swift-team, wc-testers"

- name: Configure AWS credentials
id: aws-creds
continue-on-error: true
uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8
with:
role-to-assume: arn:aws:iam::${{ secrets.aws-account-id }}:role/prod-github-actions-react-native-builds
aws-region: eu-central-1
output-env-credentials: false
output-credentials: true

- name: Upload Android build to S3
id: s3-upload
env:
AWS_REGION: eu-central-1
AWS_ACCESS_KEY_ID: ${{ steps.aws-creds.outputs.aws-access-key-id }}
AWS_SECRET_ACCESS_KEY: ${{ steps.aws-creds.outputs.aws-secret-access-key }}
AWS_SESSION_TOKEN: ${{ steps.aws-creds.outputs.aws-session-token }}
continue-on-error: true
run: |
aws s3 cp \
${{ inputs.output-path }} \
s3://walletconnect.react-native-builds.prod/android/${{ inputs.release-type }}/${{ inputs.project-type }}-${{ inputs.release-type }}.apk

- name: Send Slack notification
if: always() && !cancelled()
uses: slackapi/[email protected]
with:
webhook: ${{ secrets.slack-webhook-url }}
webhook-type: incoming-webhook
payload: |
{
"text": "Android Build Report - ${{ inputs.name }} - ${{ inputs.release-type }}",
"blocks": [
{
"type": "header",
"text": { "type": "plain_text", "text": "🤖 Android Build Report" }
},
{
"type": "section",
"fields": [
{ "type": "mrkdwn", "text": "*Project:*\n`${{ inputs.name }}`" },
{ "type": "mrkdwn", "text": "*Release Type:*\n`${{ inputs.release-type }}`" },
{ "type": "mrkdwn", "text": "*Branch:*\n`${{ github.ref_name }}`" }
]
},
{
"type": "section",
"fields": [
{ "type": "mrkdwn", "text": "*Build:*\n`${{ steps.build.outcome == 'success' && '✅ Success' || '❌ Failed' }}`" },
{ "type": "mrkdwn", "text": "*Firebase Upload:*\n`${{ steps.firebase-upload.outcome == 'success' && '✅ Success' || steps.firebase-upload.outcome == 'failure' && '❌ Failed' || '⏭️ Skipped' }}`" },
{ "type": "mrkdwn", "text": "*S3 Upload:*\n`${{ steps.s3-upload.outcome == 'success' && '✅ Success' || steps.s3-upload.outcome == 'failure' && '❌ Failed' || '⏭️ Skipped' }}`" },
{ "type": "mrkdwn", "text": "*Overall Status:*\n`${{ job.status == 'success' && '✅ Success' || '❌ Failed' }}`" }
]
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": { "type": "plain_text", "text": "View Workflow Run" },
"url": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
}${{ steps.build.outcome == 'success' && steps.firebase-upload.outcome == 'success' && secrets.firebase-url != '' && format(',{{"type":"button","text":{{"type":"plain_text","text":"View in Firebase"}},"url":"{0}"}}', secrets.firebase-url) || '' }}
]
}
]
}
5 changes: 5 additions & 0 deletions .github/workflows/release-dapp-android-internal.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
name: release-android-appkit-internal

permissions:
id-token: write
contents: read

on: workflow_dispatch
Expand All @@ -12,6 +13,7 @@ jobs:
name: AppKit React Native
root-path: 'dapps/W3MWagmi'
release-type: 'internal'
project-type: 'dapp'
output-path: 'dapps/W3MWagmi/android/app/build/outputs/apk/internal/app-internal.apk'
secrets:
project-id: ${{ secrets.ENV_PROJECT_ID }}
Expand All @@ -23,3 +25,6 @@ jobs:
gsa-key: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_KEY }}
keystore-name: ${{ secrets.WC_INTERNAL_KEYSTORE_NAME }}
keystore: ${{ secrets.WC_INTERNAL_KEYSTORE }}
aws-account-id: ${{ secrets.AWS_ACCOUNT_ID }}
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
firebase-url: ${{ secrets.FIREBASE_APPKIT_INTERNAL_URL }}
5 changes: 5 additions & 0 deletions .github/workflows/release-dapp-android-production.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
name: release-android-appkit-production

permissions:
id-token: write
contents: read

on: workflow_dispatch
Expand All @@ -12,6 +13,7 @@ jobs:
name: AppKit React Native
root-path: 'dapps/W3MWagmi'
release-type: 'production'
project-type: 'dapp'
output-path: 'dapps/W3MWagmi/android/app/build/outputs/apk/release/app-release.apk'
secrets:
project-id: ${{ secrets.ENV_PROJECT_ID }}
Expand All @@ -23,3 +25,6 @@ jobs:
gsa-key: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_KEY }}
keystore-name: ${{ vars.WC_PROD_KEYSTORE_NAME }}
keystore: ${{ secrets.WC_PROD_KEYSTORE }}
aws-account-id: ${{ secrets.AWS_ACCOUNT_ID }}
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
firebase-url: ${{ secrets.FIREBASE_APPKIT_PROD_URL }}
15 changes: 14 additions & 1 deletion .github/workflows/release-dapp-ios-internal.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
name: release-ios-appkit-internal

permissions:
id-token: write
contents: read

on: workflow_dispatch
on:
workflow_dispatch:
inputs:
build-for-simulator:
description: "Build for simulator instead of TestFlight"
required: false
default: false
type: boolean

jobs:
release-internal:
Expand All @@ -17,6 +25,8 @@ jobs:
scheme-name: 'W3MWagmi Internal'
bundle-id: 'com.walletconnect.web3modal.rnsample.internal'
apple-id: '6479817037'
project-type: 'dapp'
build-for-simulator: ${{ inputs.build-for-simulator }}
secrets:
project-id: ${{ secrets.ENV_PROJECT_ID }}
relay-url: ${{ secrets.ENV_RELAY_URL }}
Expand All @@ -30,4 +40,7 @@ jobs:
match-keychain-password: ${{ secrets.MATCH_KEYCHAIN_PASSWORD }}
match-git-url: ${{ secrets.MATCH_GIT_URL }}
match-ssh-key: ${{ secrets.MATCH_SSH_KEY }}
aws-account-id: ${{ secrets.AWS_ACCOUNT_ID }}
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
testflight-url: ${{ secrets.TESTFLIGHT_APPKIT_INTERNAL_URL }}

15 changes: 14 additions & 1 deletion .github/workflows/release-dapp-ios-production.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
name: release-ios-appkit-production

permissions:
id-token: write
contents: read

on: workflow_dispatch
on:
workflow_dispatch:
inputs:
build-for-simulator:
description: "Build for simulator instead of TestFlight"
required: false
default: false
type: boolean

jobs:
release-production:
Expand All @@ -17,6 +25,8 @@ jobs:
scheme-name: 'W3MWagmi'
bundle-id: 'com.walletconnect.web3modal.rnsample'
apple-id: '6446700301'
project-type: 'dapp'
build-for-simulator: ${{ inputs.build-for-simulator }}
secrets:
project-id: ${{ secrets.ENV_PROJECT_ID }}
relay-url: ${{ secrets.ENV_RELAY_URL }}
Expand All @@ -30,4 +40,7 @@ jobs:
match-keychain-password: ${{ secrets.MATCH_KEYCHAIN_PASSWORD }}
match-git-url: ${{ secrets.MATCH_GIT_URL }}
match-ssh-key: ${{ secrets.MATCH_SSH_KEY }}
aws-account-id: ${{ secrets.AWS_ACCOUNT_ID }}
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
testflight-url: ${{ secrets.TESTFLIGHT_APPKIT_PROD_URL }}

Loading
Loading