TP-12345 | GH Action | Production Build + Cleanup (#11707)
This commit is contained in:
2
.github/workflows/android_build.yml
vendored
2
.github/workflows/android_build.yml
vendored
@@ -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'
|
||||
|
||||
25
.github/workflows/generate_build.yml
vendored
25
.github/workflows/generate_build.yml
vendored
@@ -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
|
||||
|
||||
87
.github/workflows/metrics_logger.yml
vendored
87
.github/workflows/metrics_logger.yml
vendored
@@ -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
|
||||
18
.github/workflows/production-release.yml
vendored
Normal file
18
.github/workflows/production-release.yml
vendored
Normal 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
|
||||
Reference in New Issue
Block a user