Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[No QA] Upload iOS and Android staging builds to Firebase distribution #55090

Merged
merged 18 commits into from
Jan 10, 2025
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
52 changes: 42 additions & 10 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ jobs:
- name: Setup Node
id: setup-node
uses: ./.github/actions/composite/setupNode
with:
with:
IS_HYBRID_BUILD: 'true'

- name: Run grunt build
Expand Down Expand Up @@ -166,8 +166,9 @@ jobs:
env:
OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
run: |
op document get --output ./upload-key.keystore upload-key.keystore
op document get --output ./android-fastlane-json-key.json android-fastlane-json-key.json
op read op://Mobile-Deploy-CI/firebase.json/firebase.json --force --out-file ./firebase.json
op read op://Mobile-Deploy-CI/upload-key.keystore/upload-key.keystore --force --out-file ./upload-key.keystore
op read op://Mobile-Deploy-CI/android-fastlane-json-key.json/android-fastlane-json-key.json --force --out-file ./android-fastlane-json-key.json
# Copy the keystore to the Android directory for Fullstory
cp ./upload-key.keystore Mobile-Expensify/Android

Expand Down Expand Up @@ -218,7 +219,7 @@ jobs:
else
echo "Skipping the completion of the previous version rollout"
fi

# Submit the new version for review and slow rollout when it's approved
bundle exec fastlane android upload_google_play_production_hybrid_rollout
env:
Expand All @@ -230,6 +231,31 @@ jobs:
env:
BROWSERSTACK: ${{ secrets.BROWSERSTACK }}

- name: Generate APK from AAB
run: |
json=$(curl -s https://api.github.com/repos/google/bundletool/releases/latest)
downloadUrl=$(echo "$json" | jq -r ".assets | .[].browser_download_url")
curl "$downloadUrl" -4 -sL -o 'bundletool.jar'
java -jar bundletool.jar build-apks --bundle=${{ env.aabPath }} --output=Expensify.apks \
--mode=universal \
--ks=upload-key.keystore \
--ks-pass=pass:${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_PASSWORD }} \
--ks-key-alias=${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_ALIAS }} \
--key-pass=pass:${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEY_PASSWORD }}

unzip -p Expensify.apks universal.apk > Expensify.apk

- name: Upload Android APK build artifact
if: ${{ !fromJSON(env.SHOULD_DEPLOY_PRODUCTION) }}
uses: actions/upload-artifact@v4
with:
name: android-hybrid-apk-artifact
path: Expensify.apk

- name: Upload Android build to Firebase distribution
if: ${{ !fromJSON(env.SHOULD_DEPLOY_PRODUCTION) }}
run: bundle exec fastlane android upload_firebase_distribution

- name: Upload Android build artifact
if: ${{ !fromJSON(env.SHOULD_DEPLOY_PRODUCTION) }}
uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -451,7 +477,7 @@ jobs:
- name: Setup Node
id: setup-node
uses: ./.github/actions/composite/setupNode
with:
with:
IS_HYBRID_BUILD: 'true'

- name: Setup Ruby
Expand Down Expand Up @@ -488,9 +514,10 @@ jobs:
env:
OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
run: |
op document get --output ./OldApp_AppStore.mobileprovision OldApp_AppStore
op document get --output ./OldApp_AppStore_Share_Extension.mobileprovision OldApp_AppStore_Share_Extension
op document get --output ./OldApp_AppStore_Notification_Service.mobileprovision OldApp_AppStore_Notification_Service
op read op://Mobile-Deploy-CI/firebase.json/firebase.json --force --out-file ./firebase.json
op read op://Mobile-Deploy-CI/OldApp_AppStore/OldApp_AppStore.mobileprovision --force --out-file ./OldApp_AppStore.mobileprovision
op read op://Mobile-Deploy-CI/OldApp_AppStore_Share_Extension/OldApp_AppStore_Share_Extension.mobileprovision --force --out-file ./OldApp_AppStore_Share_Extension.mobileprovision
op read op://Mobile-Deploy-CI/OldApp_AppStore_Notification_Service/OldApp_AppStore_Notification_Service.mobileprovision --force --out-file ./OldApp_AppStore_Notification_Service.mobileprovision

- name: Decrypt AppStore profile
run: cd ios && gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output NewApp_AppStore.mobileprovision NewApp_AppStore.mobileprovision.gpg
Expand Down Expand Up @@ -537,8 +564,8 @@ jobs:
run: |
# Complete the previous version rollout
bundle exec fastlane ios complete_hybrid_rollout
# Submit the new version for review and phased rollout when it's approved

# Submit the new version for review and phased rollout when it's approved
bundle exec fastlane ios submit_hybrid_for_rollout
env:
VERSION: ${{ steps.getIOSVersion.outputs.IOS_VERSION }}
Expand All @@ -549,6 +576,10 @@ jobs:
env:
BROWSERSTACK: ${{ secrets.BROWSERSTACK }}

- name: Upload iOS build to Firebase distribution
if: ${{ !fromJSON(env.SHOULD_DEPLOY_PRODUCTION) }}
run: bundle exec fastlane ios upload_firebase_distribution

- name: Upload iOS build artifact
if: ${{ !fromJSON(env.SHOULD_DEPLOY_PRODUCTION) }}
uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -756,6 +787,7 @@ jobs:
"./android-sourcemaps-artifact/index.android.bundle.map#android-sourcemap.js.map"
"./android-aab-artifact/app-production-release.aab#android.aab"
"./android-hybrid-build-artifact/Expensify-release.aab#android-hybrid.aab"
"./android-hybrid-apk-artifact/Expensify.apk#android-hybrid.apk"
"./android-hybrid-sourcemap-artifact/index.android.bundle.map#android-hybrid-sourcemap.js.map"
"./desktop-staging-sourcemaps-artifact/desktop-staging-merged-source-map.js.map#desktop-staging-sourcemap.js.map"
"./desktop-staging-build-artifact/NewExpensify.dmg#desktop-staging.dmg"
Expand Down
14 changes: 11 additions & 3 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,9 @@ GEM
apktools (~> 0.7)
aws-sdk-s3 (~> 1)
mime-types (~> 3.3)
fastlane-plugin-firebase_app_distribution (0.10.0)
google-apis-firebaseappdistribution_v1 (~> 0.3.0)
google-apis-firebaseappdistribution_v1alpha (~> 0.2.0)
fastlane-sirp (1.0.0)
sysrandom (~> 1.0)
ffi (1.17.0)
Expand All @@ -184,6 +187,10 @@ GEM
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
rexml
google-apis-firebaseappdistribution_v1 (0.3.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-firebaseappdistribution_v1alpha (0.2.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-iamcredentials_v1 (0.17.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-playcustomapp_v1 (0.13.0)
Expand Down Expand Up @@ -229,7 +236,7 @@ GEM
molinillo (0.8.0)
multi_json (1.15.0)
multipart-post (2.4.1)
nanaimo (0.4.0)
nanaimo (0.3.0)
nap (1.1.0)
naturally (2.2.1)
netrc (0.11.0)
Expand Down Expand Up @@ -274,12 +281,12 @@ GEM
uber (0.1.0)
unicode-display_width (2.6.0)
word_wrap (1.0.0)
xcodeproj (1.27.0)
xcodeproj (1.25.1)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.4.0)
nanaimo (~> 0.3.0)
rexml (>= 3.3.6, < 4.0)
xcpretty (0.3.0)
rouge (~> 2.0.7)
Expand All @@ -298,6 +305,7 @@ DEPENDENCIES
cocoapods (= 1.15.2)
fastlane (~> 2, >= 2.222.0)
fastlane-plugin-aws_s3
fastlane-plugin-firebase_app_distribution
xcodeproj (< 1.26.0)
xcpretty (~> 0)

Expand Down
19 changes: 19 additions & 0 deletions fastlane/Fastfile
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,16 @@ platform :android do
)
end

desc "Upload app to Firebase distribution"
lane :upload_firebase_distribution do
firebase_app_distribution(
app: "1:1008697809946:android:2e48f9ffe8d0b6a2",
service_credentials_file: "./firebase.json",
android_artifact_path: ENV[KEY_GRADLE_AAB_PATH],
android_artifact_type: "AAB"
)
end

desc "Upload HybridApp to Google Play for internal testing"
lane :upload_google_play_internal_hybrid do
# Google is very unreliable, so we retry a few times
Expand Down Expand Up @@ -507,6 +517,15 @@ platform :ios do
sh("echo '{\"ipa_path\": \"#{lane_context[SharedValues::S3_IPA_OUTPUT_PATH]}\",\"html_path\": \"#{lane_context[SharedValues::S3_HTML_OUTPUT_PATH]}\"}' > ../ios_paths.json")
end

desc "Upload app to Firebase distribution"
lane :upload_firebase_distribution do
firebase_app_distribution(
app: "1:1008697809946:ios:3ffad71f664f2886",
service_credentials_file: "./firebase.json",
ipa_path: ENV[KEY_IPA_PATH],
)
end

desc "Upload app to TestFlight"
lane :upload_testflight do
upload_to_testflight(
Expand Down
1 change: 1 addition & 0 deletions fastlane/Pluginfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
# Ensure this file is checked in to source control!

gem 'fastlane-plugin-aws_s3'
gem 'fastlane-plugin-firebase_app_distribution'
Loading