From 90b006acc59bdb09f7400f7f33fed67a20d88a72 Mon Sep 17 00:00:00 2001 From: Zane Schepke Date: Thu, 9 Nov 2023 01:50:53 -0500 Subject: [PATCH] change: build pipeline to fastlane deploy --- .github/workflows/android.yml | 66 ++++++++----------- Gemfile | 3 + app/build.gradle.kts | 34 +++++----- app/signing_template.properties | 2 +- build.gradle.kts | 2 - buildSrc/src/main/kotlin/Constants.kt | 12 ++++ fastlane/Appfile | 2 + fastlane/Fastfile | 17 +++++ .../android/en-US/changelogs/32100.txt | 3 + gradle/libs.versions.toml | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 11 files changed, 87 insertions(+), 58 deletions(-) create mode 100644 Gemfile create mode 100644 buildSrc/src/main/kotlin/Constants.kt create mode 100644 fastlane/Appfile create mode 100644 fastlane/Fastfile create mode 100644 fastlane/metadata/android/en-US/changelogs/32100.txt diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 9a470cb9..dd8ce7ee 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -9,8 +9,15 @@ on: jobs: build: name: Build Signed APK + # change to macos because of hilt issues on ubuntu in gradle 8.3 runs-on: ubuntu-latest + env: + KEY_STORE_PATH: ${{ secrets.KEY_STORE_PATH }} + SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }} + SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} + SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} + steps: - uses: actions/checkout@v3 - name: Set up JDK 17 @@ -29,72 +36,55 @@ jobs: uses: timheuer/base64-to-file@v1.2 with: fileName: 'android_keystore.jks' - fileDir: '/home/runner/work/wgtunnel/wgtunnel/app/keystore/' + fileDir: ${{ github.workspace }}/app/keystore/ encodedString: ${{ secrets.KEYSTORE }} + - name: Create service_account.json + id: createServiceAccount + run: echo '${{ secrets.SERVICE_ACCOUNT_JSON }}' > service_account.json + # Build and sign APK ("-x test" argument is used to skip tests) # add fdroid flavor for apk upload - name: Build Fdroid Release APK run: ./gradlew :app:assembleFdroidRelease -x test - env: - KEY_STORE_PATH: ${{ secrets.KEY_STORE_PATH }} - SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }} - SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} - SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} # get fdroid flavor release apk path - name: Get apk path id: apk-path run: echo "path=$(find . -regex '^.*/build/outputs/apk/fdroid/release/.*\.apk$' -type f | head -1)" >> $GITHUB_OUTPUT - # add general flavor for google play - - name: Build General Release AAB - id: buildRelease - run: ./gradlew bundleGeneralRelease - env: - KEY_STORE_PATH: ${{ secrets.KEY_STORE_PATH }} - SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }} - SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} - SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} - # Save the APK after the Build job is complete to publish it as a Github release in the next job - name: Upload APK uses: actions/upload-artifact@v3.1.2 with: name: wgtunnel path: ${{ steps.apk-path.outputs.path }} - - - name: Create service_account.json - id: createServiceAccount - run: echo '${{ secrets.SERVICE_ACCOUNT_JSON }}' > service_account.json - - # upload general flavor release aab to beta track - - name: Publish to Play Store BETA - id: publish - uses: r0adkll/upload-google-play@v1.1.2 - with: - serviceAccountJson: service_account.json - packageName: com.zaneschepke.wireguardautotunnel - releaseFiles: app/build/outputs/bundle/generalRelease/app-general-release.aab - track: beta - - release: - name: Release APK - needs: build - runs-on: ubuntu-latest - steps: - name: Download APK from build uses: actions/download-artifact@v1 with: name: wgtunnel - - name: Create Release + - name: Create Release with Fastlane changelog notes id: create_release uses: softprops/action-gh-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: + # fix hardcode changelog file name + body_path: ${{ github.workspace }}/fastlane/metadata/android/en-US/changelogs/32100.txt tag_name: ${{ github.ref_name }} name: Release ${{ github.ref_name }} draft: false prerelease: false - files: wgtunnel/${{ steps.apk-path.outputs.path }} + files: ${{ github.workspace }}/${{ steps.apk-path.outputs.path }} + deploy: + name: Deploy with fastlane + needs: build + runs-on: ubuntu-latest + steps: + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.2' # Not needed with a .ruby-version file + bundler-cache: true + + - name: Distribute app to Beta track 🚀 + run: (cd ${{ github.workspace }} && bundle install && bundle exec fastlane beta) diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000..adc90d98 --- /dev/null +++ b/Gemfile @@ -0,0 +1,3 @@ +source "https://rubygems.org" + +gem "fastlane" \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0036c7be..4af93387 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -9,15 +9,15 @@ plugins { } android { - namespace = "com.zaneschepke.wireguardautotunnel" - compileSdk = 34 + namespace = Constants.APP_ID + compileSdk = Constants.TARGET_SDK defaultConfig { - applicationId = "com.zaneschepke.wireguardautotunnel" - minSdk = 26 - targetSdk = 34 - versionCode = 32000 - versionName = "3.2.1" + applicationId = Constants.APP_ID + minSdk = Constants.MIN_SDK + targetSdk = Constants.TARGET_SDK + versionCode = Constants.VERSION_CODE + versionName = Constants.VERSION_NAME ksp { arg("room.schemaLocation", "$projectDir/schemas") @@ -41,16 +41,12 @@ android { load(file("signing_template.properties").reader()) } } - val storePassVarName = "SIGNING_STORE_PASSWORD" - val keyAliasVarName = "SIGNING_KEY_ALIAS" - val keyPassVarName = "SIGNING_KEY_PASSWORD" - val keyStorePathVarName = "KEY_STORE_PATH" //try to get secrets from env first for pipeline build, then properties file for local build - storeFile = file(System.getenv().getOrDefault(keyStorePathVarName, properties.getProperty(keyStorePathVarName))) - storePassword = System.getenv().getOrDefault(storePassVarName, properties.getProperty(storePassVarName)) - keyAlias = System.getenv().getOrDefault(keyAliasVarName, properties.getProperty(keyAliasVarName)) - keyPassword = System.getenv().getOrDefault(keyPassVarName, properties.getProperty(keyPassVarName)) + storeFile = file(System.getenv().getOrDefault(Constants.KEY_STORE_PATH_VAR, properties.getProperty(Constants.KEY_STORE_PATH_VAR))) + storePassword = System.getenv().getOrDefault(Constants.STORE_PASS_VAR, properties.getProperty(Constants.STORE_PASS_VAR)) + keyAlias = System.getenv().getOrDefault(Constants.KEY_ALIAS_VAR, properties.getProperty(Constants.KEY_ALIAS_VAR)) + keyPassword = System.getenv().getOrDefault(Constants.KEY_PASS_VAR, properties.getProperty(Constants.KEY_PASS_VAR)) } } @@ -119,6 +115,14 @@ android { } } +tasks.register("printVersionCode") { + doLast { + //print version code for CI + println(Constants.VERSION_CODE) + } +} + + val generalImplementation by configurations dependencies { implementation(libs.androidx.core.ktx) diff --git a/app/signing_template.properties b/app/signing_template.properties index f36c06d9..ba6add1f 100644 --- a/app/signing_template.properties +++ b/app/signing_template.properties @@ -1,4 +1,4 @@ SIGNING_STORE_PASSWORD= SIGNING_KEY_ALIAS= SIGNING_KEY_PASSWORD= -KEY_STORE_PATH= \ No newline at end of file +KEY_STORE_PATH=/ \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 3ecbf9b0..03881b7f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,8 +7,6 @@ buildscript { } } - - plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false diff --git a/buildSrc/src/main/kotlin/Constants.kt b/buildSrc/src/main/kotlin/Constants.kt new file mode 100644 index 00000000..ac69a0d4 --- /dev/null +++ b/buildSrc/src/main/kotlin/Constants.kt @@ -0,0 +1,12 @@ +object Constants { + const val VERSION_NAME = "3.2.1" + const val VERSION_CODE = 32100 + const val TARGET_SDK = 34 + const val MIN_SDK = 26 + const val APP_ID = "com.zaneschepke.wireguardautotunnel" + + const val STORE_PASS_VAR = "SIGNING_STORE_PASSWORD" + const val KEY_ALIAS_VAR = "SIGNING_KEY_ALIAS" + const val KEY_PASS_VAR = "SIGNING_KEY_PASSWORD" + const val KEY_STORE_PATH_VAR = "KEY_STORE_PATH" +} \ No newline at end of file diff --git a/fastlane/Appfile b/fastlane/Appfile new file mode 100644 index 00000000..1d07e664 --- /dev/null +++ b/fastlane/Appfile @@ -0,0 +1,2 @@ +json_key_file "service_account.json" +package_name "com.zaneschepke.wireguardautotunnel" \ No newline at end of file diff --git a/fastlane/Fastfile b/fastlane/Fastfile new file mode 100644 index 00000000..a2dec451 --- /dev/null +++ b/fastlane/Fastfile @@ -0,0 +1,17 @@ +default_platform(:android) + +platform :android do + + desc "Deploy a beta version to the Google Play" + lane :beta do + gradle(task: "clean bundleGeneralRelease") + upload_to_play_store(track: 'beta') + end + + desc "Deploy a new version to the Google Play" + lane :production do + gradle(task: "clean bundleGeneralRelease") + upload_to_play_store + end + +end \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/32100.txt b/fastlane/metadata/android/en-US/changelogs/32100.txt new file mode 100644 index 00000000..1a748590 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/32100.txt @@ -0,0 +1,3 @@ +Enhancements: +- Fix < Android 9 permission bug +- Other optimizations diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f83d5cc7..fb5f4a60 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,7 +21,7 @@ navigationCompose = "2.7.5" roomVersion = "2.6.0" timber = "5.0.1" tunnel = "1.0.20230706" -androidGradlePlugin = "8.3.0-alpha06" +androidGradlePlugin = "8.2.0-rc03" kotlin="1.9.10" ksp="1.9.10-1.0.13" composeBom="2023.10.01" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 056788da..6e06648e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Oct 11 22:39:21 EDT 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists