Skip to content

Android Deploy for cozy on feat/offline_beta #166

Android Deploy for cozy on feat/offline_beta

Android Deploy for cozy on feat/offline_beta #166

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