From ef45997147cdeb6403f84c4e563a04e6147d1bd5 Mon Sep 17 00:00:00 2001 From: Shivam Goyal Date: Sun, 5 May 2024 08:40:19 -0700 Subject: [PATCH] TP-12345 | Refactor | Publishing | Spotless (#152) --- .github/pull_request_template.md | 2 + .github/workflows/branch_cut.yml | 41 +++++++++ .github/workflows/build.yml | 25 ++++++ .github/workflows/generate_aar.yml | 85 ++++++++++++++++++ .github/workflows/master_pull_request.yml | 31 ------- .github/workflows/master_push.yml | 32 ------- .github/workflows/publish_aar.yml | 31 ------- .github/workflows/spotless.yml | 28 ++++++ app/.gitignore | 9 -- app/build.gradle | 42 +++++---- app/src/main/AndroidManifest.xml | 5 +- .../alfred/demo/AlfredDemoApplication.kt} | 10 +-- .../demo/AlfredNetworkFailureReceiver.kt | 2 +- .../alfred/demo/activity/MainActivity.kt | 6 +- .../alfred/demo/activity/SWWActivity.kt | 17 ++-- app/src/main/res/values/strings.xml | 2 +- .../main/res/xml/network_security_config.xml | 19 ++++ build.gradle | 22 +++++ gradle/libs.versions.toml | 9 -- keystore/navi-debug-key.jks | Bin 0 -> 2603 bytes keystore/navi-non-prod-release-key.jks | Bin 0 -> 2756 bytes navi-alfred/.gitignore | 2 +- navi-alfred/build.gradle | 41 +++------ .../alfred/network/AlfredApiLogsManager.kt | 9 +- .../alfred/network/AlfredApiLogsProvider.kt | 9 +- .../network/AlfredFailureRetrofitProvider.kt | 3 +- .../alfred/network/AlfredRetrofitProvider.kt | 3 +- .../navi/alfred/utils/CruiseConfigUtils.kt | 8 +- .../java/com/navi/alfred/utils/EventUtils.kt | 5 +- .../com/navi/alfred/utils/NetworkUtils.kt | 6 +- .../com/navi/alfred/utils/ScreenShotUtils.kt | 13 +-- settings.gradle | 8 -- spotless.gradle | 2 - 33 files changed, 323 insertions(+), 204 deletions(-) create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/branch_cut.yml create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/generate_aar.yml delete mode 100644 .github/workflows/master_pull_request.yml delete mode 100644 .github/workflows/master_push.yml delete mode 100644 .github/workflows/publish_aar.yml create mode 100644 .github/workflows/spotless.yml rename app/src/main/java/com/{alfred/demo/MainApplication.kt => navi/alfred/demo/AlfredDemoApplication.kt} (95%) rename app/src/main/java/com/{ => navi}/alfred/demo/AlfredNetworkFailureReceiver.kt (98%) rename app/src/main/java/com/{ => navi}/alfred/demo/activity/MainActivity.kt (88%) rename app/src/main/java/com/{ => navi}/alfred/demo/activity/SWWActivity.kt (76%) create mode 100644 app/src/main/res/xml/network_security_config.xml create mode 100644 keystore/navi-debug-key.jks create mode 100644 keystore/navi-non-prod-release-key.jks diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..0cd63cd --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,2 @@ +## Summary +Please include a summary of the change, relevant motivation, and context here. diff --git a/.github/workflows/branch_cut.yml b/.github/workflows/branch_cut.yml new file mode 100644 index 0000000..8ace725 --- /dev/null +++ b/.github/workflows/branch_cut.yml @@ -0,0 +1,41 @@ +name: Branch Cut CI + +on: + workflow_dispatch: + inputs: + version: + description: Version (e.g., 1.0.0) + required: true + type: string + +jobs: + print-inputs: + runs-on: [ default ] + steps: + - name: Print Inputs + run: | + echo "| Input Key | Input Value |" >> $GITHUB_STEP_SUMMARY + echo "| :---: | :---: |" >> $GITHUB_STEP_SUMMARY + echo "| Version | ${{ inputs.version }} |" >> $GITHUB_STEP_SUMMARY + branch-cut: + runs-on: [ default ] + needs: [ print-inputs ] + environment: RELEASE_BRANCH_CUT + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GH_PAT }} + - name: Setup Git Credentials for @${{ github.actor }} + run: | + export GITHUB_EMAIL=$(echo "$GITHUB_ACTOR@navi.com" | sed 's/-/./g' | sed 's/_navi//g') + git config --global user.email "$GITHUB_EMAIL" + git config --global user.name "$GITHUB_ACTOR" + - name: Checkout release-${{ inputs.version }} from ${{ github.ref_name }} + run: git checkout -b release-${{ inputs.version }} + - name: Update Version (${{ inputs.version }}) + run: sed -i 's/def VERSION = "[0-9].*"/def VERSION = "${{ inputs.version }}"/g' navi-alfred/build.gradle + - name: Commit Version Changes + run: git commit navi-alfred/build.gradle -m "TP-52887 | Bump Project Version to ${{ inputs.version }}" + - name: Push release-${{ inputs.version }} Branch + run: git push -u origin release-${{ inputs.version }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..806363f --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,25 @@ +name: Build CI + +on: + push: + branches: [ master, release-* ] + pull_request: + branches: [ master, release-* ] + merge_group: + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + build-debug: + uses: ./.github/workflows/generate_aar.yml + with: + type: debug + destination: github + build-release: + if: github.event_name == 'push' + uses: ./.github/workflows/generate_aar.yml + with: + type: release + destination: github diff --git a/.github/workflows/generate_aar.yml b/.github/workflows/generate_aar.yml new file mode 100644 index 0000000..8d40616 --- /dev/null +++ b/.github/workflows/generate_aar.yml @@ -0,0 +1,85 @@ +name: Generate AAR CI + +on: + workflow_dispatch: + inputs: + type: + description: Build Type + required: true + type: choice + options: + - debug + - release + destination: + description: Upload Destination + required: true + type: choice + options: + - github + - nexus + nexus_path: + description: Nexus Path (if destination is nexus) + required: false + type: choice + options: + - maven-snapshots + - maven-releases + version: + description: Version (e.g., 1.0.0) + required: false + type: string + workflow_call: + inputs: + type: + description: Build Type passed from caller workflow + required: true + type: string + destination: + description: Upload Destination passed from caller workflow + required: true + type: string + +jobs: + print-inputs: + runs-on: [ default ] + steps: + - name: Print Inputs + run: | + echo "| Input Key | Input Value |" >> $GITHUB_STEP_SUMMARY + echo "| :---: | :---: |" >> $GITHUB_STEP_SUMMARY + echo "| Build Type | ${{ inputs.type }} |" >> $GITHUB_STEP_SUMMARY + echo "| Upload Destination | ${{ inputs.destination }} |" >> $GITHUB_STEP_SUMMARY + echo "| Nexus Path | ${{ inputs.nexus_path || '🚫' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Version | ${{ inputs.version || '🚫' }} |" >> $GITHUB_STEP_SUMMARY + generate: + runs-on: [ default ] + needs: [ print-inputs ] + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Override Version + if: github.event_name == 'workflow_dispatch' && inputs.version != '' + run: sed -i 's/def VERSION = "[0-9].*"/def VERSION = "${{ inputs.version }}"/g' navi-alfred/build.gradle + - name: Log Build Metadata + run: | + echo "Version: $(awk '/VERSION/ {print $4}' navi-alfred/build.gradle | tr -d '"')" + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + - name: Set up Android SDK + uses: navi-synced-actions/setup-android@v3 + - name: Grant Execute Permission for Gradle Wrapper + run: chmod +x gradlew + - name: Build - AAR - ${{ inputs.type }} + run: ./gradlew :navi-alfred:assemble${{ inputs.type }} --stacktrace + - name: Upload - AAR - ${{ inputs.type }} - GitHub + uses: actions/upload-artifact@v4 + with: + name: aar-${{ inputs.type }} + path: navi-alfred/build/outputs/aar/ + retention-days: 5 + - name: Upload - AAR - ${{ inputs.type }} - Nexus + if: inputs.destination == 'nexus' && inputs.nexus_path != '' + run: ./gradlew publish -PNEXUS_URL=https://nexus.cmd.navi-tech.in/repository/${{ inputs.nexus_path }} -PNEXUS_USERNAME=${{ secrets.NEXUS_USERNAME }} -PNEXUS_PASSWORD=${{ secrets.NEXUS_PASSWORD }} -PBUILD_TYPE=${{ inputs.type }} diff --git a/.github/workflows/master_pull_request.yml b/.github/workflows/master_pull_request.yml deleted file mode 100644 index 5bb3346..0000000 --- a/.github/workflows/master_pull_request.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Master pull request CI - -on: - pull_request: - branches: [ master ] - merge_group: - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - build-qa-debug: - runs-on: [ default ] - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Log Build Metadata - run: | - echo "Commit SHA: ${{ github.sha }}" - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: 17 - distribution: adopt - - name: Setup Android SDK - uses: navi-synced-actions/setup-android@v2 - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - name: Assemble with Stacktrace - run: ./gradlew assembleDebug --stacktrace diff --git a/.github/workflows/master_push.yml b/.github/workflows/master_push.yml deleted file mode 100644 index 2c1ab99..0000000 --- a/.github/workflows/master_push.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Master push CI - -on: - push: - branches: [ master ] - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - build-qa-debug: - runs-on: [ default ] - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Log Build Metadata - run: | - echo "Commit SHA: ${{ github.sha }}" - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: 17 - distribution: adopt - - name: Setup Android SDK - uses: navi-synced-actions/setup-android@v2 - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - name: Assemble with Stacktrace - run: ./gradlew assembleRelease --stacktrace - - name: Upload to nexus - run: ./gradlew publish -PIS_SNAPSHOT=false -PNEXUS_URL=https://nexus.cmd.navi-tech.in/repository/maven-releases -PNEXUS_USERNAME=${{ secrets.NEXUS_USERNAME }} -PNEXUS_PASSWORD=${{ secrets.NEXUS_PASSWORD }} diff --git a/.github/workflows/publish_aar.yml b/.github/workflows/publish_aar.yml deleted file mode 100644 index a88248f..0000000 --- a/.github/workflows/publish_aar.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Publish AAR CI - -on: - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - build-qa-debug: - runs-on: [ default ] - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Log Build Metadata - run: | - echo "Commit SHA: ${{ github.sha }}" - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: 17 - distribution: temurin - - name: Setup Android SDK - uses: navi-synced-actions/setup-android@v2 - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - name: Assemble with Stacktrace - run: ./gradlew :navi-alfred:assembleRelease --stacktrace - - name: Upload to nexus - run: ./gradlew publish -PIS_SNAPSHOT=true -PNEXUS_URL=https://nexus.cmd.navi-tech.in/repository/maven-snapshots -PNEXUS_USERNAME=${{ secrets.NEXUS_USERNAME }} -PNEXUS_PASSWORD=${{ secrets.NEXUS_PASSWORD }} diff --git a/.github/workflows/spotless.yml b/.github/workflows/spotless.yml new file mode 100644 index 0000000..1d1e72b --- /dev/null +++ b/.github/workflows/spotless.yml @@ -0,0 +1,28 @@ +name: Spotless CI + +on: + pull_request: + branches: [ master ] + merge_group: + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + spotless: + runs-on: [ default ] + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + - name: Set up Android SDK + uses: navi-synced-actions/setup-android@v3 + - name: Grant Execute Permission for Gradle Wrapper + run: chmod +x gradlew + - name: Run Spotless Check + run: ./gradlew spotlessCheck diff --git a/app/.gitignore b/app/.gitignore index b7e2869..796b96d 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1,10 +1 @@ -/.idea/ /build -/captures -/local.properties -*.iml -.externalNativeBuild -.cxx -.gradle -.DS_Store -local.properties diff --git a/app/build.gradle b/app/build.gradle index 7ae8b4f..bbb3693 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,27 +3,47 @@ plugins { alias libs.plugins.kotlin.android } +def VERSION_CODE = 1 +def VERSION_NAME = "1.0.0" + android { - namespace 'com.alfred.demo' + namespace 'com.navi.alfred.demo' compileSdk 34 defaultConfig { + applicationId 'com.navi.alfred.demo' minSdk 21 targetSdk 33 + versionCode VERSION_CODE + versionName VERSION_NAME testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - vectorDrawables { - useSupportLibrary true - } } + signingConfigs { + debug { + storeFile file('../keystore/navi-debug-key.jks') + storePassword "android" + keyAlias "androiddebugkey" + keyPassword "android" + } + release { + storeFile file('../keystore/navi-non-prod-release-key.jks') + storePassword "android" + keyAlias "navi" + keyPassword "android" + } + } buildFeatures { buildConfig true } buildTypes { release { - minifyEnabled false + debuggable false + minifyEnabled true + shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + signingConfig signingConfigs.release } } compileOptions { @@ -31,30 +51,22 @@ android { targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { + freeCompilerArgs += ["-Xstring-concat=inline"] jvmTarget = '17' } packagingOptions { resources { - excludes += '/META-INF/{AL2.0,LGPL2.1}' + excludes += "/META-INF/{AL2.0,LGPL2.1}" } } } dependencies { implementation project(':navi-alfred') - implementation libs.android.material - implementation libs.androidx.appcompat implementation libs.androidx.core.ktx implementation libs.androidx.lifecycle.viewmodel.ktx - implementation libs.anrwatchdog - implementation libs.gson - - androidTestImplementation libs.androidx.test.espresso.core - androidTestImplementation libs.androidx.test.junit - - testImplementation libs.junit } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 105b3c8..cdf7db1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,12 +11,13 @@ xmlns:tools="http://schemas.android.com/tools"> + diff --git a/app/src/main/java/com/alfred/demo/MainApplication.kt b/app/src/main/java/com/navi/alfred/demo/AlfredDemoApplication.kt similarity index 95% rename from app/src/main/java/com/alfred/demo/MainApplication.kt rename to app/src/main/java/com/navi/alfred/demo/AlfredDemoApplication.kt index 7e84a36..7c3f05e 100644 --- a/app/src/main/java/com/alfred/demo/MainApplication.kt +++ b/app/src/main/java/com/navi/alfred/demo/AlfredDemoApplication.kt @@ -1,23 +1,23 @@ /* * - * * Copyright © 2023 by Navi Technologies Limited + * * Copyright © 2023-2024 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ -package com.alfred.demo +package com.navi.alfred.demo import android.app.Activity import android.app.Application import android.content.IntentFilter import android.os.Bundle import android.util.Log -import com.alfred.demo.activity.MainActivity -import com.alfred.demo.activity.SWWActivity import com.github.anrwatchdog.ANRWatchDog import com.navi.alfred.AlfredConfig import com.navi.alfred.AlfredManager import com.navi.alfred.AlfredManager.isAlfredRecordingEnabled +import com.navi.alfred.demo.activity.MainActivity +import com.navi.alfred.demo.activity.SWWActivity import com.navi.alfred.utils.AlfredConstants import com.navi.alfred.utils.AlfredConstants.BROADCAST_ACTION_TYPE import com.navi.alfred.utils.log @@ -25,7 +25,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -class MainApplication : Application(), Application.ActivityLifecycleCallbacks { +class AlfredDemoApplication : Application(), Application.ActivityLifecycleCallbacks { private var appForegroundCounter: Int = 0 override fun onCreate() { diff --git a/app/src/main/java/com/alfred/demo/AlfredNetworkFailureReceiver.kt b/app/src/main/java/com/navi/alfred/demo/AlfredNetworkFailureReceiver.kt similarity index 98% rename from app/src/main/java/com/alfred/demo/AlfredNetworkFailureReceiver.kt rename to app/src/main/java/com/navi/alfred/demo/AlfredNetworkFailureReceiver.kt index e5758da..de14409 100644 --- a/app/src/main/java/com/alfred/demo/AlfredNetworkFailureReceiver.kt +++ b/app/src/main/java/com/navi/alfred/demo/AlfredNetworkFailureReceiver.kt @@ -5,7 +5,7 @@ * */ -package com.alfred.demo +package com.navi.alfred.demo import android.content.BroadcastReceiver import android.content.Context diff --git a/app/src/main/java/com/alfred/demo/activity/MainActivity.kt b/app/src/main/java/com/navi/alfred/demo/activity/MainActivity.kt similarity index 88% rename from app/src/main/java/com/alfred/demo/activity/MainActivity.kt rename to app/src/main/java/com/navi/alfred/demo/activity/MainActivity.kt index 8f74c06..3735f41 100644 --- a/app/src/main/java/com/alfred/demo/activity/MainActivity.kt +++ b/app/src/main/java/com/navi/alfred/demo/activity/MainActivity.kt @@ -1,19 +1,19 @@ /* * - * * Copyright © 2023 by Navi Technologies Limited + * * Copyright © 2023-2024 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ -package com.alfred.demo.activity +package com.navi.alfred.demo.activity import android.content.Intent import android.os.Bundle import android.view.MotionEvent import android.widget.Button import androidx.appcompat.app.AppCompatActivity -import com.alfred.demo.R import com.navi.alfred.AlfredManager +import com.navi.alfred.demo.R class MainActivity : AppCompatActivity() { diff --git a/app/src/main/java/com/alfred/demo/activity/SWWActivity.kt b/app/src/main/java/com/navi/alfred/demo/activity/SWWActivity.kt similarity index 76% rename from app/src/main/java/com/alfred/demo/activity/SWWActivity.kt rename to app/src/main/java/com/navi/alfred/demo/activity/SWWActivity.kt index 288de95..56ea295 100644 --- a/app/src/main/java/com/alfred/demo/activity/SWWActivity.kt +++ b/app/src/main/java/com/navi/alfred/demo/activity/SWWActivity.kt @@ -1,18 +1,18 @@ /* * - * * Copyright © 2023 by Navi Technologies Limited + * * Copyright © 2023-2024 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ -package com.alfred.demo.activity +package com.navi.alfred.demo.activity import android.os.Bundle import android.view.MotionEvent import android.widget.Button import androidx.appcompat.app.AppCompatActivity -import com.alfred.demo.R import com.navi.alfred.AlfredManager +import com.navi.alfred.demo.R class SWWActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -21,13 +21,20 @@ class SWWActivity : AppCompatActivity() { val button = findViewById