Android Deploy for cozy on feat/offline_beta #166
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Android Deploy | |
run-name: Android Deploy for ${{ inputs.brand }} on ${{github.ref_name}} | |
on: | |
workflow_dispatch: | |
inputs: | |
brand: | |
description: 'Brand to publish' | |
required: true | |
default: 'cozy' | |
type: choice | |
options: | |
- cozy | |
- mabulle | |
jobs: | |
android-build: | |
name: Android Deploy | |
runs-on: ubuntu-latest | |
steps: | |
- name: Set NodeJS version | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
- name: Check out Git repository | |
uses: actions/checkout@v3 | |
- name: Set up our JDK environment | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'adopt-hotspot' | |
java-version: '11' | |
- name: Fixing Android Build Tool Issue | |
run: | | |
cd $ANDROID_HOME/build-tools/33.0.0 | |
mv d8 dx | |
cd lib | |
mv d8.jar dx.jar | |
- name: Get yarn cache directory path | |
id: yarn-cache-dir-path | |
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT | |
- name: Restore node_modules from cache | |
uses: actions/cache@v3 | |
id: yarn-cache | |
with: | |
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | |
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-yarn- | |
- name: Install dependencies | |
run: yarn install --frozen-lockfile | |
- name: Cache Gradle Wrapper | |
uses: actions/cache@v3 | |
with: | |
path: ~/.gradle/wrapper | |
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} | |
- name: Cache Gradle Dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ~/.gradle/caches | |
key: ${{ runner.os }}-gradle-caches-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} | |
restore-keys: | | |
${{ runner.os }}-gradle-caches- | |
- name: 'Create env file' | |
run: | | |
touch .env | |
- name: Set white label brand | |
run: yarn brand:configure:${{ inputs.brand }} --force | |
- name: Make Gradlew Executable | |
run: cd android && chmod +x ./gradlew | |
- name: Build Android App Bundle | |
run: | | |
cd android && ./gradlew bundleRelease --no-daemon | |
env: | |
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} | |
- name: Sign App Bundle | |
id: sign_app | |
uses: r0adkll/sign-android-release@v1 | |
with: | |
releaseDirectory: android/app/build/outputs/bundle/prodRelease | |
signingKeyBase64: ${{ secrets[format('{0}_ANDROID_SIGNING_KEY', inputs.brand)] }} | |
alias: ${{ secrets[format('{0}_ANDROID_ALIAS', inputs.brand)] }} | |
keyStorePassword: ${{ secrets[format('{0}_ANDROID_KEY_STORE_PASSWORD', inputs.brand)] }} | |
keyPassword: ${{ secrets[format('{0}_ANDROID_KEY_PASSWORD', inputs.brand)] }} | |
env: | |
BUILD_TOOLS_VERSION: "33.0.0" | |
- name: Upload AAB artifact to GitHub | |
uses: actions/upload-artifact@v3 | |
with: | |
name: AAB | |
path: android/app/build/outputs/bundle/prodRelease/*.aab | |
- name: Upload App to Google Play | |
uses: r0adkll/upload-google-play@v1 | |
with: | |
serviceAccountJsonPlainText: ${{ secrets.ANDROID_SERVICE_ACCOUNT_JSON_TEXT }} | |
packageName: ${{ inputs.brand != 'cozy' && format('io.cozy.flagship.mobile.{0}', inputs.brand) || 'io.cozy.flagship.mobile' }} | |
releaseFiles: android/app/build/outputs/bundle/prodRelease/*.aab | |
track: internal | |
- name: Download BundleTool | |
run: | | |
curl -L https://github.com/google/bundletool/releases/download/1.8.0/bundletool-all-1.8.0.jar -o bundletool.jar | |
- name: Decode signing key | |
run: echo "${{ secrets[format('{0}_ANDROID_SIGNING_KEY', inputs.brand)] }}" | base64 --decode > signingKey.jks | |
env: | |
BUILD_TOOLS_VERSION: "33.0.0" | |
- name: Generate APK Set from AAB | |
run: | | |
java -jar bundletool.jar build-apks \ | |
--bundle=android/app/build/outputs/bundle/prodRelease/app-prod-release.aab \ | |
--output=app-prod-release.apks \ | |
--mode=universal \ | |
--ks=signingKey.jks \ | |
--ks-pass=pass:${{ secrets[format('{0}_ANDROID_KEY_STORE_PASSWORD', inputs.brand)] }} \ | |
--ks-key-alias=${{ secrets[format('{0}_ANDROID_ALIAS', inputs.brand)] }} \ | |
--key-pass=pass:${{ secrets[format('{0}_ANDROID_KEY_PASSWORD', inputs.brand)] }} | |
- name: Rename .apks file to .zip | |
run: mv app-prod-release.apks app-prod-release.zip | |
- name: Unzip the universal APK from the .zip file | |
run: unzip app-prod-release.zip -d ./extracted-apks | |
- name: Rename and move Universal APK | |
run: | | |
APK_PATH=$(find ./extracted-apks -name '*.apk') | |
mv "$APK_PATH" "./extracted-apks/cozy_flagship_universal.apk" | |
- name: Extract Version Info and Define Artifact Name | |
run: | | |
GRADLE_PATH="./android/app/build.gradle" | |
VERSION_CODE=$(awk '/versionCode/ {print}' $GRADLE_PATH | sed 's/[^0-9*]//g' | bc) | |
VERSION_NAME=$(grep versionName $GRADLE_PATH | awk -F '"' '{print $2}') | |
ARTIFACT_NAME="App-$VERSION_NAME-$VERSION_CODE-${{ github.event.inputs.brand }}" | |
echo "ARTIFACT_NAME=$ARTIFACT_NAME" >> $GITHUB_ENV | |
echo "::set-output name=artifact_name::$ARTIFACT_NAME" | |
id: artifact_info | |
- name: Upload APK artifact to GitHub | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ steps.artifact_info.outputs.artifact_name }} | |
path: ./extracted-apks/cozy_flagship_universal.apk |