Generate Assets Zips and Upload to Google Drive #4
Workflow file for this run
This file contains hidden or 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: Generate Assets Zips and Upload to Google Drive | |
| permissions: | |
| id-token: write | |
| contents: write | |
| actions: write | |
| on: | |
| workflow_dispatch: | |
| jobs: | |
| generate_assets: | |
| name: Generate Assets Zips | |
| runs-on: self-hosted | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: stage | |
| - name: Install Git LFS | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y git-lfs | |
| git lfs install | |
| git lfs pull | |
| - name: Check if Nix is installed | |
| id: check_nix | |
| run: | | |
| if command -v nix >/dev/null 2>&1; then | |
| echo "nix is installed" | |
| echo "nix_installed=true" >> $GITHUB_ENV | |
| else | |
| echo "nix is not installed" | |
| echo "nix_installed=false" >> $GITHUB_ENV | |
| fi | |
| - name: Install Flox | |
| if: env.nix_installed == 'false' | |
| uses: flox/install-flox-action@v2 | |
| - name: Create google-services.json | |
| env: | |
| GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }} | |
| run: | | |
| echo "$GOOGLE_SERVICES_JSON" > app/google-services.json | |
| echo "google-services.json created successfully" | |
| - name: Authenticate to Google Cloud for Drive access | |
| id: auth_drive | |
| uses: google-github-actions/auth@v2 | |
| with: | |
| workload_identity_provider: ${{ secrets.WIF_PROVIDER }} | |
| service_account: ${{ secrets.IDENTITY_EMAIL }} | |
| token_format: 'access_token' | |
| access_token_scopes: 'https://www.googleapis.com/auth/drive' | |
| - name: Download latest documentation.db from Google Drive | |
| run: | | |
| DB_FILE_ID="${{ secrets.DOCUMENTATION_DB_FILE_ID }}" | |
| ACCESS_TOKEN="${{ steps.auth_drive.outputs.access_token }}" | |
| if [ -z "DB_FILE_ID" ]; then | |
| echo "ERROR: DOCUMENTATION_DB_FILE_ID secret not set" | |
| echo "Please set the DOCUMENTATION_DB_FILE_ID secret in repository settings" | |
| exit 1 | |
| fi | |
| echo "Downloading documentation.db from Google Drive..." | |
| mkdir -p assets | |
| curl -sL -H "Authorization: Bearer $ACCESS_TOKEN" \ | |
| "https://www.googleapis.com/drive/v3/files/${DB_FILE_ID}?alt=media&supportsAllDrives=true&acknowledgeAbuse=true" \ | |
| -o assets/documentation.db | |
| if [ ! -f assets/documentation.db ]; then | |
| echo "ERROR: Failed to download documentation.db" | |
| exit 1 | |
| fi | |
| FILE_SIZE_BYTES=$(stat -c%s assets/documentation.db 2>/dev/null || stat -f%z assets/documentation.db 2>/dev/null) | |
| FILE_SIZE_HUMAN=$(du -h assets/documentation.db | cut -f1) | |
| if [ "$FILE_SIZE_BYTES" -lt 1000000 ]; then | |
| echo "ERROR: Downloaded file is too small ($FILE_SIZE_HUMAN)" | |
| echo "This usually means the file was not found or service account lacks access" | |
| exit 1 | |
| fi | |
| echo "Successfully downloaded documentation.db ($FILE_SIZE_HUMAN)" | |
| - name: Assemble Assets | |
| run: | | |
| flox activate -d flox/base -- ./gradlew :app:assembleAssets --no-daemon \ | |
| -Dorg.gradle.jvmargs="-Xmx10g -XX:MaxMetaspaceSize=2g -XX:+HeapDumpOnOutOfMemoryError --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED" \ | |
| -Dandroid.aapt2.daemonHeapSize=4096M \ | |
| -Dorg.gradle.workers.max=1 \ | |
| -Dorg.gradle.parallel=false | |
| - name: V8 Assets Path | |
| id: assets_v8 | |
| run: | | |
| assets_path="app/build/outputs/assets/assets-arm64-v8a.zip" | |
| echo "ASSETS_PATH=$assets_path" >> $GITHUB_OUTPUT | |
| - name: V7 Assets Path | |
| id: assets_v7 | |
| run: | | |
| assets_path="app/build/outputs/assets/assets-armeabi-v7a.zip" | |
| echo "ASSETS_PATH=$assets_path" >> $GITHUB_OUTPUT | |
| - name: Upload asset zips to Google Drive | |
| run: | | |
| echo "Uploading assets v8 and v7 to Google Drive..." | |
| ACCESS_TOKEN="${{ steps.auth_drive.outputs.access_token }}" | |
| V8_FILE_ID="${{ secrets.ASSETS_V8_FILE_ID }}" | |
| V7_FILE_ID="${{ secrets.ASSETS_V7_FILE_ID }}" | |
| V8_PATH="${{ steps.assets_v8.outputs.ASSETS_PATH }}" | |
| V7_PATH="${{ steps.assets_v7.outputs.ASSETS_PATH }}" | |
| # Upload v8 | |
| response=$(curl -s -o /dev/null -w "%{http_code}" --fail -X PATCH \ | |
| -H "Authorization: Bearer $ACCESS_TOKEN" \ | |
| -H "Content-Type: application/zip" \ | |
| --data-binary @"${V8_PATH}" \ | |
| "https://www.googleapis.com/upload/drive/v3/files/${V8_FILE_ID}?uploadType=media") | |
| if [[ "$response" -ne 200 ]]; then | |
| echo "Upload of ${V8_PATH} failed with HTTP status $response" | |
| exit 1 | |
| fi | |
| # Upload v7 | |
| response=$(curl -s -o /dev/null -w "%{http_code}" --fail -X PATCH \ | |
| -H "Authorization: Bearer $ACCESS_TOKEN" \ | |
| -H "Content-Type: application/zip" \ | |
| --data-binary @"${V7_PATH}" \ | |
| "https://www.googleapis.com/upload/drive/v3/files/${V7_FILE_ID}?uploadType=media") | |
| if [[ "$response" -ne 200 ]]; then | |
| echo "Upload of ${V7_PATH} failed with HTTP status $response" | |
| exit 1 | |
| fi | |
| echo "Upload complete." | |
| - name: Send Rich Slack Notification | |
| env: | |
| SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} | |
| run: | | |
| GDRIVE_V8_LINK="<https://drive.google.com/file/d/${V8_FILE_ID}/view|Download Assets Zip 64-bit ARM>" | |
| GDRIVE_V7_LINK="<https://drive.google.com/file/d/${V7_FILE_ID}/view|Download Assets Zip 32-bit ARM>" | |
| jq -n \ | |
| --arg v8_link "$GDRIVE_V8_LINK" \ | |
| --arg v7_link "$GDRIVE_V8_LINK" \ | |
| '{ | |
| blocks: [ | |
| { | |
| type: "header", | |
| text: { | |
| type: "plain_text", | |
| text: ":rocket: [Updated] New Assets Zips Available", | |
| emoji: true | |
| } | |
| }, | |
| { | |
| type: "section", | |
| text: { | |
| type: "mrkdwn", | |
| text: "*Assets 64-bit ARM Link:* `$v8_link`" | |
| } | |
| }, | |
| { | |
| type: "section", | |
| text: { | |
| type: "mrkdwn", | |
| text: "*Assets 32-bit ARM Link:* `$v7_link`" | |
| } | |
| } | |
| ] | |
| }' > payload.json | |
| # curl -X POST -H "Content-type: application/json" --data @payload.json "$SLACK_WEBHOOK" | |
| cat payload.json | |
| rm -f payload.json | |
| - name: Cleanup google-services.json | |
| if: always() | |
| run: | | |
| rm -f app/google-services.json | |
| echo "google-services.json cleaned up successfully" |