@@ -298,7 +298,7 @@ jobs:
298298 env :
299299 PULL_REQUEST_NUMBER : ${{ needs.prep.outputs.APP_PR_NUMBER }}
300300 outputs :
301- ROCK_ANDROID_ADHOC_INDEX_URL : ${{ steps.set-artifact-url .outputs.ARTIFACT_URL }}
301+ S3_APK_PATH : ${{ steps.exportAndroidS3Path .outputs.S3_APK_PATH }}
302302 steps :
303303 - name : Checkout
304304 # v4
@@ -336,6 +336,23 @@ jobs:
336336 sed -i 's/ENVIRONMENT=staging/ENVIRONMENT=adhoc/' .env.adhoc
337337 echo "APP_PULL_REQUEST_NUMBER=$PULL_REQUEST_NUMBER" >> .env.adhoc
338338
339+ - name : Get Java version
340+ id : get-java-version
341+ uses : ./.github/actions/composite/getJavaVersion
342+
343+ - name : Setup Java
344+ # v4
345+ uses : actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12
346+ with :
347+ distribution : oracle
348+ java-version : ${{ steps.get-java-version.outputs.version }}
349+
350+ - name : Setup Ruby
351+ # v1.229.0
352+ uses : ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252
353+ with :
354+ bundler-cache : true
355+
339356 - name : Setup 1Password CLI and certificates
340357 uses : Expensify/GitHub-Actions/setup-certificate-1p@main
341358 with :
@@ -364,6 +381,17 @@ jobs:
364381 ANDROID_UPLOAD_KEYSTORE_ALIAS : op://${{ vars.OP_VAULT }}/Repository-Secrets/ANDROID_UPLOAD_KEYSTORE_ALIAS
365382 ANDROID_UPLOAD_KEY_PASSWORD : op://${{ vars.OP_VAULT }}/Repository-Secrets/ANDROID_UPLOAD_KEY_PASSWORD
366383
384+ - name : Build Android app
385+ id : build
386+ env :
387+ ANDROID_UPLOAD_KEYSTORE_PASSWORD : ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_PASSWORD }}
388+ ANDROID_UPLOAD_KEYSTORE_ALIAS : ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_ALIAS }}
389+ ANDROID_UPLOAD_KEY_PASSWORD : ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEY_PASSWORD }}
390+ GITHUB_ACTOR : ${{ github.actor }}
391+ GITHUB_TOKEN : ${{ github.token }}
392+ SENTRY_AUTH_TOKEN : ${{ secrets.SENTRY_AUTH_TOKEN }}
393+ run : bundle exec fastlane android build_adhoc_hybrid
394+
367395 - name : Configure AWS Credentials
368396 # v4
369397 uses : aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722
@@ -372,31 +400,19 @@ jobs:
372400 aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
373401 aws-region : us-east-1
374402
375- - name : Rock Remote Build - Android
376- id : rock-remote-build-android
377- uses : callstackincubator/android@0bbc1b7c2e1a8be1ecb4d6c744c211869823fd65
403+ - name : Upload Android AdHoc build to S3
404+ run : bundle exec fastlane android upload_s3
378405 env :
379- GITHUB_TOKEN : ${{ github.token }}
380- SENTRY_AUTH_TOKEN : ${{ secrets.SENTRY_AUTH_TOKEN }}
381- IS_HYBRID_APP : true
382- with :
383- variant : ' Adhoc'
384- sign : true
385- re-sign : true
386- ad-hoc : true
387- keystore-file : ' ./upload-key.keystore'
388- keystore-store-file : ' upload-key.keystore'
389- keystore-store-password : ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_PASSWORD }}
390- keystore-key-alias : ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_ALIAS }}
391- keystore-key-password : ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEY_PASSWORD }}
392- # Specify the path (relative to the Android source directory) where the keystore should be placed.
393- keystore-path : ' ../tools/buildtools/upload-key.keystore'
394- comment-bot : false
395- rock-build-extra-params : ' --extra-params -PreactNativeArchitectures=arm64-v8a,x86_64'
396-
397- - name : Set artifact URL output
398- id : set-artifact-url
399- run : echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT"
406+ S3_ACCESS_KEY : ${{ secrets.AWS_ACCESS_KEY_ID }}
407+ S3_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
408+ S3_BUCKET : ad-hoc-expensify-cash
409+ S3_REGION : us-east-1
410+
411+ - name : Export S3 path
412+ id : exportAndroidS3Path
413+ run : |
414+ # $s3APKPath is set from within the Fastfile, android upload_s3 lane
415+ echo "S3_APK_PATH=$s3APKPath" >> "$GITHUB_OUTPUT"
400416
401417 iosHybrid :
402418 name : Build and deploy iOS for testing
@@ -407,7 +423,7 @@ jobs:
407423 PULL_REQUEST_NUMBER : ${{ needs.prep.outputs.APP_PR_NUMBER }}
408424 runs-on : macos-15-xlarge
409425 outputs :
410- ROCK_IOS_ADHOC_INDEX_URL : ${{ steps.set-artifact-url .outputs.ARTIFACT_URL }}
426+ IOS_PATH : ${{ steps.export-ios-path .outputs.IOS_PATH }}
411427 steps :
412428 - name : Checkout
413429 # v4
@@ -440,6 +456,35 @@ jobs:
440456 sed -i '' 's/ENVIRONMENT=staging/ENVIRONMENT=adhoc/' .env.adhoc
441457 echo "PULL_REQUEST_NUMBER=$PULL_REQUEST_NUMBER" >> .env.adhoc
442458
459+ - name : Setup Ruby
460+ # v1.229.0
461+ uses : ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252
462+ with :
463+ bundler-cache : true
464+
465+ - name : Install New Expensify Gems
466+ run : bundle install
467+
468+ - name : Cache Pod dependencies
469+ # v4
470+ uses : actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57
471+ id : pods-cache
472+ with :
473+ path : Mobile-Expensify/iOS/Pods
474+ key : ${{ runner.os }}-pods-cache-${{ hashFiles('Mobile-Expensify/iOS/Podfile.lock', 'firebase.json') }}
475+
476+ - name : Compare Podfile.lock and Manifest.lock
477+ id : compare-podfile-and-manifest
478+ run : echo "IS_PODFILE_SAME_AS_MANIFEST=${{ hashFiles('Mobile-Expensify/iOS/Podfile.lock') == hashFiles('Mobile-Expensify/iOS/Manifest.lock') }}" >> "$GITHUB_OUTPUT"
479+
480+ - name : Install cocoapods
481+ uses : nick-fields/retry@3f757583fb1b1f940bc8ef4bf4734c8dc02a5847
482+ if : steps.pods-cache.outputs.cache-hit != 'true' || steps.compare-podfile-and-manifest.outputs.IS_PODFILE_SAME_AS_MANIFEST != 'true' || steps.setup-node.outputs.cache-hit != 'true'
483+ with :
484+ timeout_minutes : 10
485+ max_attempts : 5
486+ command : npm run pod-install
487+
443488 - name : Setup 1Password CLI and certificates
444489 uses : Expensify/GitHub-Actions/setup-certificate-1p@main
445490 with :
@@ -455,27 +500,10 @@ jobs:
455500 op read "op://${{ vars.OP_VAULT }}/OldApp_AdHoc_Notification_Service/OldApp_AdHoc_Notification_Service.mobileprovision" --force --out-file ./OldApp_AdHoc_Notification_Service.mobileprovision
456501 op read "op://${{ vars.OP_VAULT }}/New Expensify Distribution Certificate/Certificates.p12" --force --out-file ./Certificates.p12
457502
458- - name : Create ExportOptions.plist
459- run : |
460- cat > Mobile-Expensify/iOS/ExportOptions.plist << 'EOF'
461- <?xml version="1.0" encoding="UTF-8"?>
462- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
463- <plist version="1.0">
464- <dict>
465- <key>method</key>
466- <string>ad-hoc</string>
467- <key>provisioningProfiles</key>
468- <dict>
469- <key>com.expensify.expensifylite.adhoc</key>
470- <string>(OldApp) AdHoc</string>
471- <key>com.expensify.expensifylite.adhoc.SmartScanExtension</key>
472- <string>(OldApp) AdHoc: Share Extension</string>
473- <key>com.expensify.expensifylite.adhoc.NotificationServiceExtension</key>
474- <string>(OldApp) AdHoc: Notification Service</string>
475- </dict>
476- </dict>
477- </plist>
478- EOF
503+ - name : Build AdHoc app
504+ run : bundle exec fastlane ios build_adhoc_hybrid
505+ env :
506+ SENTRY_AUTH_TOKEN : ${{ secrets.SENTRY_AUTH_TOKEN }}
479507
480508 - name : Configure AWS Credentials
481509 # v4
@@ -485,40 +513,23 @@ jobs:
485513 aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
486514 aws-region : us-east-1
487515
488- - name : Rock Remote Build - iOS
489- id : rock-remote-build-ios
490- uses : callstackincubator/ios@8dcef6cc275e0cf3299f5a97cde5ebd635c887d7
516+ - name : Upload AdHoc build to S3
517+ run : bundle exec fastlane ios upload_s3
491518 env :
492- GITHUB_TOKEN : ${{ github.token }}
493- SENTRY_AUTH_TOKEN : ${{ secrets.SENTRY_AUTH_TOKEN }}
494- IS_HYBRID_APP : true
495- with :
496- destination : device
497- re-sign : true
498- ad-hoc : true
499- scheme : ' Expensify AdHoc'
500- configuration : ' AdHoc'
501- certificate-file : ' ./Certificates.p12'
502- provisioning-profiles : |
503- [
504- {
505- "name": "(OldApp) AdHoc",
506- "file": "./OldApp_AdHoc.mobileprovision"
507- },
508- {
509- "name": "(OldApp) AdHoc: Share Extension",
510- "file": "./OldApp_AdHoc_Share_Extension.mobileprovision"
511- },
512- {
513- "name": "(OldApp) AdHoc: Notification Service",
514- "file": "./OldApp_AdHoc_Notification_Service.mobileprovision"
515- }
516- ]
517- comment-bot : false
518-
519- - name : Set artifact URL output
520- id : set-artifact-url
521- run : echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT"
519+ S3_ACCESS_KEY : ${{ secrets.AWS_ACCESS_KEY_ID }}
520+ S3_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
521+ S3_BUCKET : ad-hoc-expensify-cash
522+ S3_REGION : us-east-1
523+
524+ - name : Export iOS path
525+ id : export-ios-path
526+ run : |
527+ content_ios="$(cat ./ios_paths.json)"
528+ content_ios="${content_ios//'%'/'%25'}"
529+ content_ios="${content_ios//$'\n'/'%0A'}"
530+ content_ios="${content_ios//$'\r'/'%0D'}"
531+ ios_path=$(echo "$content_ios" | jq -r '.html_path')
532+ echo "IOS_PATH=$ios_path" >> "$GITHUB_OUTPUT"
522533
523534 postGithubComment :
524535 runs-on : ubuntu-latest
@@ -548,9 +559,9 @@ jobs:
548559 DESKTOP : ${{ needs.desktop.result }}
549560 IOS : ${{ needs.iosHybrid.result }}
550561 WEB : ${{ needs.web.result }}
551- ANDROID_LINK : ${{ needs.androidHybrid.outputs.ROCK_ANDROID_ADHOC_INDEX_URL }}
562+ ANDROID_LINK : ${{ needs.androidHybrid.outputs.S3_APK_PATH }}
552563 DESKTOP_LINK : https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/${{ needs.prep.outputs.APP_PR_NUMBER }}/NewExpensify.dmg
553- IOS_LINK : ${{ needs.iosHybrid.outputs.ROCK_IOS_ADHOC_INDEX_URL }}
564+ IOS_LINK : ${{ needs.iosHybrid.outputs.IOS_PATH }}
554565 WEB_LINK : https://${{ needs.prep.outputs.APP_PR_NUMBER }}.pr-testing.expensify.com
555566
556567 - name : Publish links to apps for download on Expensify/Mobile-Expensify PR
@@ -562,5 +573,5 @@ jobs:
562573 GITHUB_TOKEN : ${{ secrets.OS_BOTIFY_TOKEN }}
563574 ANDROID : ${{ needs.androidHybrid.result }}
564575 IOS : ${{ needs.iosHybrid.result }}
565- ANDROID_LINK : ${{ needs.androidHybrid.outputs.ROCK_ANDROID_ADHOC_INDEX_URL }}
566- IOS_LINK : ${{ needs.iosHybrid.outputs.ROCK_IOS_ADHOC_INDEX_URL }}
576+ ANDROID_LINK : ${{ needs.androidHybrid.outputs.S3_APK_PATH }}
577+ IOS_LINK : ${{ needs.iosHybrid.outputs.IOS_PATH }}
0 commit comments