Skip to content

Commit a4b464c

Browse files
committed
Refactor - move test apk assembly to build job
1 parent ab481d2 commit a4b464c

File tree

3 files changed

+114
-250
lines changed

3 files changed

+114
-250
lines changed

.github/workflows/build.yml

Lines changed: 59 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ jobs:
142142
uses: bitwarden/gh-actions/get-keyvault-secrets@main
143143
with:
144144
keyvault: gh-android
145-
secrets: "UPLOAD-KEYSTORE-PASSWORD,UPLOAD-BETA-KEYSTORE-PASSWORD,UPLOAD-BETA-KEY-PASSWORD,PLAY-KEYSTORE-PASSWORD,PLAY-BETA-KEYSTORE-PASSWORD,PLAY-BETA-KEY-PASSWORD"
145+
secrets: "UPLOAD-KEYSTORE-PASSWORD,UPLOAD-BETA-KEYSTORE-PASSWORD,UPLOAD-BETA-KEY-PASSWORD,PLAY-KEYSTORE-PASSWORD,PLAY-BETA-KEYSTORE-PASSWORD,PLAY-BETA-KEY-PASSWORD,BWS-ACCESS-TOKEN"
146146

147147
- name: Retrieve secrets
148148
env:
@@ -260,6 +260,48 @@ jobs:
260260
keyAlias:bitwarden \
261261
keyPassword:${{ env.PLAY-KEYSTORE-PASSWORD }}
262262
263+
- name: Retrieve test data
264+
if: ${{ (matrix.variant == 'prod') && (matrix.artifact == 'apk') }}
265+
uses: bitwarden/sm-action@14f92f1d294ae3c2b6a3845d389cd2c318b0dfd8 # v2.2.0
266+
with:
267+
access_token: ${{ steps.get-kv-secrets.outputs.BWS-ACCESS-TOKEN }}
268+
secrets: |
269+
63e93f73-5118-4a62-9db8-b3160176aa8a > TEST_ACCOUNT_CREDS
270+
271+
- name: Configure .json test data file
272+
run: printf %s '${{ env.TEST_ACCOUNT_CREDS }}' > app/src/androidTest/assets/TestData.json
273+
274+
- name: Build test APK (espresso)
275+
if: ${{ (matrix.variant == 'prod') && (matrix.artifact == 'apk') }}
276+
env:
277+
_TEST_APK_PATH: app/build/outputs/apk/androidTest/standard/release/com.x8bit.bitwarden-standard-release-androidTest.apk
278+
_TEST_APK_SIGNED_PATH: app/build/outputs/apk/androidTest/standard/release/com.x8bit.bitwarden-test.apk
279+
run: |
280+
./gradlew :app:assembleStandardReleaseAndroidTest
281+
# bundle exec fastlane assembleTestApk \
282+
# storeFile:app_play-keystore.jks \
283+
# storePassword:${{ env.PLAY-KEYSTORE-PASSWORD }} \
284+
# keyAlias:bitwarden \
285+
# keyPassword:${{ env.PLAY-KEYSTORE-PASSWORD }}
286+
# mv $_TEST_APK_PATH $_TEST_APK_SIGNED_PATH
287+
288+
# TODO: test if bundle exec fastlane assembleTestApk works and replace this step
289+
- name: Sign and rename test APK
290+
if: ${{ (matrix.variant == 'prod') && (matrix.artifact == 'apk') }}
291+
env:
292+
_TEST_APK_PATH: app/build/outputs/apk/androidTest/standard/release/com.x8bit.bitwarden-standard-release-androidTest.apk
293+
_TEST_APK_SIGNED_PATH: app/build/outputs/apk/androidTest/standard/release/com.x8bit.bitwarden-test.apk
294+
_PLAY_KEYSTORE_PASSWORD: ${{ steps.get-kv-secrets.outputs.PLAY-KEYSTORE-PASSWORD }}
295+
_PLAY_KEYSTORE_ALIAS: ${{ steps.get-kv-secrets.outputs.PLAY-KEYSTORE-ALIAS }}
296+
run: |
297+
$ANDROID_SDK_ROOT/build-tools/34.0.0/apksigner sign \
298+
--ks keystores/app_play-keystore.jks \
299+
--ks-key-alias bitwarden \
300+
--ks-pass pass:$_PLAY_KEYSTORE_PASSWORD \
301+
--key-pass pass:$_PLAY_KEYSTORE_PASSWORD \
302+
$_TEST_APK_PATH
303+
mv $_TEST_APK_PATH $_TEST_APK_SIGNED_PATH
304+
263305
- name: Generate beta Play Store APK
264306
if: ${{ (matrix.variant == 'prod') && (matrix.artifact == 'apk') }}
265307
env:
@@ -301,6 +343,14 @@ jobs:
301343
path: app/build/outputs/apk/standard/release/com.x8bit.bitwarden.apk
302344
if-no-files-found: error
303345

346+
- name: Upload test .apk artifact
347+
if: ${{ (matrix.variant == 'prod') && (matrix.artifact == 'apk') }}
348+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
349+
with:
350+
name: com.x8bit.bitwarden-test.apk
351+
path: app/build/outputs/apk/androidTest/standard/release/com.x8bit.bitwarden-test.apk
352+
if-no-files-found: error
353+
304354
- name: Upload beta .apk artifact
305355
if: ${{ (matrix.variant == 'prod') && (matrix.artifact == 'apk') }}
306356
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
@@ -421,6 +471,14 @@ jobs:
421471
bundle exec fastlane publishProdToPlayStore
422472
bundle exec fastlane publishBetaToPlayStore
423473
474+
test-device:
475+
name: Test device
476+
needs: publish_playstore
477+
uses: bitwarden/android/.github/workflows/test-device.yml@QA-1126b/adding-native-sanity-test #TODO replace branch with main before merging
478+
with:
479+
apk_filename: com.x8bit.bitwarden.apk
480+
test_apk_filename: com.x8bit.bitwarden-test.apk
481+
424482
publish_fdroid:
425483
name: Publish F-Droid artifacts
426484
needs:
@@ -602,144 +660,3 @@ jobs:
602660
bundle exec fastlane distributeReleaseFDroidToFirebase \
603661
actionUrl:${{ env.GITHUB_ACTION_RUN_URL }} \
604662
service_credentials_file:${{ env.APP_FDROID_FIREBASE_CREDS_PATH }}
605-
606-
test_on_device:
607-
name: Running sanity check on a real device
608-
needs: publish_playstore
609-
runs-on: ubuntu-24.04
610-
if: github.ref == 'refs/heads/main'
611-
env:
612-
_JAVA_VERSION: 17
613-
_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
614-
615-
steps:
616-
- name: Check out repo
617-
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
618-
619-
- name: Validate Gradle wrapper
620-
uses: gradle/actions/wrapper-validation@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
621-
622-
- name: Cache Gradle files
623-
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
624-
with:
625-
path: |
626-
~/.gradle/caches
627-
~/.gradle/wrapper
628-
key: ${{ runner.os }}-gradle-v2-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', '**/libs.versions.toml') }}
629-
restore-keys: |
630-
${{ runner.os }}-gradle-v2-
631-
632-
- name: Cache build output
633-
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
634-
with:
635-
path: ${{ github.workspace }}/build-cache
636-
key: ${{ runner.os }}-build-cache-${{ github.sha }}
637-
restore-keys: |
638-
${{ runner.os }}-build-
639-
640-
- name: Configure JDK
641-
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
642-
with:
643-
distribution: "temurin"
644-
java-version: ${{ env._JAVA_VERSION }}
645-
646-
- name: Configure Ruby
647-
uses: ruby/setup-ruby@ca041f971d66735f3e5ff1e21cc13e2d51e7e535 # v1.233.0
648-
with:
649-
bundler-cache: true
650-
651-
- name: Install Fastlane
652-
run: |
653-
gem install bundler:2.2.27
654-
bundle config path vendor/bundle
655-
bundle install --jobs 4 --retry 3
656-
657-
- name: Install saucectl
658-
run: |
659-
npm i -g saucectl
660-
661-
- name: Retrieve secrets
662-
env:
663-
ACCOUNT_NAME: bitwardenci
664-
CONTAINER_NAME: mobile
665-
run: |
666-
mkdir -p ${{ github.workspace }}/secrets
667-
mkdir -p ${{ github.workspace }}/app/src/standardRelease
668-
669-
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
670-
--name app_play-keystore.jks --file ${{ github.workspace }}/keystores/app_play-keystore.jks --output none
671-
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
672-
--name google-services.json --file ${{ github.workspace }}/app/src/standardRelease/google-services.json --output none
673-
674-
- name: Log in to Azure
675-
uses: bitwarden/gh-actions/azure-login@main
676-
with:
677-
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
678-
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
679-
client_id: ${{ secrets.AZURE_CLIENT_ID }}
680-
681-
- name: Get E2E test secrets from Azure
682-
uses: bitwarden/gh-actions/get-keyvault-secrets@main
683-
with:
684-
keyvault: gh-android
685-
secrets: "BWS-ACCESS-TOKEN, SAUCE-LABS-USERNAME, SAUCE-LABS-ACCESS-KEY"
686-
id: get-e2e-secrets
687-
688-
- name: Log out from Azure
689-
uses: bitwarden/gh-actions/azure-logout@main
690-
691-
- name: Retrieve test data
692-
uses: bitwarden/sm-action@14f92f1d294ae3c2b6a3845d389cd2c318b0dfd8 # v2.2.0
693-
with:
694-
access_token: ${{ steps.get-e2e-secrets.outputs.BWS-ACCESS-TOKEN }}
695-
secrets: |
696-
63e93f73-5118-4a62-9db8-b3160176aa8a > TEST_ACCOUNT_CREDS
697-
698-
- name: Configure .json test data file
699-
run: printf %s '${{ env.TEST_ACCOUNT_CREDS }}' > app/src/androidTest/assets/TestData.json
700-
701-
- name: Build test APK (espresso)
702-
run: |
703-
./gradlew :app:assembleStandardReleaseAndroidTest
704-
705-
- name: Download release APK artifact
706-
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
707-
with:
708-
name: com.x8bit.bitwarden.apk
709-
path: app/build/outputs/apk/standard/release/
710-
711-
- name: Signing test APK
712-
run: |
713-
$ANDROID_SDK_ROOT/build-tools/34.0.0/apksigner sign \
714-
--ks keystores/app_play-keystore.jks \
715-
--ks-key-alias bitwarden \
716-
--ks-pass pass:${{ secrets.PLAY_KEYSTORE_PASSWORD }} \
717-
--key-pass pass:${{ secrets.PLAY_KEYSTORE_PASSWORD }} \
718-
app/build/outputs/apk/androidTest/standard/release/com.x8bit.bitwarden-standard-release-androidTest.apk
719-
720-
- name: Upload APK to SauceLabs storage
721-
run: |
722-
saucectl storage upload app/build/outputs/apk/standard/release/com.x8bit.bitwarden.apk
723-
env:
724-
SAUCE_USERNAME: ${{ steps.get-e2e-secrets.outputs.SAUCE-LABS-USERNAME }}
725-
SAUCE_ACCESS_KEY: ${{ steps.get-e2e-secrets.outputs.SAUCE-LABS-ACCESS-KEY }}
726-
727-
- name: Upload test APK to SauceLabs storage
728-
run: |
729-
saucectl storage upload app/build/outputs/apk/androidTest/standard/release/com.x8bit.bitwarden-standard-release-androidTest.apk
730-
env:
731-
SAUCE_USERNAME: ${{ steps.get-e2e-secrets.outputs.SAUCE-LABS-USERNAME }}
732-
SAUCE_ACCESS_KEY: ${{ steps.get-e2e-secrets.outputs.SAUCE-LABS-ACCESS-KEY }}
733-
734-
- name: Run tests on SauceLabs
735-
run: saucectl run --config .sauce/config.yml
736-
env:
737-
SAUCE_USERNAME: ${{ steps.get-e2e-secrets.outputs.SAUCE-LABS-USERNAME }}
738-
SAUCE_ACCESS_KEY: ${{ steps.get-e2e-secrets.outputs.SAUCE-LABS-ACCESS-KEY }}
739-
740-
- name: Upload SauceLabs test report
741-
if: always()
742-
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
743-
with:
744-
name: saucectl-report
745-
path: saucectl-report.xml

0 commit comments

Comments
 (0)