From 6fdd5819fa80f47bceafb963ef684e8991d6bbbf Mon Sep 17 00:00:00 2001 From: Ash Davies <1892070+ashdavies@users.noreply.github.com> Date: Sun, 18 Aug 2024 19:52:54 +0200 Subject: [PATCH 01/22] Configure release signing for conference app --- .gitignore | 11 ++++++++--- asg-service/src/.gitignore | 1 - conferences-app/build.gradle.kts | 26 ++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 4 deletions(-) delete mode 100644 asg-service/src/.gitignore diff --git a/.gitignore b/.gitignore index 31771504a..f8a94cd21 100644 --- a/.gitignore +++ b/.gitignore @@ -3,10 +3,10 @@ /.idea # Android -/gradle.properties -**/local.properties /captures *.hprof +*.apk +*.ap_ # Database *.db @@ -22,9 +22,14 @@ **/*.log # Gradle +/gradle.properties +**/local.properties .gradle build -/reports + +# Keystore Files +*.jks +*.keystore # Kotlin .kotlin/sessions diff --git a/asg-service/src/.gitignore b/asg-service/src/.gitignore deleted file mode 100644 index aa0e80b49..000000000 --- a/asg-service/src/.gitignore +++ /dev/null @@ -1 +0,0 @@ -**/schema.graphqls diff --git a/conferences-app/build.gradle.kts b/conferences-app/build.gradle.kts index 32111b9ae..3ce020a49 100644 --- a/conferences-app/build.gradle.kts +++ b/conferences-app/build.gradle.kts @@ -17,6 +17,32 @@ android { res.srcDirs("src/androidMain/res") } + val release by signingConfigs.creating { + val releaseStoreFile by stringProperty() + storeFile = rootProject.file(releaseStoreFile) + + val releaseStorePassword by stringProperty() + storePassword = releaseStorePassword + + val releaseKeyAlias by stringProperty() + keyAlias = releaseKeyAlias + + val releaseKeyPassword by stringProperty() + keyPassword = releaseKeyPassword + } + + buildTypes { + debug { + applicationIdSuffix = ".debug" + } + + release { + isMinifyEnabled = true + isShrinkResources = true + signingConfig = release + } + } + defaultConfig { versionName = "1.0" versionCode = 1 From 2cfb1045e5327c47c00d1c1d111ebe53d29be0af Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Sun, 18 Aug 2024 23:29:18 +0200 Subject: [PATCH 02/22] Adjust string properties for better call site usage --- conferences-app/build.gradle.kts | 23 +++----- .../src/main/kotlin/StringProperty.kt | 53 ++++++++++++------- 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/conferences-app/build.gradle.kts b/conferences-app/build.gradle.kts index 3ce020a49..eacaaac64 100644 --- a/conferences-app/build.gradle.kts +++ b/conferences-app/build.gradle.kts @@ -18,17 +18,11 @@ android { } val release by signingConfigs.creating { - val releaseStoreFile by stringProperty() - storeFile = rootProject.file(releaseStoreFile) + val releaseStoreFile by stringProperty { storeFile = rootProject.file(it) } + val releaseStorePassword by stringProperty { storePassword = it } - val releaseStorePassword by stringProperty() - storePassword = releaseStorePassword - - val releaseKeyAlias by stringProperty() - keyAlias = releaseKeyAlias - - val releaseKeyPassword by stringProperty() - keyPassword = releaseKeyPassword + val releaseKeyAlias by stringProperty { keyAlias = it } + val releaseKeyPassword by stringProperty { keyPassword = it } } buildTypes { @@ -52,13 +46,8 @@ android { } buildConfig { - val androidApiKey by stringProperty { value -> - buildConfigField("ANDROID_API_KEY", value) - } - - val androidStrictMode by booleanProperty { value -> - buildConfigField("ANDROID_STRICT_MODE", value) - } + val androidApiKey by stringPropertyWithTag(::buildConfigField) + val androidStrictMode by stringPropertyWithTag(::buildConfigField) packageName.set(android.namespace) } diff --git a/fused-properties/src/main/kotlin/StringProperty.kt b/fused-properties/src/main/kotlin/StringProperty.kt index 9a53bfee7..d6e77eb89 100644 --- a/fused-properties/src/main/kotlin/StringProperty.kt +++ b/fused-properties/src/main/kotlin/StringProperty.kt @@ -6,39 +6,56 @@ import kotlin.properties.ReadOnlyProperty public fun interface ReadOnlyDelegateProvider : PropertyDelegateProvider> -private fun Project.stringPropertyProvider(propertyName: String): Provider { +private interface PropertyDefinition { + val gradlePropertyName: String + val envPropertyName: String +} + +private fun PropertyDefinition(propertyName: String) = object : PropertyDefinition { + private val propertyNameParts = propertyName.split(Regex("(?=[A-Z])")) + override val gradlePropertyName = propertyNameParts.joinToString(".") { it.lowercase() } + override val envPropertyName = propertyNameParts.joinToString("_") { it.uppercase() } +} + +private fun Project.stringPropertyProvider(definition: PropertyDefinition): Provider { val rootPropertiesProvider = rootProject.cachedLocalPropertiesProvider() val localPropertiesProvider = cachedLocalPropertiesProvider() val startPropertiesProvider = startParameterProvider() - val propertyNameParts = propertyName.split(Regex("(?=[A-Z])")) - val gradlePropertyName = propertyNameParts.joinToString(".") { it.lowercase() } - val envPropertyName = propertyNameParts.joinToString("_") { it.uppercase() } - - return startPropertiesProvider.mapOrNull { it[gradlePropertyName] } - .orElse(localPropertiesProvider.map { it.getProperty(gradlePropertyName) }) - .orElse(rootPropertiesProvider.map { it.getProperty(gradlePropertyName) }) - .orElse(providers.gradleProperty(gradlePropertyName)) - .orElse(providers.environmentVariable(envPropertyName)) + return startPropertiesProvider.mapOrNull { it[definition.gradlePropertyName] } + .orElse(localPropertiesProvider.map { it.getProperty(definition.gradlePropertyName) }) + .orElse(rootPropertiesProvider.map { it.getProperty(definition.gradlePropertyName) }) + .orElse(providers.gradleProperty(definition.gradlePropertyName)) + .orElse(providers.environmentVariable(definition.envPropertyName)) } public fun Project.booleanProperty(block: (Boolean) -> Unit = { }): ReadOnlyDelegateProvider { - return readOnlyDelegateProvider { it.get().toBoolean().also(block) } + return readOnlyDelegateProvider { provider, _ -> provider.get().toBoolean().also(block) } +} + +public fun Project.stringPropertyWithTag(action: (String, String) -> Unit): ReadOnlyDelegateProvider { + return readOnlyDelegateProvider { provider, tag -> provider.get().also { action(tag, it) } } } public fun Project.stringProperty(block: (String) -> Unit = { }): ReadOnlyDelegateProvider { - return readOnlyDelegateProvider { it.get().also(block) } + return readOnlyDelegateProvider { provider, _ -> provider.get().also(block) } } public fun Project.stringPropertyOrNull(block: (String?) -> Unit = { }): ReadOnlyDelegateProvider { - return readOnlyDelegateProvider { it.orNull.also(block) } + return readOnlyDelegateProvider { provider, _ -> provider.orNull.also(block) } } -private fun Project.readOnlyDelegateProvider(transform: (Provider) -> T): ReadOnlyDelegateProvider { - return ReadOnlyDelegateProvider { _, property -> - val value = transform(stringPropertyProvider(property.name)) - ReadOnlyProperty { _, _ -> value } - } +private fun Project.readOnlyDelegateProvider( + transform: (provider: Provider, tag: String) -> T, +): ReadOnlyDelegateProvider = ReadOnlyDelegateProvider { _, property -> + val definition = PropertyDefinition(property.name) + + val value = transform( + stringPropertyProvider(definition), + definition.envPropertyName, + ) + + ReadOnlyProperty { _, _ -> value } } private fun Provider.mapOrNull(block: (S) -> T?): Provider { From c8ec19ef1e48853400e5b2b4d4ea4a871667ac4e Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Sat, 24 Aug 2024 18:52:40 +0200 Subject: [PATCH 03/22] Create new workflow --- .github/workflows/android-release.yml | 48 +++++++++++++++++++ conferences-app/build.gradle.kts | 4 +- .../kotlin/io/ashdavies/party/MainActivity.kt | 4 +- 3 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/android-release.yml diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml new file mode 100644 index 000000000..d1d053be6 --- /dev/null +++ b/.github/workflows/android-release.yml @@ -0,0 +1,48 @@ +name: Distribute Release +on: [ pull_request ] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number }} + cancel-in-progress: true + +jobs: + build: + name: Pre Merge Checks + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Decrypt Google Services + env: + GOOGLE_SERVICES_PASSPHRASE: ${{ secrets.google_services_passphrase }} + run: find . -type f -name "google-services.aes" -exec sh -c 'openssl aes-256-cbc -md sha256 -d -in "$0" -out "${0%.aes*}.json" -k "${GOOGLE_SERVICES_PASSPHRASE}"' {} \; + + - uses: ./.github/actions/setup-gradle + + - id: op-secrets + uses: 1password/load-secrets-action/configure@v1 + with: + service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} + export-env: false + env: + KEYSTORE_BASE64: op://development/playground-keystore/keystore-base64 + KEYSTORE_PASSWORD: op//development/playground-keystore/keystore-password + KEY_ALIAS: op://development/playground-keystore/key-alias + KEY_PASSWORD: op://development/playground-keystore/key-password + + - env: + KEYSTORE_BASE64: ${{ op-secrets.KEYSTORE_BASE64 }} + run: | + echo KEYSTORE_BASE64 | base64 --decode > keystore.jks + + - id: gradle + env: + ANDROID_API_KEY: ${{ secrets.ANDROID_API_KEY }} + BROWSER_API_KEY: ${{ secrets.BROWSER_API_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SERVER_CLIENT_ID: ${{ secrets.SERVER_CLIENT_ID }} + + RELEASE_STORE_FILE: ${{ op-secrets.outputs.KEYSTORE_FILE }} + RELEASE_KEY_ALIAS: ${{ op-secrets.outputs.KEY_ALIAS }} + run: ./gradlew assembleRelease --console=plain diff --git a/conferences-app/build.gradle.kts b/conferences-app/build.gradle.kts index eacaaac64..8bdde90a8 100644 --- a/conferences-app/build.gradle.kts +++ b/conferences-app/build.gradle.kts @@ -18,8 +18,8 @@ android { } val release by signingConfigs.creating { - val releaseStoreFile by stringProperty { storeFile = rootProject.file(it) } - val releaseStorePassword by stringProperty { storePassword = it } + val keyStoreFile by stringProperty { storeFile = rootProject.file(it) } + val keyStorePassword by stringProperty { storePassword = it } val releaseKeyAlias by stringProperty { keyAlias = it } val releaseKeyPassword by stringProperty { keyPassword = it } diff --git a/conferences-app/src/androidMain/kotlin/io/ashdavies/party/MainActivity.kt b/conferences-app/src/androidMain/kotlin/io/ashdavies/party/MainActivity.kt index c35859dda..2e5fe062f 100644 --- a/conferences-app/src/androidMain/kotlin/io/ashdavies/party/MainActivity.kt +++ b/conferences-app/src/androidMain/kotlin/io/ashdavies/party/MainActivity.kt @@ -46,13 +46,13 @@ internal class MainActivity : ComponentActivity() { } setContent { - LauncherApp { intent.getStringExtra(it) } + LauncherApp() } } } @Composable -private fun LauncherApp(context: Context = LocalContext.current, extra: (String) -> String?) { +private fun LauncherApp(context: Context = LocalContext.current) { ProvideHttpClient( config = { install(DefaultRequest) { From 8e7ab069825bf89a558945c228916045113fcd97 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Sat, 24 Aug 2024 19:13:37 +0200 Subject: [PATCH 04/22] Use nullable signing configuration --- .github/workflows/android-release.yml | 4 ++-- conferences-app/build.gradle.kts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index d1d053be6..3f3182ec1 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -1,4 +1,4 @@ -name: Distribute Release +name: Android Release on: [ pull_request ] concurrency: @@ -32,7 +32,7 @@ jobs: KEY_PASSWORD: op://development/playground-keystore/key-password - env: - KEYSTORE_BASE64: ${{ op-secrets.KEYSTORE_BASE64 }} + KEYSTORE_BASE64: ${{ steps.op-secrets.KEYSTORE_BASE64 }} run: | echo KEYSTORE_BASE64 | base64 --decode > keystore.jks diff --git a/conferences-app/build.gradle.kts b/conferences-app/build.gradle.kts index 8bdde90a8..9265b9a5a 100644 --- a/conferences-app/build.gradle.kts +++ b/conferences-app/build.gradle.kts @@ -18,11 +18,11 @@ android { } val release by signingConfigs.creating { - val keyStoreFile by stringProperty { storeFile = rootProject.file(it) } - val keyStorePassword by stringProperty { storePassword = it } + val keyStoreFile by stringPropertyOrNull { storeFile = it?.let(rootProject::file) } + val keyStorePassword by stringPropertyOrNull { storePassword = it } - val releaseKeyAlias by stringProperty { keyAlias = it } - val releaseKeyPassword by stringProperty { keyPassword = it } + val releaseKeyAlias by stringPropertyOrNull { keyAlias = it } + val releaseKeyPassword by stringPropertyOrNull { keyPassword = it } } buildTypes { From 0fc2e1d8296ead99ebccdaa13ee9897fba0ec7a0 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Sat, 24 Aug 2024 19:43:48 +0200 Subject: [PATCH 05/22] Migrate Google Services json to 1Password --- .github/workflows/android-release.yml | 15 ++++++------- .../{pre-merge.yml => pull-request.yml} | 20 ++++++++++++------ app-launcher/android/google-services.aes | Bin 1408 -> 0 bytes conferences-app/google-services.aes | Bin 1408 -> 0 bytes 4 files changed, 21 insertions(+), 14 deletions(-) rename .github/workflows/{pre-merge.yml => pull-request.yml} (74%) delete mode 100644 app-launcher/android/google-services.aes delete mode 100644 conferences-app/google-services.aes diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 3f3182ec1..5dcfbef1e 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -13,11 +13,6 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Decrypt Google Services - env: - GOOGLE_SERVICES_PASSPHRASE: ${{ secrets.google_services_passphrase }} - run: find . -type f -name "google-services.aes" -exec sh -c 'openssl aes-256-cbc -md sha256 -d -in "$0" -out "${0%.aes*}.json" -k "${GOOGLE_SERVICES_PASSPHRASE}"' {} \; - - uses: ./.github/actions/setup-gradle - id: op-secrets @@ -26,14 +21,17 @@ jobs: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} export-env: false env: + GOOGLE_SERVICES: op://development/google-services-(playground-release)/base64 KEYSTORE_BASE64: op://development/playground-keystore/keystore-base64 KEYSTORE_PASSWORD: op//development/playground-keystore/keystore-password KEY_ALIAS: op://development/playground-keystore/key-alias KEY_PASSWORD: op://development/playground-keystore/key-password - env: + GOOGLE_SERVICES: ${{ steps.op-secrets.GOOGLE_SERVICES }} KEYSTORE_BASE64: ${{ steps.op-secrets.KEYSTORE_BASE64 }} run: | + echo GOOGLE_SERVICES | base64 --decode > google-services.json echo KEYSTORE_BASE64 | base64 --decode > keystore.jks - id: gradle @@ -41,8 +39,9 @@ jobs: ANDROID_API_KEY: ${{ secrets.ANDROID_API_KEY }} BROWSER_API_KEY: ${{ secrets.BROWSER_API_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + KEY_STORE_FILE: keystore.jks + KEY_STORE_PASSWORD: ${{ steps.op-secrets.outputs.KEYSTORE_PASSWORD }} + RELEASE_KEY_ALIAS: ${{ steps.op-secrets.outputs.KEY_ALIAS }} + RELEASE_KEY_PASSWORD: ${{ steps.op-secrets.outputs.KEY_PASSWORD }} SERVER_CLIENT_ID: ${{ secrets.SERVER_CLIENT_ID }} - - RELEASE_STORE_FILE: ${{ op-secrets.outputs.KEYSTORE_FILE }} - RELEASE_KEY_ALIAS: ${{ op-secrets.outputs.KEY_ALIAS }} run: ./gradlew assembleRelease --console=plain diff --git a/.github/workflows/pre-merge.yml b/.github/workflows/pull-request.yml similarity index 74% rename from .github/workflows/pre-merge.yml rename to .github/workflows/pull-request.yml index f19446c83..4eed08676 100644 --- a/.github/workflows/pre-merge.yml +++ b/.github/workflows/pull-request.yml @@ -1,4 +1,4 @@ -name: Pre Merge Checks +name: Pull Request on: [ pull_request ] concurrency: @@ -17,11 +17,6 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Decrypt Google Services - env: - GOOGLE_SERVICES_PASSPHRASE: ${{ secrets.google_services_passphrase }} - run: find . -type f -name "google-services.aes" -exec sh -c 'openssl aes-256-cbc -md sha256 -d -in "$0" -out "${0%.aes*}.json" -k "${GOOGLE_SERVICES_PASSPHRASE}"' {} \; - - id: setup-cloud uses: ./.github/actions/setup-cloud with: @@ -31,6 +26,19 @@ jobs: - uses: ./.github/actions/setup-gradle + - id: op-secrets + uses: 1password/load-secrets-action/configure@v1 + with: + service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} + export-env: false + env: + GOOGLE_SERVICES: op://development/google-services-(playground-release)/base64 + + - env: + GOOGLE_SERVICES: ${{ steps.op-secrets.GOOGLE_SERVICES }} + run: | + echo GOOGLE_SERVICES | base64 --decode > google-services.json + - id: gradle env: ANDROID_API_KEY: ${{ secrets.ANDROID_API_KEY }} diff --git a/app-launcher/android/google-services.aes b/app-launcher/android/google-services.aes deleted file mode 100644 index c60b6fa3eb67082c05ffbc0fa55c958ec1bd59b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1408 zcmV-`1%LWeVQh3|WM5z8GtTc*rVW3JelSxek^PGNM+j9yySde~s`w%(%aov4)}EaI zPVgKVscSm_20BaPhI?2w>^%3aO8i&ASIH=NL;mgWWzFXa#!DE9uo@%nN}$}lhp=je z4LSZa&!;P?$A3VS2PN|$b!wHQhg-T%d9Zz~fAlbq!tHm(evjL@V=?!eP63zwHRC~J zbA0_sW(>NbYp+@fGc}bN2;)OD${tBBYXu2cndX*Sp)+V~NY6axb+xG@U0?`NAGqb1*>{trG8C#)$la$ZCwdkCoFTo1r1PgWeFvk{F+%Ky155lkY(n8;-Hv+RV_bfkrO8>VKB4Y6 zEJ)vT?M>`2wX7|4?poZG!%YF{wm8(=S2e@&GuT=k35u7Rz zw1WPPi|GZz{hDUKP$FI-4AvbEDg~)IEC|kUs1DCHr}0p_1q2)=;mbntP2&9)BZT#23RE z!Rg+v!o@pM`qkMPP4)zK5q7_87Q%!q4OPHq)3Mj;Tf!;KQ1B>sFe7w_B7owh$sVD6 zIML-(-kh&(?v78|tIZ3=ncnGbNhRyGKBlIwt44iC>8H9KIpKL!1nCr^jpf^q4u}Hg zt(hWQ#H@H$_2LSUUvKgtb^q>lfc>82>K8hg^Qg8iJjX%iZ(#^Mk~Awn+o(AD)+kC(py2L!gjJt*?O zDs3#yOGGnOi-|g$6_h=E>!*E>=6I;5Q|ylZ&;jpdDO!!EZT?F%rRs{k zL1@<|`z=JNe2?N6nZleQQBd%fg6!kMCf%IH|Bvzeb=HCz$PaTFnl~9)f6|CPzC8Un zU#4i))Q}#Ji28~3v8k5XR!XOK#kVNyGm!zBUqbh6aGN@%b@U9MS-5t%@BTh;yn93o z>*=En|7x;R{)vRfE}~PGUYyDO0|3(%wcJ|AP1K>wxN*Sj>^cAhA3I}0YA+VgQ2BqEl$iJ= z{bRIWSyunsg9pB1V?nEt*u8%)qQyII)t3CReKju9SDXiGxGWHwHwxYHM^^}((7 O>qI;eLREw)qNoLWRLp4r diff --git a/conferences-app/google-services.aes b/conferences-app/google-services.aes deleted file mode 100644 index c60b6fa3eb67082c05ffbc0fa55c958ec1bd59b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1408 zcmV-`1%LWeVQh3|WM5z8GtTc*rVW3JelSxek^PGNM+j9yySde~s`w%(%aov4)}EaI zPVgKVscSm_20BaPhI?2w>^%3aO8i&ASIH=NL;mgWWzFXa#!DE9uo@%nN}$}lhp=je z4LSZa&!;P?$A3VS2PN|$b!wHQhg-T%d9Zz~fAlbq!tHm(evjL@V=?!eP63zwHRC~J zbA0_sW(>NbYp+@fGc}bN2;)OD${tBBYXu2cndX*Sp)+V~NY6axb+xG@U0?`NAGqb1*>{trG8C#)$la$ZCwdkCoFTo1r1PgWeFvk{F+%Ky155lkY(n8;-Hv+RV_bfkrO8>VKB4Y6 zEJ)vT?M>`2wX7|4?poZG!%YF{wm8(=S2e@&GuT=k35u7Rz zw1WPPi|GZz{hDUKP$FI-4AvbEDg~)IEC|kUs1DCHr}0p_1q2)=;mbntP2&9)BZT#23RE z!Rg+v!o@pM`qkMPP4)zK5q7_87Q%!q4OPHq)3Mj;Tf!;KQ1B>sFe7w_B7owh$sVD6 zIML-(-kh&(?v78|tIZ3=ncnGbNhRyGKBlIwt44iC>8H9KIpKL!1nCr^jpf^q4u}Hg zt(hWQ#H@H$_2LSUUvKgtb^q>lfc>82>K8hg^Qg8iJjX%iZ(#^Mk~Awn+o(AD)+kC(py2L!gjJt*?O zDs3#yOGGnOi-|g$6_h=E>!*E>=6I;5Q|ylZ&;jpdDO!!EZT?F%rRs{k zL1@<|`z=JNe2?N6nZleQQBd%fg6!kMCf%IH|Bvzeb=HCz$PaTFnl~9)f6|CPzC8Un zU#4i))Q}#Ji28~3v8k5XR!XOK#kVNyGm!zBUqbh6aGN@%b@U9MS-5t%@BTh;yn93o z>*=En|7x;R{)vRfE}~PGUYyDO0|3(%wcJ|AP1K>wxN*Sj>^cAhA3I}0YA+VgQ2BqEl$iJ= z{bRIWSyunsg9pB1V?nEt*u8%)qQyII)t3CReKju9SDXiGxGWHwHwxYHM^^}((7 O>qI;eLREw)qNoLWRLp4r From 2b53d7f39d1de0bb82d9b2ca59ac4875403bbf41 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Sat, 24 Aug 2024 20:10:05 +0200 Subject: [PATCH 06/22] Bump version of 1Password secrets --- .github/workflows/android-release.yml | 4 ++-- .github/workflows/pull-request.yml | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 5dcfbef1e..fac08c369 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -7,7 +7,7 @@ concurrency: jobs: build: - name: Pre Merge Checks + name: Assemble Release runs-on: ubuntu-latest steps: @@ -16,7 +16,7 @@ jobs: - uses: ./.github/actions/setup-gradle - id: op-secrets - uses: 1password/load-secrets-action/configure@v1 + uses: 1password/load-secrets-action/configure@v2 with: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} export-env: false diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 4eed08676..926c9a7eb 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -7,7 +7,7 @@ concurrency: jobs: build: - name: Pre Merge Checks + name: Build runs-on: ubuntu-latest permissions: @@ -27,12 +27,13 @@ jobs: - uses: ./.github/actions/setup-gradle - id: op-secrets - uses: 1password/load-secrets-action/configure@v1 + uses: 1password/load-secrets-action/configure@v2 with: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} export-env: false env: GOOGLE_SERVICES: op://development/google-services-(playground-release)/base64 + SHOULD_FAILE_NOT_FOUND: op://development/should-fail-not-found/should-fail-not-found - env: GOOGLE_SERVICES: ${{ steps.op-secrets.GOOGLE_SERVICES }} From e0117b560856a598f393a54363eccbc641397256 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Sat, 24 Aug 2024 20:50:07 +0200 Subject: [PATCH 07/22] Debug key storage with hello world --- .github/workflows/pull-request.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 926c9a7eb..feaf107b8 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -32,13 +32,16 @@ jobs: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} export-env: false env: + HELLO_WORLD: op://development/hello/world GOOGLE_SERVICES: op://development/google-services-(playground-release)/base64 - SHOULD_FAILE_NOT_FOUND: op://development/should-fail-not-found/should-fail-not-found + SHOULD_FAIL_NOT_FOUND: op://development/should-fail-not-found/should-fail-not-found - env: GOOGLE_SERVICES: ${{ steps.op-secrets.GOOGLE_SERVICES }} + HELLO_WORLD: ${{ steps.op-secrets.HELLO_WORLD }} run: | - echo GOOGLE_SERVICES | base64 --decode > google-services.json + echo $GOOGLE_SERVICES | base64 --decode > google-services.json + echo "${#HELLO_WORLD} : $HELLO_WORLD" - id: gradle env: From 7aa7f8ff265c35fa5b14e0774aae3c7cd48df383 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Sat, 24 Aug 2024 20:56:22 +0200 Subject: [PATCH 08/22] Is this case sensitive? --- .github/workflows/pull-request.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index feaf107b8..ba6554a73 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -32,9 +32,9 @@ jobs: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} export-env: false env: - HELLO_WORLD: op://development/hello/world - GOOGLE_SERVICES: op://development/google-services-(playground-release)/base64 - SHOULD_FAIL_NOT_FOUND: op://development/should-fail-not-found/should-fail-not-found + HELLO_WORLD: op://Development/hello/world + GOOGLE_SERVICES: op://Development/google-services-(playground-release)/base64 + SHOULD_FAIL_NOT_FOUND: op://Development/should-fail-not-found/should-fail-not-found - env: GOOGLE_SERVICES: ${{ steps.op-secrets.GOOGLE_SERVICES }} From 4fdbcfcd72e118e0c7965bddace5399fd8dad73d Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Sat, 24 Aug 2024 21:27:13 +0200 Subject: [PATCH 09/22] CLI is not case sensitive --- .github/workflows/android-release.yml | 10 +++++----- .github/workflows/pull-request.yml | 5 ++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index fac08c369..d3c03d107 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -21,11 +21,11 @@ jobs: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} export-env: false env: - GOOGLE_SERVICES: op://development/google-services-(playground-release)/base64 - KEYSTORE_BASE64: op://development/playground-keystore/keystore-base64 - KEYSTORE_PASSWORD: op//development/playground-keystore/keystore-password - KEY_ALIAS: op://development/playground-keystore/key-alias - KEY_PASSWORD: op://development/playground-keystore/key-password + GOOGLE_SERVICES: op://development/google services (playground release)/base64 + KEYSTORE_BASE64: op://development/playground keystore/keystore base64 + KEYSTORE_PASSWORD: op//development/playground keystore/keystore password + KEY_ALIAS: op://development/playground keystore/key alias + KEY_PASSWORD: op://development/playground keystore/key password - env: GOOGLE_SERVICES: ${{ steps.op-secrets.GOOGLE_SERVICES }} diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index ba6554a73..fbdde3131 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -32,9 +32,8 @@ jobs: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} export-env: false env: - HELLO_WORLD: op://Development/hello/world - GOOGLE_SERVICES: op://Development/google-services-(playground-release)/base64 - SHOULD_FAIL_NOT_FOUND: op://Development/should-fail-not-found/should-fail-not-found + GOOGLE_SERVICES: op://development/google services (playground release)/base64 + HELLO_WORLD: op://development/hello/world - env: GOOGLE_SERVICES: ${{ steps.op-secrets.GOOGLE_SERVICES }} From eaf4502414448ef10f3f31df00cb0f4db799d8e5 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Sat, 24 Aug 2024 21:38:19 +0200 Subject: [PATCH 10/22] Adjust vault structure for simpler naming --- .github/workflows/android-release.yml | 2 +- .github/workflows/pull-request.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index d3c03d107..2638e272a 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -21,7 +21,7 @@ jobs: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} export-env: false env: - GOOGLE_SERVICES: op://development/google services (playground release)/base64 + GOOGLE_SERVICES: op://development/google services/playground release/base64 KEYSTORE_BASE64: op://development/playground keystore/keystore base64 KEYSTORE_PASSWORD: op//development/playground keystore/keystore password KEY_ALIAS: op://development/playground keystore/key alias diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index fbdde3131..a7cec11d8 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -32,7 +32,7 @@ jobs: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} export-env: false env: - GOOGLE_SERVICES: op://development/google services (playground release)/base64 + GOOGLE_SERVICES: op://development/google services/playground release/base64 HELLO_WORLD: op://development/hello/world - env: From 88ee94bb55ff4d81bfe548df10546a34c57323ce Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Sat, 24 Aug 2024 21:40:42 +0200 Subject: [PATCH 11/22] Move hello world to release workflow --- .github/workflows/android-release.yml | 3 +++ .github/workflows/pull-request.yml | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 2638e272a..671b398c0 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -21,6 +21,7 @@ jobs: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} export-env: false env: + HELLO_WORLD: op://development/hello/world GOOGLE_SERVICES: op://development/google services/playground release/base64 KEYSTORE_BASE64: op://development/playground keystore/keystore base64 KEYSTORE_PASSWORD: op//development/playground keystore/keystore password @@ -28,9 +29,11 @@ jobs: KEY_PASSWORD: op://development/playground keystore/key password - env: + HELLO_WORLD: ${{ steps.op-secrets.HELLO_WORLD }} GOOGLE_SERVICES: ${{ steps.op-secrets.GOOGLE_SERVICES }} KEYSTORE_BASE64: ${{ steps.op-secrets.KEYSTORE_BASE64 }} run: | + echo "${#HELLO_WORLD} : $HELLO_WORLD" echo GOOGLE_SERVICES | base64 --decode > google-services.json echo KEYSTORE_BASE64 | base64 --decode > keystore.jks diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index a7cec11d8..f441bf4cb 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -33,14 +33,11 @@ jobs: export-env: false env: GOOGLE_SERVICES: op://development/google services/playground release/base64 - HELLO_WORLD: op://development/hello/world - env: GOOGLE_SERVICES: ${{ steps.op-secrets.GOOGLE_SERVICES }} - HELLO_WORLD: ${{ steps.op-secrets.HELLO_WORLD }} run: | echo $GOOGLE_SERVICES | base64 --decode > google-services.json - echo "${#HELLO_WORLD} : $HELLO_WORLD" - id: gradle env: From 9b05a67d9a052cd3e702c21ae1372ed8785f06f0 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Sat, 24 Aug 2024 21:51:15 +0200 Subject: [PATCH 12/22] Quotes maybe? --- .github/workflows/android-release.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 671b398c0..739a9fce3 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -21,12 +21,12 @@ jobs: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} export-env: false env: - HELLO_WORLD: op://development/hello/world - GOOGLE_SERVICES: op://development/google services/playground release/base64 - KEYSTORE_BASE64: op://development/playground keystore/keystore base64 - KEYSTORE_PASSWORD: op//development/playground keystore/keystore password - KEY_ALIAS: op://development/playground keystore/key alias - KEY_PASSWORD: op://development/playground keystore/key password + HELLO_WORLD: "op://development/hello/world" + GOOGLE_SERVICES: "op://development/google services/playground release/base64" + KEYSTORE_BASE64: "op://development/playground keystore/keystore base64" + KEYSTORE_PASSWORD: "op://development/playground keystore/keystore password" + KEY_ALIAS: "op://development/playground keystore/key alias" + KEY_PASSWORD: "op://development/playground keystore/key password" - env: HELLO_WORLD: ${{ steps.op-secrets.HELLO_WORLD }} From 360164fffbdd74c1ce38da211b8397b430e264e4 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Mon, 26 Aug 2024 22:22:35 +0200 Subject: [PATCH 13/22] Remove hello world --- .github/workflows/android-release.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 739a9fce3..9507331f2 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -15,13 +15,15 @@ jobs: - uses: ./.github/actions/setup-gradle - - id: op-secrets - uses: 1password/load-secrets-action/configure@v2 + - uses: 1password/load-secrets-action/configure@v2 with: service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} + + - id: op-secrets + uses: 1password/load-secrets-action@v2 + with: export-env: false env: - HELLO_WORLD: "op://development/hello/world" GOOGLE_SERVICES: "op://development/google services/playground release/base64" KEYSTORE_BASE64: "op://development/playground keystore/keystore base64" KEYSTORE_PASSWORD: "op://development/playground keystore/keystore password" @@ -29,13 +31,12 @@ jobs: KEY_PASSWORD: "op://development/playground keystore/key password" - env: - HELLO_WORLD: ${{ steps.op-secrets.HELLO_WORLD }} GOOGLE_SERVICES: ${{ steps.op-secrets.GOOGLE_SERVICES }} KEYSTORE_BASE64: ${{ steps.op-secrets.KEYSTORE_BASE64 }} run: | - echo "${#HELLO_WORLD} : $HELLO_WORLD" - echo GOOGLE_SERVICES | base64 --decode > google-services.json - echo KEYSTORE_BASE64 | base64 --decode > keystore.jks + echo $GOOGLE_SERVICES | base64 --decode > app-launcher/android/google-services.json + echo $GOOGLE_SERVICES | base64 --decode > conferences-app/google-services.json + echo $KEYSTORE_BASE64 | base64 --decode > keystore.jks - id: gradle env: From e38ab02551606effaac254fa08048da953b5a710 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Mon, 26 Aug 2024 22:40:23 +0200 Subject: [PATCH 14/22] Default application credentials required --- .github/workflows/android-release.yml | 6 ++++++ .github/workflows/pull-request.yml | 3 +-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 9507331f2..2fe8bdba6 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -13,6 +13,12 @@ jobs: steps: - uses: actions/checkout@v3 + - uses: ./.github/actions/setup-cloud + with: + workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY }} + service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_ID }} + setup_gcloud: false + - uses: ./.github/actions/setup-gradle - uses: 1password/load-secrets-action/configure@v2 diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 80d2bd5da..c971258bc 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -17,8 +17,7 @@ jobs: steps: - uses: actions/checkout@v3 - - id: setup-cloud - uses: ./.github/actions/setup-cloud + - uses: ./.github/actions/setup-cloud with: workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY }} service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_ID }} From e181bfe03c6c223a9abf64adedb5797307067bb6 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Mon, 26 Aug 2024 22:46:08 +0200 Subject: [PATCH 15/22] Include token permissions --- .github/workflows/android-release.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 2fe8bdba6..fdad5a84b 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -10,6 +10,10 @@ jobs: name: Assemble Release runs-on: ubuntu-latest + permissions: + pull-requests: 'write' + id-token: 'write' + steps: - uses: actions/checkout@v3 From 5485273f3b47a2705271763ef188241379be40c4 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Mon, 26 Aug 2024 22:52:24 +0200 Subject: [PATCH 16/22] Use step outputs --- .github/workflows/android-release.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index fdad5a84b..198ad5196 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -34,15 +34,15 @@ jobs: with: export-env: false env: - GOOGLE_SERVICES: "op://development/google services/playground release/base64" - KEYSTORE_BASE64: "op://development/playground keystore/keystore base64" - KEYSTORE_PASSWORD: "op://development/playground keystore/keystore password" - KEY_ALIAS: "op://development/playground keystore/key alias" - KEY_PASSWORD: "op://development/playground keystore/key password" + GOOGLE_SERVICES: op://development/google services/playground release/base64 + KEYSTORE_BASE64: op://development/playground keystore/keystore base64 + KEYSTORE_PASSWORD: op://development/playground keystore/keystore password + KEY_ALIAS: op://development/playground keystore/key alias + KEY_PASSWORD: op://development/playground keystore/key password - env: - GOOGLE_SERVICES: ${{ steps.op-secrets.GOOGLE_SERVICES }} - KEYSTORE_BASE64: ${{ steps.op-secrets.KEYSTORE_BASE64 }} + GOOGLE_SERVICES: ${{ steps.op-secrets.outputs.GOOGLE_SERVICES }} + KEYSTORE_BASE64: ${{ steps.op-secrets.outputs.KEYSTORE_BASE64 }} run: | echo $GOOGLE_SERVICES | base64 --decode > app-launcher/android/google-services.json echo $GOOGLE_SERVICES | base64 --decode > conferences-app/google-services.json From 3e7a64e19dabc853820ca03b1dde30c6bac0c5b9 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Mon, 26 Aug 2024 23:08:21 +0200 Subject: [PATCH 17/22] Create boolean property with tag function --- conferences-app/build.gradle.kts | 2 +- fused-properties/src/main/kotlin/StringProperty.kt | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/conferences-app/build.gradle.kts b/conferences-app/build.gradle.kts index 9265b9a5a..f588c049a 100644 --- a/conferences-app/build.gradle.kts +++ b/conferences-app/build.gradle.kts @@ -47,7 +47,7 @@ android { buildConfig { val androidApiKey by stringPropertyWithTag(::buildConfigField) - val androidStrictMode by stringPropertyWithTag(::buildConfigField) + val androidStrictMode by booleanPropertyWithTag(::buildConfigField) packageName.set(android.namespace) } diff --git a/fused-properties/src/main/kotlin/StringProperty.kt b/fused-properties/src/main/kotlin/StringProperty.kt index d6e77eb89..837002dd9 100644 --- a/fused-properties/src/main/kotlin/StringProperty.kt +++ b/fused-properties/src/main/kotlin/StringProperty.kt @@ -33,14 +33,18 @@ public fun Project.booleanProperty(block: (Boolean) -> Unit = { }): ReadOnlyDele return readOnlyDelegateProvider { provider, _ -> provider.get().toBoolean().also(block) } } -public fun Project.stringPropertyWithTag(action: (String, String) -> Unit): ReadOnlyDelegateProvider { - return readOnlyDelegateProvider { provider, tag -> provider.get().also { action(tag, it) } } +public fun Project.booleanPropertyWithTag(action: (String, Boolean) -> Unit): ReadOnlyDelegateProvider { + return readOnlyDelegateProvider { provider, tag -> provider.get().toBoolean().also { action(tag, it) } } } public fun Project.stringProperty(block: (String) -> Unit = { }): ReadOnlyDelegateProvider { return readOnlyDelegateProvider { provider, _ -> provider.get().also(block) } } +public fun Project.stringPropertyWithTag(action: (String, String) -> Unit): ReadOnlyDelegateProvider { + return readOnlyDelegateProvider { provider, tag -> provider.get().also { action(tag, it) } } +} + public fun Project.stringPropertyOrNull(block: (String?) -> Unit = { }): ReadOnlyDelegateProvider { return readOnlyDelegateProvider { provider, _ -> provider.orNull.also(block) } } From 8470abf83971fcf63c66e379e2465b7ac117cb81 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Mon, 26 Aug 2024 23:25:30 +0200 Subject: [PATCH 18/22] Include proguard rules for slf4j --- conferences-app/build.gradle.kts | 6 ++++++ conferences-app/proguard-rules.pro | 1 + 2 files changed, 7 insertions(+) create mode 100644 conferences-app/proguard-rules.pro diff --git a/conferences-app/build.gradle.kts b/conferences-app/build.gradle.kts index f588c049a..2cbaf5c76 100644 --- a/conferences-app/build.gradle.kts +++ b/conferences-app/build.gradle.kts @@ -33,7 +33,13 @@ android { release { isMinifyEnabled = true isShrinkResources = true + signingConfig = release + + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) } } diff --git a/conferences-app/proguard-rules.pro b/conferences-app/proguard-rules.pro new file mode 100644 index 000000000..232a0d400 --- /dev/null +++ b/conferences-app/proguard-rules.pro @@ -0,0 +1 @@ +-dontwarn org.slf4j.impl.StaticLoggerBinder From 4545d7b844a918f3dc9792dcf5274baf6bd931cf Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Tue, 27 Aug 2024 10:51:18 +0200 Subject: [PATCH 19/22] Archive APK artifact --- .github/workflows/android-release.yml | 6 ++++++ conferences-app/build.gradle.kts | 19 ++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 198ad5196..f4c0adcf8 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -59,3 +59,9 @@ jobs: RELEASE_KEY_PASSWORD: ${{ steps.op-secrets.outputs.KEY_PASSWORD }} SERVER_CLIENT_ID: ${{ secrets.SERVER_CLIENT_ID }} run: ./gradlew assembleRelease --console=plain + + - uses: actions/upload-artifact@v2 + with: + if-no-files-found: error + name: apk-release + path: "**/*-release/*.apk" diff --git a/conferences-app/build.gradle.kts b/conferences-app/build.gradle.kts index 2cbaf5c76..d54476884 100644 --- a/conferences-app/build.gradle.kts +++ b/conferences-app/build.gradle.kts @@ -18,11 +18,20 @@ android { } val release by signingConfigs.creating { - val keyStoreFile by stringPropertyOrNull { storeFile = it?.let(rootProject::file) } - val keyStorePassword by stringPropertyOrNull { storePassword = it } + val keyStoreFile by stringPropertyOrNull() + storeFile = keyStoreFile?.let(rootProject::file) - val releaseKeyAlias by stringPropertyOrNull { keyAlias = it } - val releaseKeyPassword by stringPropertyOrNull { keyPassword = it } + val keyStorePassword by stringPropertyOrNull() + storePassword = keyStorePassword + + val releaseKeyAlias by stringPropertyOrNull() + keyAlias = releaseKeyAlias + + val releaseKeyPassword by stringPropertyOrNull() + keyPassword = releaseKeyPassword + + enableV3Signing = true + enableV4Signing = true } buildTypes { @@ -38,7 +47,7 @@ android { proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" + "proguard-rules.pro", ) } } From ce2e11b14b8491e2c8df1c08f7191319db71f0cf Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Wed, 28 Aug 2024 20:33:35 +0200 Subject: [PATCH 20/22] Init release from debug --- conferences-app/build.gradle.kts | 27 +++++++++++++++++---------- keystore.properties | 0 2 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 keystore.properties diff --git a/conferences-app/build.gradle.kts b/conferences-app/build.gradle.kts index d54476884..58cde9201 100644 --- a/conferences-app/build.gradle.kts +++ b/conferences-app/build.gradle.kts @@ -18,20 +18,27 @@ android { } val release by signingConfigs.creating { - val keyStoreFile by stringPropertyOrNull() - storeFile = keyStoreFile?.let(rootProject::file) + val debug by signingConfigs.getting + initWith(debug) - val keyStorePassword by stringPropertyOrNull() - storePassword = keyStorePassword + enableV3Signing = true + enableV4Signing = true - val releaseKeyAlias by stringPropertyOrNull() - keyAlias = releaseKeyAlias + val keyStoreFile by stringPropertyOrNull { + if (it != null) storeFile = rootProject.file(it) + } - val releaseKeyPassword by stringPropertyOrNull() - keyPassword = releaseKeyPassword + val keyStorePassword by stringPropertyOrNull { + if (it != null) storePassword = it + } - enableV3Signing = true - enableV4Signing = true + val releaseKeyAlias by stringPropertyOrNull { + if (it != null) keyAlias = it + } + + val releaseKeyPassword by stringPropertyOrNull { + if (it != null) keyPassword = it + } } buildTypes { diff --git a/keystore.properties b/keystore.properties new file mode 100644 index 000000000..e69de29bb From 3e7ddf128d616b195908c146222c68a3d9acb834 Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Wed, 28 Aug 2024 20:57:57 +0200 Subject: [PATCH 21/22] Adjust upload artifact path wildcard --- .github/workflows/android-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index f4c0adcf8..11231f35f 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -64,4 +64,4 @@ jobs: with: if-no-files-found: error name: apk-release - path: "**/*-release/*.apk" + path: "**/*-release.apk" From 5ddd5ae870f7214883e930ac84f6630914799d7a Mon Sep 17 00:00:00 2001 From: Ashley Davies Date: Wed, 28 Aug 2024 21:16:58 +0200 Subject: [PATCH 22/22] Android release on merge --- .github/workflows/android-release.yml | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 11231f35f..c2bcd9ef2 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -1,5 +1,24 @@ name: Android Release -on: [ pull_request ] + +on: + push: + branches: + - main + + workflow_dispatch: + inputs: + log_level: + type: choice + description: Log Level + required: false + default: info + options: + - error + - quiet + - warning + - lifecycle + - info + - debug concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number }}