From 638d3868dea5b558f573e4e80c5bd0a50f43e42a Mon Sep 17 00:00:00 2001 From: Danil Nikolaev Date: Wed, 14 Aug 2024 22:42:26 +0300 Subject: [PATCH] signing for android builds + ci android --- .github/workflows/android-build-publish.yml | 46 ++++++++++++++++++ .github/workflows/docker-publish-wasm.yml | 2 +- .gitignore | 2 +- composeApp/build.gradle.kts | 33 ++++++++++++- .../src/androidMain/keystore/keystore.jks | Bin 0 -> 2409 bytes .../src/wasmJsMain/resources/index.html | 4 +- 6 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/android-build-publish.yml create mode 100644 composeApp/src/androidMain/keystore/keystore.jks diff --git a/.github/workflows/android-build-publish.yml b/.github/workflows/android-build-publish.yml new file mode 100644 index 0000000..16a0bbf --- /dev/null +++ b/.github/workflows/android-build-publish.yml @@ -0,0 +1,46 @@ +name: Android CI + +on: + push: + branches: [ "master" ] + +env: + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + RELEASE_SIGN_KEY_ALIAS: ${{ secrets.RELEASE_SIGN_KEY_ALIAS }} + RELEASE_SIGN_KEY_PASSWORD: ${{ secrets.RELEASE_SIGN_KEY_PASSWORD }} + +jobs: + build_apk_aab: + runs-on: ubuntu-latest + name: Build artifacts + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + cache: gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build and sign debug APKs + run: ./gradlew assembleDebug + + - name: Upload debug APK + uses: actions/upload-artifact@v4 + with: + name: app-debug.apk + path: composeApp/build/outputs/apk/debug/composeApp-debug.apk + + - name: Build and sign release APKs + run: ./gradlew assembleRelease + + - name: Upload release APK + uses: actions/upload-artifact@v4 + with: + name: app-release.apk + path: composeApp/build/outputs/apk/release/composeApp-release.apk diff --git a/.github/workflows/docker-publish-wasm.yml b/.github/workflows/docker-publish-wasm.yml index 001c303..44e6657 100644 --- a/.github/workflows/docker-publish-wasm.yml +++ b/.github/workflows/docker-publish-wasm.yml @@ -1,4 +1,4 @@ -name: Docker +name: Wasm on: pull_request: diff --git a/.gitignore b/.gitignore index d549b84..532ca90 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -*.iml .gradle .idea .kotlin @@ -45,3 +44,4 @@ google-services.json # Android Profiling *.hprof +/composeApp/src/androidMain/keystore/keystore.properties diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 42c90a9..f3a6c08 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -6,6 +6,7 @@ import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig +import java.util.* plugins { alias(libs.plugins.multiplatform) @@ -140,7 +141,7 @@ android { minSdk = 26 targetSdk = 35 - applicationId = "dev.meloda.overseerr.androidApp" + applicationId = "dev.meloda.overseerr" versionCode = 1 versionName = "1.0.0" @@ -157,8 +158,36 @@ android { } } } + signingConfigs { + create("release") { + val keystoreProperties = Properties() + val keystorePropertiesFile = file("./src/androidMain/keystore/keystore.properties") + + storeFile = file("./src/androidMain/keystore/keystore.jks") + + if (keystorePropertiesFile.exists()) { + keystorePropertiesFile.inputStream().let(keystoreProperties::load) + storePassword = keystoreProperties.getProperty("storePassword") + keyAlias = keystoreProperties.getProperty("keyAlias") + keyPassword = keystoreProperties.getProperty("keyPassword") + } else { + storePassword = System.getenv("KEYSTORE_PASSWORD") + keyAlias = System.getenv("RELEASE_SIGN_KEY_ALIAS") + keyPassword = System.getenv("RELEASE_SIGN_KEY_PASSWORD") + } + } + + create("debugSigning") { + initWith(getByName("release")) + } + } buildTypes { + getByName("debug") { + signingConfig = signingConfigs.getByName("debugSigning") + } getByName("release") { + signingConfig = signingConfigs.getByName("release") + isMinifyEnabled = false } } @@ -184,7 +213,7 @@ compose.desktop { nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) - packageName = "dev.meloda.overseerr.desktopApp" + packageName = "dev.meloda.overseerr" packageVersion = "1.0.0" } } diff --git a/composeApp/src/androidMain/keystore/keystore.jks b/composeApp/src/androidMain/keystore/keystore.jks new file mode 100644 index 0000000000000000000000000000000000000000..1d39b907c1e3fe9b131c676cac6f3e1bf3247ee1 GIT binary patch literal 2409 zcmY+Ec{~#iAIE2#`)1N2_wk!^bIdVp8AG`enYoWS@*`KumCP9mB~d))D0j-)EY&&~ zN@=Jha!-wxYdPZSd0x-+`@MdDd|%(!>;3tBzkj~rBz_{03j`UR z$RvJIFo|FAH|B+txWoSuaeIMD-1y(v_4hdQ2>$O%NPr7SCV_Y1BrpdK;}Q5j{{37A z4B=JJvKRK|ZXhq8?!#GeYVXt1Q9uyjxigpqrdOTKcVKL#Jg(mEN^(-WRdX6nbYV;#y809@HlyQ0eny4&Xyg34WJV*R(+>?k7K6AXKhH3e z1TD7fiOQ9mCN?H2E8>S^b9^qy+m1N zX^ZI`tGN)Rc;w8SNmFlh*iH|_$qlo?I0R%SBQ8nC&JR{g^k$Om_1;q^twfO$$t-ChErYT*gX>>mAsI0Ho<+ZGil0 zo0=7Vk9(?+=`y8soELq8pz*r2@e~(JW&oxgDkO{Q0SE+*k2+Q~(AMv$g>hN<`=#uQ z?pHUQz>EMUrv|yym<39Xvpnd%u_!=LGa9`ek;t+Z@v+{2K&T{29FmR1q!gx^od7qJ z%VuBJzXM>^>~#mfZTC&U= z!n)!Xw)Zl8=Am1!997(R&8e2leDu=bh{-s!AimJI{%K=Exy-5Ff?2hKT|;|1_j0hukdp1DeH-rfDU)>YrJ&EO|v)-6ZY(O@~1BD(ri(ud6UIsnz25Ig1`iA#BeX`6h;m>?*%kVKNd5Tj%FAEN92olw zHt?Ft92x1G@BYJMjsOZNjW-I_Rq<|fZ}%QMo4_o}N~l@cA$7&nwSDOs1!6!_)lK^S z`hGjZA&irQFk8-_6D5&cJY@|{W{9w=US8#nmHw%(Ob)1WC6xq@othhEP!?b zSJ~*$fk82z9ZzP4AKf9h0M_pXntMlwGZdZF1bVr#$8+dS!$){!ac4dY}WK4hQ!uVXKf zK$!QNKN+(E=vn=;f>jx55vnz6096a)mSAn)&Lf&B#L#qew%n8vVk(`!-zX^!bkE{Pe*Z>=oKii~FzPrn73UmH2X!M;I{|8@VT>Q7O zA!3d}d=9soFu%8~RvKlz-Dd8B1m-NHX6t;La=56Q{2y!LBI^}~I>Gh_cZ|32C>5^L!-3h~psjlSl)c_vKi`MeRK`h}t$exkk3>i`_d~Y` zrnX&*5x11|J^N&kg&9Y7@ZH-EqT`4`4QA=Ow@z2N@6|&iyZ}$n|YGLAw zM>rD&@@(^>xRsRh>DtL<<}Fs`;bEY7ap75CO);`*JAF0#rd^%?Y7W|QW&Qw{Ykvhu z)q`AICFTnCbu$Ww_FJV|S=ZNMHU;tto3g!IxhcZiOH1+}cms^d~V)_Awxs2H>X0J@do{bH)uK4smd%$-bbxXQQJ2ZzVX^z z6F-mBH~h8)vl>B{#oL?`YVLYZ)e!7k$2sK7kr@f$$^%gi5T(PoeR z&duAVnn&7i)W6AcGkYtofV=%w(1kK~d{qPTLO5KLmo_*XzOEekOVhNFZgbtE; z1-F1J!uff)HAO(cBisNmMBS&DmK5Us8X=>7yi;Ke^3ZOH0){Axi7rejmbRPrdd^i< Qt<-(a9asW_xU$Iq24yN(L;wH) literal 0 HcmV?d00001 diff --git a/composeApp/src/wasmJsMain/resources/index.html b/composeApp/src/wasmJsMain/resources/index.html index 0be283f..d88af02 100644 --- a/composeApp/src/wasmJsMain/resources/index.html +++ b/composeApp/src/wasmJsMain/resources/index.html @@ -3,10 +3,10 @@ - KotlinProject + Wasm App - \ No newline at end of file +