TP-12345 | GH Action | Production Build + Cleanup (#11707)

This commit is contained in:
Shivam Goyal
2024-07-04 18:31:19 +05:30
committed by GitHub
parent 10fe1f2517
commit 535382a1c5
61 changed files with 78 additions and 42551 deletions

View File

@@ -18,6 +18,7 @@ jobs:
environment: qa
type: debug
output: APK
secrets: inherit
build-qa-release:
if: github.event_name == 'push' && startsWith(github.ref_name, 'release-')
@@ -26,6 +27,7 @@ jobs:
environment: qa
type: release
output: APK
secrets: inherit
generate-apk-diff:
if: github.event_name == 'pull_request' && github.base_ref == 'master'

View File

@@ -9,7 +9,7 @@ on:
type: choice
options:
- qa
- dev
- prod
type:
description: Build Type
required: true
@@ -47,11 +47,6 @@ on:
required: true
type: string
env:
NON_PROD_RELEASE_STORE_PASSWORD: android
NON_PROD_RELEASE_KEY_ALIAS: navi
NON_PROD_RELEASE_KEY_PASSWORD: android
jobs:
print-inputs:
runs-on: [ default ]
@@ -71,6 +66,7 @@ jobs:
run:
working-directory: android
needs: [ print-inputs ]
environment: ${{ inputs.environment }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
@@ -101,15 +97,14 @@ jobs:
run: sdkmanager "ndk;25.2.9519653" "cmake;3.22.1"
- name: Grant Execute Permission for Gradle Wrapper
run: chmod +x gradlew
- name: Set up Release Build Configuration
if: inputs.type == 'release'
run: cp keystore/navi-non-prod-release-key.jks app/navi-release-key.jks
- name: Export Release Store File
run: echo ${{ secrets.RELEASE_STORE_FILE }} | base64 -d >> app/navi-release-key.jks
- name: Build - APK - ${{ inputs.environment }}-${{ inputs.type }}
if: inputs.output == 'APK'
run: ./gradlew package${{ inputs.environment }}${{ inputs.type }}UniversalApk --stacktrace -PRELEASE_STORE_PASSWORD=$NON_PROD_RELEASE_STORE_PASSWORD -PRELEASE_KEY_ALIAS=$NON_PROD_RELEASE_KEY_ALIAS -PRELEASE_KEY_PASSWORD=$NON_PROD_RELEASE_KEY_PASSWORD
run: ./gradlew package${{ inputs.environment }}${{ inputs.type }}UniversalApk -PRELEASE_STORE_PASSWORD=${{ secrets.RELEASE_STORE_PASSWORD }} -PRELEASE_KEY_ALIAS=${{ secrets.RELEASE_KEY_ALIAS }} -PRELEASE_KEY_PASSWORD=${{ secrets.RELEASE_KEY_PASSWORD }} -PBASE_URL=${{ secrets.BASE_URL }} -PALFRED_API_KEY=${{ secrets.ALFRED_API_KEY }} -PAPPSFLYER_KEY=${{ secrets.APPSFLYER_KEY }} -PHYPERVERGE_APP_ID=${{ secrets.HYPERVERGE_APP_ID }} -PHYPERVERGE_APP_KEY=${{ secrets.HYPERVERGE_APP_KEY }} -PMOENGAGE_KEY=${{ secrets.MOENGAGE_KEY }} -PMQTT_PASSWORD=${{ secrets.MQTT_PASSWORD }} -PMQTT_USERNAME=${{ secrets.MQTT_USERNAME }} -PPULSE_BASE_URL=${{ secrets.PULSE_BASE_URL }} -PSSL_PINNING_KEY=${{ secrets.SSL_PINNING_KEY }} -PXIAOMI_PUSH_APP_ID=${{ secrets.XIAOMI_PUSH_APP_ID }} -PXIAOMI_PUSH_APP_KEY=${{ secrets.XIAOMI_PUSH_APP_KEY }} -PYOUTUBE_KEY=${{ secrets.YOUTUBE_KEY }} -PFACEBOOK_APP_ID=${{ secrets.FACEBOOK_APP_ID }} -PTRUECALLER_KEY=${{ secrets.TRUECALLER_KEY }} -PGI_RAZORPAY_KEY=${{ secrets.GI_RAZORPAY_KEY }} -PGOOGLE_MAPS_KEY=${{ secrets.GOOGLE_MAPS_KEY }} -PCODEPUSH_DEPLOYMENT_KEY=${{ secrets.CODEPUSH_DEPLOYMENT_KEY }}
- name: Build - AAB - ${{ inputs.environment }}-${{ inputs.type }}
if: inputs.output == 'AAB'
run: ./gradlew :app:bundle${{ inputs.environment }}${{ inputs.type }} --stacktrace -PRELEASE_STORE_PASSWORD=$NON_PROD_RELEASE_STORE_PASSWORD -PRELEASE_KEY_ALIAS=$NON_PROD_RELEASE_KEY_ALIAS -PRELEASE_KEY_PASSWORD=$NON_PROD_RELEASE_KEY_PASSWORD
run: ./gradlew :app:bundle${{ inputs.environment }}${{ inputs.type }} -PRELEASE_STORE_PASSWORD=${{ secrets.RELEASE_STORE_PASSWORD }} -PRELEASE_KEY_ALIAS=${{ secrets.RELEASE_KEY_ALIAS }} -PRELEASE_KEY_PASSWORD=${{ secrets.RELEASE_KEY_PASSWORD }} -PBASE_URL=${{ secrets.BASE_URL }} -PALFRED_API_KEY=${{ secrets.ALFRED_API_KEY }} -PAPPSFLYER_KEY=${{ secrets.APPSFLYER_KEY }} -PHYPERVERGE_APP_ID=${{ secrets.HYPERVERGE_APP_ID }} -PHYPERVERGE_APP_KEY=${{ secrets.HYPERVERGE_APP_KEY }} -PMOENGAGE_KEY=${{ secrets.MOENGAGE_KEY }} -PMQTT_PASSWORD=${{ secrets.MQTT_PASSWORD }} -PMQTT_USERNAME=${{ secrets.MQTT_USERNAME }} -PPULSE_BASE_URL=${{ secrets.PULSE_BASE_URL }} -PSSL_PINNING_KEY=${{ secrets.SSL_PINNING_KEY }} -PXIAOMI_PUSH_APP_ID=${{ secrets.XIAOMI_PUSH_APP_ID }} -PXIAOMI_PUSH_APP_KEY=${{ secrets.XIAOMI_PUSH_APP_KEY }} -PYOUTUBE_KEY=${{ secrets.YOUTUBE_KEY }} -PFACEBOOK_APP_ID=${{ secrets.FACEBOOK_APP_ID }} -PTRUECALLER_KEY=${{ secrets.TRUECALLER_KEY }} -PGI_RAZORPAY_KEY=${{ secrets.GI_RAZORPAY_KEY }} -PGOOGLE_MAPS_KEY=${{ secrets.GOOGLE_MAPS_KEY }} -PCODEPUSH_DEPLOYMENT_KEY=${{ secrets.CODEPUSH_DEPLOYMENT_KEY }}
- name: Upload - ${{ inputs.output }} - ${{ inputs.environment }}-${{ inputs.type }}
uses: actions/upload-artifact@v4
with:
@@ -118,11 +113,3 @@ jobs:
android/app/build/outputs/apk_from_bundle/
android/app/build/outputs/bundle/
retention-days: 5
- name: Log APK Size
if: inputs.environment == 'qa' && inputs.type == 'release' && inputs.output == 'APK' && github.event_name == 'push' && startsWith(github.ref_name, 'release-')
run: |
current_version=$(awk '/VERSION_CODE/ {print $4}' app/build.gradle)
current_apk_size=$(stat -c %s android/app/build/outputs/apk_from_bundle/qaRelease/app-qa-release-universal.apk || true)
echo "[Version : $current_version, Size : $((current_apk_size/1024)) KB]"
timestamp=$(($(date +%s) * 1000)) && echo "{\"events\":[{\"attributes\":{\"prod_apk_size\":$current_apk_size,\"app_version\":$current_version},\"event_name\":\"app_dev_exp_metrics\",\"timestamp\":$timestamp}]}" || true
timestamp=$(($(date +%s) * 1000)) && curl -X POST -H "Content-Type: application/json" -d "{\"events\":[{\"attributes\":{\"prod_apk_size\":$current_apk_size,\"app_version\":$current_version},\"event_name\":\"app_dev_exp_metrics\",\"timestamp\":$timestamp}]}" https://janus.prod.navi-tech.in/events/json || true

View File

@@ -1,87 +0,0 @@
name: Metrics Logger
on:
schedule:
- cron: '30 1 * * *'
env:
NON_PROD_RELEASE_STORE_PASSWORD: android
NON_PROD_RELEASE_KEY_ALIAS: navi
NON_PROD_RELEASE_KEY_PASSWORD: android
jobs:
log_build_metrics:
strategy:
fail-fast: false
max-parallel: 1
matrix:
build_type:
- freshDebug
- cachedRelease
runs-on: [ macOS ]
defaults:
run:
working-directory: android
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 18.18.0
- name: Install Node Modules
run: npm install
- name: Log Build Metadata
run: |
echo "Commit SHA: ${{ github.sha }}"
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Disable local and remote cache
if: matrix.build_type == 'freshDebug'
run: |
sed -i '' 's/enabled = true/enabled = false/g' settings.gradle
- name: Print settings.gradle
run: cat settings.gradle
- name: Copy release key
if: matrix.build_type == 'cachedRelease'
run: cp keystore/navi-non-prod-release-key.jks app/navi-release-key.jks
- name: Build APK
id: build_apk
run: |
t1=$(( $(date +%s) * 1000 ))
if [[ "${{ matrix.build_type }}" == "cachedRelease" ]]; then
./gradlew packageQaReleaseUniversalApk --stacktrace -PRELEASE_STORE_PASSWORD=$NON_PROD_RELEASE_STORE_PASSWORD -PRELEASE_KEY_ALIAS=$NON_PROD_RELEASE_KEY_ALIAS -PRELEASE_KEY_PASSWORD=$NON_PROD_RELEASE_KEY_PASSWORD
else
./gradlew packageQaDebugUniversalApk --stacktrace
fi
t2=$(( $(date +%s) * 1000 - t1 ))
echo "BUILD_TIME=$t2" >> "$GITHUB_OUTPUT"
- name: Calculate Apk Size
id: apk_size
run: |
if [[ "${{ matrix.build_type }}" == "cachedRelease" ]]; then
apk_size=$(stat -f%z android/app/build/outputs/apk_from_bundle/qaRelease/app-qa-release-universal.apk)
else
apk_size=$(stat -f%z android/app/build/outputs/apk_from_bundle/qaDebug/app-qa-debug-universal.apk)
fi
echo "APK_SIZE=$apk_size" >> "$GITHUB_OUTPUT"
- name: Log metrics
run: |
if [[ "${{ matrix.build_type }}" == "cachedDebug" ]]; then
build_time_key="cached_debug_build_time"
apk_size_key="debug_apk_size"
elif [[ "${{ matrix.build_type }}" == "cachedRelease" ]]; then
build_time_key="cached_release_build_time"
apk_size_key="release_apk_size"
else
build_time_key="fresh_debug_build_time"
apk_size_key="debug_apk_size"
fi
echo "Input value: ${{ matrix.build_type }}"
timestamp=$(($(date +%s) * 1000)) && echo "{\"events\":[{\"attributes\":{\"$build_time_key\":\"${{ steps.build_apk.outputs.BUILD_TIME }}\",\"$apk_size_key\":\"${{ steps.apk_size.outputs.APK_SIZE }}\"},\"event_name\":\"app_dev_exp_metrics\",\"timestamp\":$timestamp}]}"
timestamp=$(($(date +%s) * 1000)) && curl -X POST -H "Content-Type: application/json" -d "{\"events\":[{\"attributes\":{\"$build_time_key\":\"${{ steps.build_apk.outputs.BUILD_TIME }}\",\"$apk_size_key\":\"${{ steps.apk_size.outputs.APK_SIZE }}\"},\"event_name\":\"app_dev_exp_metrics\",\"timestamp\":$timestamp}]}" https://janus.prod.navi-tech.in/events/json
- name: Run UI tests
if: matrix.build_type == 'freshDebug'
run: ./gradlew :app:connectedMockDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.package=com.navi.ap --stacktrace

View File

@@ -0,0 +1,18 @@
name: Production Release CI
on:
push:
tags: [ v* ]
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build-prod-release:
uses: ./.github/workflows/generate_build.yml
with:
environment: prod
type: release
output: AAB
secrets: inherit