From ce5e5187ac45bf4187d253d19bcb39195f645b5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Ma=C5=A1a?= Date: Sat, 1 Apr 2023 11:46:39 +0200 Subject: [PATCH 1/6] Remove unused Koin dependencies --- common/build.gradle.kts | 10 ---------- .../common/core/logging/KoinNapierLogger.kt | 17 ----------------- 2 files changed, 27 deletions(-) delete mode 100644 common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/logging/KoinNapierLogger.kt diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 169a37785..e843ad126 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -19,8 +19,6 @@ kotlin { } sourceSets { - val koinVersion = "3.1.2" - all { languageSettings.apply { optIn("androidx.compose.material.ExperimentalMaterialApi") @@ -44,7 +42,6 @@ kotlin { val voyagerVersion = "1.0.0-rc04" api("cafe.adriel.voyager:voyager-navigator:$voyagerVersion") - api("cafe.adriel.voyager:voyager-koin:$voyagerVersion") api("cafe.adriel.voyager:voyager-transitions:$voyagerVersion") api(project(":common:firebase")) @@ -58,8 +55,6 @@ kotlin { api("org.kodein.di:kodein-di-framework-compose:$kodeinVersion") implementation("org.kodein.di:kodein-di:$kodeinVersion") - api("io.insert-koin:koin-core:$koinVersion") - implementation("io.arrow-kt:arrow-core:1.0.1") // Parser combinator library (grammars etc.) @@ -96,10 +91,6 @@ kotlin { val androidMain by getting { dependencies { - - // Dependency injection - api("io.insert-koin:koin-android:$koinVersion") - // Permission management implementation("com.google.accompanist:accompanist-permissions:0.20.0") @@ -111,7 +102,6 @@ kotlin { api("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.3.5") implementation("org.kodein.di:kodein-di-framework-android-core:$kodeinVersion") - api("io.insert-koin:koin-android:$koinVersion") api("androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1") api("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0") diff --git a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/logging/KoinNapierLogger.kt b/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/logging/KoinNapierLogger.kt deleted file mode 100644 index 4afd01da2..000000000 --- a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/logging/KoinNapierLogger.kt +++ /dev/null @@ -1,17 +0,0 @@ -package cz.frantisekmasa.wfrp_master.common.core.logging - -import io.github.aakira.napier.Napier -import org.koin.core.logger.Level -import org.koin.core.logger.Logger - -class KoinNapierLogger(level: Level = Level.INFO) : Logger(level) { - - override fun log(level: Level, msg: String) { - when (level) { - Level.DEBUG -> Napier.d(msg) - Level.INFO -> Napier.i(msg) - Level.ERROR -> Napier.e(msg) - else -> Napier.e(msg) - } - } -} From 590f991bf8fbadf3a34b8398032838e85ac17eaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Ma=C5=A1a?= Date: Sat, 1 Apr 2023 12:03:47 +0200 Subject: [PATCH 2/6] Update Jetpack Compose to 1.3.1 --- build.gradle.kts | 2 +- buildSrc/src/main/resources/versions.properties | 2 +- common/build.gradle.kts | 4 ++-- gradle.properties | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 748c5f541..227bcbaab 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ buildscript { dependencies { classpath("com.android.tools.build:gradle:${Versions.agp}") - classpath("org.jetbrains.compose:compose-gradle-plugin:1.2.2") + classpath("org.jetbrains.compose:compose-gradle-plugin:${Versions.compose}") classpath(kotlin("gradle-plugin", Versions.kotlin)) classpath(kotlin("serialization", Versions.kotlin)) diff --git a/buildSrc/src/main/resources/versions.properties b/buildSrc/src/main/resources/versions.properties index b07c6c33b..46c89ab1a 100644 --- a/buildSrc/src/main/resources/versions.properties +++ b/buildSrc/src/main/resources/versions.properties @@ -1,6 +1,6 @@ androidGradlePluginVersion=7.3.1 kotlinVersion=1.7.20 -composeVersion=1.2.1 +composeVersion=1.3.1 # Android SDK androidMinSdk=21 diff --git a/common/build.gradle.kts b/common/build.gradle.kts index e843ad126..c2038ec42 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -94,7 +94,7 @@ kotlin { // Permission management implementation("com.google.accompanist:accompanist-permissions:0.20.0") - api("androidx.activity:activity-compose:1.5.0-alpha03") + api("androidx.activity:activity-compose:1.7.0") api("androidx.appcompat:appcompat:1.3.1") api("androidx.core:core-ktx:1.3.1") @@ -103,7 +103,7 @@ kotlin { implementation("org.kodein.di:kodein-di-framework-android-core:$kodeinVersion") - api("androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1") + api("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1") api("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0") // Authentication diff --git a/gradle.properties b/gradle.properties index 27282b242..de6166c53 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +org.gradle.jvmargs=-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true kapt.incremental.apt=true From 4fec6848afba5b026f43d8b067445e189d397cb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Ma=C5=A1a?= Date: Sat, 1 Apr 2023 12:21:16 +0200 Subject: [PATCH 3/6] Remove duplicate dependencies --- app/build.gradle.kts | 47 ------------------- .../kotlin/cz/muni/fi/rpg/ui/WfrpMasterApp.kt | 3 +- .../common/invitation/InvitationLinkScreen.kt | 4 +- 3 files changed, 3 insertions(+), 51 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4c99ec4c6..238f718c9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -80,14 +80,8 @@ android { jvmTarget = "1.8" freeCompilerArgs = freeCompilerArgs + "-Xskip-prerelease-check" + - "-Xopt-in=androidx.compose.foundation.layout.ExperimentalLayout" + - "-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi" + "-Xopt-in=androidx.compose.material.ExperimentalMaterialApi" + "-Xopt-in=androidx.compose.animation.ExperimentalAnimationApi" + - "-Xopt-in=androidx.compose.animation.ExperimentalFoundationApi" + - "-Xopt-in=androidx.compose.foundation.ExperimentalFoundationApi" + - "-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi" + - "-Xopt-in=com.google.accompanist.permissions.ExperimentalPermissionsApi" + "-P" + "plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true" } @@ -99,16 +93,6 @@ dependencies { // Allow use of Java 8 APIs on older Android versions coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5") - // Permission management - implementation("com.google.accompanist:accompanist-permissions:0.20.0") - - // QR code scanning - implementation("com.google.zxing:core:3.3.3") - implementation("androidx.camera:camera-camera2:1.1.0-alpha02") - implementation("androidx.camera:camera-core:1.1.0-alpha02") - implementation("androidx.camera:camera-lifecycle:1.1.0-alpha02") - implementation("androidx.camera:camera-view:1.0.0-alpha22") - // Testing utilities testImplementation("junit:junit:4.13.1") androidTestImplementation("androidx.test.ext:junit:1.1.2") @@ -119,39 +103,8 @@ dependencies { api("androidx.core:core-ktx:1.5.0") api("androidx.fragment:fragment-ktx:1.3.5") - // Jetpack Compose - api("androidx.compose.material:material:${Versions.compose}") - api("androidx.compose.ui:ui-tooling:${Versions.compose}") - api("androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1") - - // Firebase-related dependencies - api(platform("com.google.firebase:firebase-bom:28.4.2")) - api("com.google.firebase:firebase-firestore-ktx") - api("com.google.firebase:firebase-analytics-ktx") - api("com.google.firebase:firebase-auth-ktx") - api("com.google.firebase:firebase-dynamic-links-ktx") - api("com.google.firebase:firebase-functions-ktx") - api("androidx.work:work-runtime-ktx:2.7.0") - // Coroutines api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2") api("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2") api("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.3.5") - - api("io.arrow-kt:arrow-core:0.10.4") - - // Parser combinator library (grammars etc.) - api("com.github.h0tk3y.betterParse:better-parse:0.4.2") - - // JSON encoding - api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0") - - // HTTP Client - val ktorVersion = "1.6.0" - implementation("io.ktor:ktor-client-core:$ktorVersion") - implementation("io.ktor:ktor-client-cio:$ktorVersion") - implementation("io.ktor:ktor-client-serialization:$ktorVersion") - - // Firebase Performance -// implementation("com.google.firebase:firebase-perf-ktx:20.0.1") } diff --git a/app/src/main/kotlin/cz/muni/fi/rpg/ui/WfrpMasterApp.kt b/app/src/main/kotlin/cz/muni/fi/rpg/ui/WfrpMasterApp.kt index c9174eddb..f71075cf2 100644 --- a/app/src/main/kotlin/cz/muni/fi/rpg/ui/WfrpMasterApp.kt +++ b/app/src/main/kotlin/cz/muni/fi/rpg/ui/WfrpMasterApp.kt @@ -20,7 +20,6 @@ import cz.frantisekmasa.wfrp_master.common.shell.DrawerShell import cz.frantisekmasa.wfrp_master.common.shell.NetworkStatusBanner import cz.muni.fi.rpg.ui.shell.ProvideDIContainer import cz.muni.fi.rpg.ui.shell.Startup -import io.ktor.http.Url import kotlinx.coroutines.launch @ExperimentalMaterialApi @@ -64,7 +63,7 @@ private fun rememberInitialScreens(url: Uri?): List { listOf(PartyListScreen) + when (url) { null -> emptyList() - else -> listOf(InvitationLinkScreen(Url(url.toString()))) + else -> listOf(InvitationLinkScreen(url.toString())) } } } diff --git a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/invitation/InvitationLinkScreen.kt b/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/invitation/InvitationLinkScreen.kt index 4f470a7f9..86524d4f2 100644 --- a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/invitation/InvitationLinkScreen.kt +++ b/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/invitation/InvitationLinkScreen.kt @@ -25,7 +25,7 @@ import io.ktor.http.URLBuilder import io.ktor.http.Url class InvitationLinkScreen( - private val url: Url, + private val url: String, ) : Screen { @Composable @@ -58,7 +58,7 @@ class InvitationLinkScreen( val snackbarHolder = LocalPersistentSnackbarHolder.current LaunchedEffect(url) { - val loadedInvitation = url.parameters[QUERY_PARAMETER]?.let { + val loadedInvitation = Url(url).parameters[QUERY_PARAMETER]?.let { screenModel.deserializeInvitation(it) } From 9ef45d970fcac3543478b60b523372cf65863eda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Ma=C5=A1a?= Date: Sat, 1 Apr 2023 12:32:28 +0200 Subject: [PATCH 4/6] Bump all dependencies --- app/build.gradle.kts | 18 +++++++++--------- common/build.gradle.kts | 32 ++++++++++++++++---------------- common/firebase/build.gradle.kts | 18 +++++++++--------- desktop/build.gradle.kts | 2 +- 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 238f718c9..aace6b50d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -91,20 +91,20 @@ dependencies { implementation(project(":common")) implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) // Allow use of Java 8 APIs on older Android versions - coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5") + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.2.2") // Testing utilities - testImplementation("junit:junit:4.13.1") - androidTestImplementation("androidx.test.ext:junit:1.1.2") - androidTestImplementation("androidx.test.espresso:espresso-core:3.3.0") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") testImplementation("org.mockito:mockito-core:2.7.22") // Basic Android stuff - api("androidx.core:core-ktx:1.5.0") - api("androidx.fragment:fragment-ktx:1.3.5") + api("androidx.core:core-ktx:1.9.0") + api("androidx.fragment:fragment-ktx:1.5.6") // Coroutines - api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2") - api("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2") - api("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.3.5") + api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") + api("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4") + api("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.4") } diff --git a/common/build.gradle.kts b/common/build.gradle.kts index c2038ec42..57fc56c75 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -64,7 +64,7 @@ kotlin { implementation("com.benasher44:uuid:0.3.1") // JSON encoding - api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0") + api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2") // Logging api("io.github.aakira:napier:${Versions.napier}") @@ -96,26 +96,26 @@ kotlin { api("androidx.activity:activity-compose:1.7.0") - api("androidx.appcompat:appcompat:1.3.1") - api("androidx.core:core-ktx:1.3.1") + api("androidx.appcompat:appcompat:1.6.1") + api("androidx.core:core-ktx:1.9.0") - api("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.3.5") + api("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.4") implementation("org.kodein.di:kodein-di-framework-android-core:$kodeinVersion") api("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1") - api("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0") + api("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1") // Authentication - api("com.google.android.gms:play-services-auth:19.0.0") - implementation("com.google.firebase:firebase-auth-ktx:21.0.1") - implementation("com.google.firebase:firebase-dynamic-links-ktx:21.0.1") + api("com.google.android.gms:play-services-auth:20.4.1") + implementation("com.google.firebase:firebase-auth-ktx:21.2.0") + implementation("com.google.firebase:firebase-dynamic-links-ktx:21.1.0") // Shared Preferences DataStore api("androidx.datastore:datastore-preferences:1.0.0") // Firebase functions - api("com.google.firebase:firebase-functions-ktx:20.0.1") + api("com.google.firebase:firebase-functions-ktx:20.2.2") implementation("com.tom-roush:pdfbox-android:2.0.27.0") @@ -128,14 +128,14 @@ kotlin { // QR codes implementation("com.google.zxing:core:3.3.3") - implementation("androidx.camera:camera-camera2:1.1.0-alpha02") - implementation("androidx.camera:camera-core:1.1.0-alpha02") - implementation("androidx.camera:camera-lifecycle:1.1.0-alpha02") - implementation("androidx.camera:camera-view:1.0.0-alpha22") + implementation("androidx.camera:camera-camera2:1.2.2") + implementation("androidx.camera:camera-core:1.2.2") + implementation("androidx.camera:camera-lifecycle:1.2.2") + implementation("androidx.camera:camera-view:1.2.2") // Network availability check implementation("com.github.pwittchen:reactivenetwork-rx2:3.0.8") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-rx2:1.4.2") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-rx2:1.6.4") } } @@ -192,7 +192,7 @@ android { dependencies { // Allow use of Java 8 APIs on older Android versions - coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5") + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.2.2") } compileOptions { @@ -211,5 +211,5 @@ android { } } dependencies { - implementation("com.google.firebase:firebase-crashlytics-ktx:18.2.4") + implementation("com.google.firebase:firebase-crashlytics-ktx:18.3.6") } diff --git a/common/firebase/build.gradle.kts b/common/firebase/build.gradle.kts index d3faa0768..eea6d4d3d 100644 --- a/common/firebase/build.gradle.kts +++ b/common/firebase/build.gradle.kts @@ -15,24 +15,24 @@ kotlin { named("commonMain") { dependencies { implementation("io.github.aakira:napier:${Versions.napier}") - api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0") - api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0") + api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") + api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2") } } named("jvmMain") { dependencies { api("com.google.cloud:google-cloud-firestore:3.0.18") - api("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.0") + api("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4") } } named("androidMain") { dependencies { - api("com.google.firebase:firebase-auth-ktx:21.0.3") - api("com.google.firebase:firebase-crashlytics-ktx:18.2.9") - api("com.google.firebase:firebase-firestore-ktx:24.1.0") - api("com.google.firebase:firebase-analytics-ktx:20.1.2") - api("com.google.firebase:firebase-functions-ktx:20.0.2") - api("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.0") + api("com.google.firebase:firebase-auth-ktx:21.2.0") + api("com.google.firebase:firebase-crashlytics-ktx:18.3.6") + api("com.google.firebase:firebase-firestore-ktx:24.4.5") + api("com.google.firebase:firebase-analytics-ktx:21.2.1") + api("com.google.firebase:firebase-functions-ktx:20.2.2") + api("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.4") } } } diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index 692ee1acf..5722a0a50 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -18,7 +18,7 @@ kotlin { implementation(compose.desktop.currentOs) implementation(project(":common:firebase")) implementation(project(":common")) - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.6.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.6.4") implementation("org.slf4j:slf4j-simple:1.7.36") } } From 9b34ecdf9fefc6bd12f390bf839419418a9b24e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Ma=C5=A1a?= Date: Sat, 1 Apr 2023 15:34:07 +0200 Subject: [PATCH 5/6] Fix desktop authentication --- .../wfrp_master/common/auth/AuthenticationManager.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/jvmMain/kotlin/cz/frantisekmasa/wfrp_master/common/auth/AuthenticationManager.kt b/common/src/jvmMain/kotlin/cz/frantisekmasa/wfrp_master/common/auth/AuthenticationManager.kt index 000a9ea6b..63f4ab14d 100644 --- a/common/src/jvmMain/kotlin/cz/frantisekmasa/wfrp_master/common/auth/AuthenticationManager.kt +++ b/common/src/jvmMain/kotlin/cz/frantisekmasa/wfrp_master/common/auth/AuthenticationManager.kt @@ -47,7 +47,7 @@ class AuthenticationManager( private suspend fun getIdToken(refreshToken: String): String { val response: IdTokenResponse = http.post("https://securetoken.googleapis.com/v1/token?key=$API_KEY") { contentType(ContentType.Application.Json) - setBody(IdTokenRequest(refreshToken, "")) + setBody(IdTokenRequest(refreshToken, "refresh_token")) }.body() settings.edit(REFRESH_TOKEN, response.refreshToken) From 384d0688492a7b5fcb2b95eadf47c9bb3e25194c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Ma=C5=A1a?= Date: Sat, 1 Apr 2023 15:34:46 +0200 Subject: [PATCH 6/6] Publish desktop apps using Conveyor --- .github/workflows/desktop_distribution.yml | 77 +++++++++++++++++++ .github/workflows/main.yml | 4 +- .gitignore | 1 + build.gradle.kts | 8 -- conveyor.conf | 26 +++++++ desktop/build.gradle.kts | 23 +++++- .../{Main.kt => WfrpMasterApplication.kt} | 67 ++++++++-------- settings.gradle.kts | 11 +++ 8 files changed, 171 insertions(+), 46 deletions(-) create mode 100644 .github/workflows/desktop_distribution.yml create mode 100644 conveyor.conf rename desktop/src/jvmMain/kotlin/cz/frantisekmasa/wfrp_master/desktop/{Main.kt => WfrpMasterApplication.kt} (51%) diff --git a/.github/workflows/desktop_distribution.yml b/.github/workflows/desktop_distribution.yml new file mode 100644 index 000000000..b8e8998ee --- /dev/null +++ b/.github/workflows/desktop_distribution.yml @@ -0,0 +1,77 @@ +name: Build + +on: + # Runs on pushes targeting the default branch + push: + tags: + - '*' + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Single deploy job since we're just deploying + conveyor: + name: "Create desktop distributions" + environment: production + runs-on: ubuntu-22.04 + env: + CONVEYOR_AGREE_TO_LICENSE: "1" + APP_VERSION: ${{ github.ref_name }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + + - run: ./gradlew jar + + - uses: hydraulic-software/conveyor/actions/build@v1 + with: + command: make site + signing_key: ${{ secrets.SIGNING_KEY }} + agree_to_license: 1 + conveyor_version: "8.0" + cache_key: conveyor-${{ matrix.os }}-${{ matrix.arch }} + + - uses: actions/upload-artifact@v3 + with: + name: download-page + path: output + retention-days: 1 + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: [conveyor] + steps: + - name: Download a single artifact + uses: actions/download-artifact@v3 + with: + name: download-page + path: download + - run: mv download/download.html download/index.html + - name: Setup Pages + uses: actions/configure-pages@v3 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: '.' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f89471f19..43b9a8a88 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -73,6 +73,8 @@ jobs: image: fmasa/lebeda:7.4-ci steps: - run: "true" + - run: echo "SUPPLY_VERSION_CODE=$((950 + $GITHUB_RUN_NUMBER))" >> $GITHUB_ENV + - run: echo "SUPPLY_VERSION_NAME=$(.github/workflows/version.sh)" >> $GITHUB_ENV build-bundle: name: Build release bundle @@ -96,8 +98,6 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - run: echo "$KEYSTORE_FILE_BASE64" | base64 -d > app/.keystore - - run: echo "SUPPLY_VERSION_CODE=$((950 + $GITHUB_RUN_NUMBER))" >> $GITHUB_ENV - - run: echo "SUPPLY_VERSION_NAME=$(.github/workflows/version.sh)" >> $GITHUB_ENV - run: 'echo "version code: $SUPPLY_VERSION_CODE, version name: $SUPPLY_VERSION_NAME"' - run: ./gradlew bundleRelease - run: mv app/build/outputs/bundle/release/app-release.aab . diff --git a/.gitignore b/.gitignore index 636b21ff1..060a2b1f0 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ firebase-debug.log firebase-build ui-debug.log play-store.json +output \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 227bcbaab..2ef6c48b6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,12 +1,4 @@ buildscript { - repositories { - google() - mavenCentral() - maven("https://plugins.gradle.org/m2/") - maven("https://kotlin.bintray.com/kotlinx") - maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") - } - dependencies { classpath("com.android.tools.build:gradle:${Versions.agp}") classpath("org.jetbrains.compose:compose-gradle-plugin:${Versions.compose}") diff --git a/conveyor.conf b/conveyor.conf new file mode 100644 index 000000000..2a8867329 --- /dev/null +++ b/conveyor.conf @@ -0,0 +1,26 @@ + +// This is a hashbang include. You can run the command after the #! to see what +// configuration is being extracted from the Gradle build using the Conveyor plugin. +include "#!./gradlew -q printConveyorConfig" + +include required("https://raw.githubusercontent.com/hydraulic-software/conveyor/master/configs/jvm/extract-native-libraries.conf") +include required("/stdlib/jdk/20.0/eclipse.conf") + + +app { + jvm { + options += "--add-opens=java.base/sun.security.x509=ALL-UNNAMED" + } + + display-name = "WFRP Master" + license = "GPL-3" + rdns-name = "cz.frantisekmasa.wfrp-master" + vcs-url = "https://github.com/fmasa/wfrp-master" + icons = "app/src/main/res/mipmap-xxxhdpi/ic_launcher.png" + + site { + base-url = "https://fmasa.github.io/wfrp-master/download" + } +} + +conveyor.compatibility-level = 8 diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index 5722a0a50..962adb352 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -1,10 +1,17 @@ -import org.jetbrains.compose.compose import org.jetbrains.compose.desktop.application.dsl.TargetFormat plugins { kotlin("multiplatform") // kotlin("jvm") doesn't work well in IDEA/AndroidStudio (https://github.com/JetBrains/compose-jb/issues/22) id("org.jetbrains.compose") + id("dev.hydraulic.conveyor") version "1.4" +} + +configurations.all { + attributes { + // https://github.com/JetBrains/compose-jb/issues/1404#issuecomment-1146894731 + attribute(Attribute.of("ui", String::class.java), "awt") + } } kotlin { @@ -25,14 +32,22 @@ kotlin { } } +dependencies { + linuxAmd64(compose.desktop.linux_x64) + macAmd64(compose.desktop.macos_x64) + macAarch64(compose.desktop.macos_arm64) + windowsAmd64(compose.desktop.windows_x64) +} + compose.desktop { application { - mainClass = "cz.frantisekmasa.wfrp_master.desktop.MainKt" + mainClass = "cz.frantisekmasa.wfrp_master.desktop.WfrpMasterApplication" + version = System.getenv("APP_VERSION") ?: "1.0.0" nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) - packageName = "WFRP Master" - packageVersion = "1.0.0" + packageName = "wfrp-master" + packageVersion = System.getenv("APP_VERSION") ?: "1.0.0" windows { menuGroup = "Compose Examples" diff --git a/desktop/src/jvmMain/kotlin/cz/frantisekmasa/wfrp_master/desktop/Main.kt b/desktop/src/jvmMain/kotlin/cz/frantisekmasa/wfrp_master/desktop/WfrpMasterApplication.kt similarity index 51% rename from desktop/src/jvmMain/kotlin/cz/frantisekmasa/wfrp_master/desktop/Main.kt rename to desktop/src/jvmMain/kotlin/cz/frantisekmasa/wfrp_master/desktop/WfrpMasterApplication.kt index 6476a3637..5cc38d1dd 100644 --- a/desktop/src/jvmMain/kotlin/cz/frantisekmasa/wfrp_master/desktop/Main.kt +++ b/desktop/src/jvmMain/kotlin/cz/frantisekmasa/wfrp_master/desktop/WfrpMasterApplication.kt @@ -29,41 +29,44 @@ import kotlinx.coroutines.launch import org.kodein.di.compose.withDI @ExperimentalMaterialApi -fun main() { - application { - withDI(appModule) { - val coroutineScope = rememberCoroutineScope() +object WfrpMasterApplication { + @JvmStatic + fun main(args: Array) { + application { + withDI(appModule) { + val coroutineScope = rememberCoroutineScope() - CompositionLocalProvider( - LocalUrlOpener provides DesktopUrlOpener, - LocalEmailInitiator provides DesktopEmailInitiator, - LocalFileChooserFactory provides { NativeFileChooser(coroutineScope, it) }, - LocalFileSaverFactory provides { NativeFileSaver(coroutineScope, it) }, - LocalStaticConfiguration provides StaticConfiguration( - isProduction = true, - version = "dev", - platform = Platform.Desktop, - ) - ) { - Window(onCloseRequest = ::exitApplication) { - Theme { - Startup { - ScreenWithBreakpoints { - val drawerState = rememberDrawerState(DrawerValue.Closed) + CompositionLocalProvider( + LocalUrlOpener provides DesktopUrlOpener, + LocalEmailInitiator provides DesktopEmailInitiator, + LocalFileChooserFactory provides { NativeFileChooser(coroutineScope, it) }, + LocalFileSaverFactory provides { NativeFileSaver(coroutineScope, it) }, + LocalStaticConfiguration provides StaticConfiguration( + isProduction = true, + version = "dev", + platform = Platform.Desktop, + ) + ) { + Window(onCloseRequest = ::exitApplication) { + Theme { + Startup { + ScreenWithBreakpoints { + val drawerState = rememberDrawerState(DrawerValue.Closed) - Navigator( - screens = listOf(PartyListScreen), - onBackPressed = { - if (drawerState.isOpen) { - coroutineScope.launch { drawerState.close() } - return@Navigator false - } + Navigator( + screens = listOf(PartyListScreen), + onBackPressed = { + if (drawerState.isOpen) { + coroutineScope.launch { drawerState.close() } + return@Navigator false + } - true - } - ) { - DrawerShell(drawerState) { - CurrentScreen() + true + } + ) { + DrawerShell(drawerState) { + CurrentScreen() + } } } } diff --git a/settings.gradle.kts b/settings.gradle.kts index c877556c4..3104a8339 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,14 @@ +pluginManagement { + repositories { + google() + mavenCentral() + maven("https://plugins.gradle.org/m2/") + maven("https://kotlin.bintray.com/kotlinx") + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + maven("https://maven.hq.hydraulic.software") + } +} + rootProject.name = "rpg" include(":common") include(":common:firebase")