From eb972c8633ebcb0d8d6f2a449a301c7031221c57 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Thu, 29 Oct 2026 11:25:22 +0600 Subject: [PATCH] fix(dependencies): update Android target SDK and various library versions --- .github/workflows/spotube-release-binary.yml | 137 ++++++------------- gradle/libs.versions.toml | 28 +--- 2 files changed, 46 insertions(+), 119 deletions(-) diff --git a/.github/workflows/spotube-release-binary.yml b/.github/workflows/spotube-release-binary.yml index f12a0d2e..cc69ab89 100644 --- a/.github/workflows/spotube-release-binary.yml +++ b/.github/workflows/spotube-release-binary.yml @@ -12,6 +12,19 @@ on: - stable - beta - nightly + platform: + description: 'Platform to build (nightly only; stable and beta always build everything)' + required: true + type: choice + default: 'all' + options: + - all + - android + - linux-x86_64 + - linux-aarch64 + - windows + - macos + - ios dry_run: description: 'Dry run (build & upload artifacts only, skip creating release)' required: false @@ -29,67 +42,29 @@ permissions: # Never cancel a running release when another is dispatched, and let stable, beta and nightly run side by side concurrency: - group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.release_type }} + group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.release_type }}-${{ inputs.platform }} cancel-in-progress: false -env: - COMPOSE_WEBVIEW_REPO: KRTirtho/ComposeNativeWebview - COMPOSE_WEBVIEW_COMMIT: cbd36f88927298a28a2d64c6acf7ec3b2def6f9d - jobs: - prepare-deps: - name: Prepare Dependencies - runs-on: macos-latest + validate-inputs: + name: Validate Inputs + runs-on: ubuntu-latest steps: - - name: Checkout ComposeNativeWebview - uses: actions/checkout@v7 - with: - repository: ${{ env.COMPOSE_WEBVIEW_REPO }} - ref: ${{ env.COMPOSE_WEBVIEW_COMMIT }} - token: ${{ secrets.GITHUB_TOKEN }} - path: compose-webview - - - name: Set up JDK 21 - uses: actions/setup-java@v6 - with: - distribution: temurin - java-version: 21 - - - name: Set up Android SDK - uses: android-actions/setup-android@v4 - - - name: Set up Rust - uses: dtolnay/rust-toolchain@stable - - - name: Set up Gradle - uses: gradle/actions/setup-gradle@v6 - - - name: Publish compose-webview to mavenLocal - working-directory: compose-webview + - name: Single platform builds are nightly only + if: ${{ inputs.platform != 'all' && inputs.release_type != 'nightly' }} run: | - chmod +x gradlew - ./gradlew publishToMavenLocal - - - name: Upload maven local - uses: actions/upload-artifact@v7 - with: - name: maven-local - path: ~/.m2/repository/ + echo "::error::Building a single platform is only supported for nightly releases" + exit 1 build-android: name: Android - needs: prepare-deps + needs: validate-inputs + if: ${{ inputs.platform == 'all' || inputs.platform == 'android' }} timeout-minutes: 120 runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - - name: Download maven local - uses: actions/download-artifact@v8 - with: - name: maven-local - path: ~/.m2/repository/ - - name: Set up JDK 21 uses: actions/setup-java@v6 with: @@ -152,7 +127,8 @@ jobs: build-linux: name: Linux Desktop - needs: prepare-deps + needs: validate-inputs + if: ${{ inputs.platform == 'all' || inputs.platform == 'linux-x86_64' }} timeout-minutes: 120 runs-on: ubuntu-latest steps: @@ -161,12 +137,6 @@ jobs: with: fetch-depth: 0 - - name: Download maven local - uses: actions/download-artifact@v8 - with: - name: maven-local - path: ~/.m2/repository/ - - name: Install packaging tools run: | sudo apt-get update @@ -265,7 +235,8 @@ jobs: build-linux-arm64: name: Linux Desktop (aarch64) - needs: prepare-deps + needs: validate-inputs + if: ${{ inputs.platform == 'all' || inputs.platform == 'linux-aarch64' }} timeout-minutes: 120 runs-on: ubuntu-24.04-arm steps: @@ -281,12 +252,6 @@ jobs: with: packages: tools platform-tools ndk;28.2.13676358 - - name: Download maven local - uses: actions/download-artifact@v8 - with: - name: maven-local - path: ~/.m2/repository/ - - name: Install packaging tools run: | sudo apt-get update @@ -385,18 +350,13 @@ jobs: build-windows: name: Windows Desktop - needs: prepare-deps + needs: validate-inputs + if: ${{ inputs.platform == 'all' || inputs.platform == 'windows' }} timeout-minutes: 120 runs-on: windows-latest steps: - uses: actions/checkout@v7 - - name: Download maven local - uses: actions/download-artifact@v8 - with: - name: maven-local - path: ~/.m2/repository/ - - name: Set up JDK 21 uses: actions/setup-java@v6 with: @@ -448,18 +408,13 @@ jobs: build-macos: name: macOS Desktop - needs: prepare-deps + needs: validate-inputs + if: ${{ inputs.platform == 'all' || inputs.platform == 'macos' }} timeout-minutes: 120 runs-on: macos-latest steps: - uses: actions/checkout@v7 - - name: Download maven local - uses: actions/download-artifact@v8 - with: - name: maven-local - path: ~/.m2/repository/ - - name: Set up JDK 21 uses: actions/setup-java@v6 with: @@ -516,18 +471,13 @@ jobs: build-ios: name: iOS - needs: prepare-deps + needs: validate-inputs + if: ${{ inputs.platform == 'all' || inputs.platform == 'ios' }} timeout-minutes: 120 runs-on: macos-latest steps: - uses: actions/checkout@v7 - - name: Download maven local - uses: actions/download-artifact@v8 - with: - name: maven-local - path: ~/.m2/repository/ - - name: Set up JDK 21 uses: actions/setup-java@v6 with: @@ -585,8 +535,10 @@ jobs: create-release: name: Create GitHub Release - if: ${{ !inputs.dry_run }} + # Skipped platform jobs count as skipped, not failed, so a single platform build still releases + if: ${{ !inputs.dry_run && !cancelled() && !contains(needs.*.result, 'failure') }} needs: + - validate-inputs - build-android - build-linux - build-linux-arm64 @@ -599,13 +551,6 @@ jobs: steps: - uses: actions/checkout@v7 - # The build resolves its plugins from mavenLocal, so Gradle needs the same setup as the build jobs - - name: Download maven local - uses: actions/download-artifact@v8 - with: - name: maven-local - path: ~/.m2/repository/ - - name: Set up JDK 21 uses: actions/setup-java@v6 with: @@ -639,6 +584,7 @@ jobs: uses: actions/download-artifact@v8 - name: Generate release notes + if: ${{ inputs.platform == 'all' }} run: | echo "## Downloads" > release-notes.md echo "" >> release-notes.md @@ -658,9 +604,12 @@ jobs: tag_name: ${{ steps.vars.outputs.tag }} # A new tag (stable) would otherwise point at the default branch instead of the built commit target_commitish: ${{ github.sha }} - fail_on_unmatched_files: true - name: ${{ steps.vars.outputs.release_name }} - body_path: release-notes.md + # A single platform build only has its own artifacts + fail_on_unmatched_files: ${{ inputs.platform == 'all' }} + # A single platform build only replaces that platform's assets (same file names are overwritten), + # so leave the existing release's name and notes alone + name: ${{ inputs.platform == 'all' && steps.vars.outputs.release_name || '' }} + body_path: ${{ inputs.platform == 'all' && 'release-notes.md' || '' }} draft: ${{ steps.vars.outputs.is_draft }} prerelease: ${{ steps.vars.outputs.is_prerelease }} files: | diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ccc34f1f..020d99eb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,16 +14,12 @@ # along with this program. If not, see . [versions] -agp = "9.1.0" android-compileSdk = "37" android-minSdk = "28" -android-targetSdk = "36" +android-targetSdk = "37" +agp = "9.1.0" androidx-activity = "1.13.0" -androidx-appcompat = "1.7.1" -androidx-core = "1.19.0" -androidx-espresso = "3.7.0" androidx-lifecycle = "2.10.0" -androidx-testExt = "1.3.0" appdirs = "1.5.0" cache4k = "0.14.0" carApp = "1.7.0" @@ -34,12 +30,10 @@ composeShimmer = "1.5.0" desugar_jdk_libs = "2.1.5" haze = "2.0.0-alpha03" jna = "5.18.1" -junit = "4.13.2" kermit = "2.1.0" kmpZip = "1.0.0" kotlin = "2.4.21" kotlinx-coroutines = "1.11.0" -kotlinx-io = "0.9.1" kotlinx-serialization-json = "1.11.0" millennium = "0.1.1" mqttClient = "2.1.1" @@ -55,27 +49,22 @@ vlcjNative = "4.12.0" ziplineVersion = "1.28.0" ktor = "3.5.1" dnssdkt = "1.1.0" -runner = "1.7.0" -core = "1.7.0" filekit = "0.14.2" -compose-webview = "0.1.0-SNAPSHOT" +compose-webview = "1.0.3" composeNativeTray = "2.1.6" koin = "4.2.2" multiplatform-nav3-ui = "1.1.1" -compose-multiplatform-adaptive = "1.3.0-alpha05" compose-multiplatform-lifecycle = "2.10.0" feather-icons = "1.1.1" kotlinx-datetime = "0.8.0" media3 = "1.10.1" androidx-datastore = "1.2.1" -ksp = "2.3.12" spotube-gradle = "0.1.2" cryptography = "0.6.0" reorderable = "3.1.0" vlcjBundler = "0.2.1" vanniktechMavenPublish = "0.37.0" uniffi = "0.3.7" -kotlinx-atomicfu = "0.33.0" mokkery = "3.5.1" jmustache = "1.16" @@ -98,12 +87,6 @@ kmp-zip = { module = "no.synth:kmp-zip", version.ref = "kmpZip" } kmp-zip-kotlinx = { module = "no.synth:kmp-zip-kotlinx", version.ref = "kmpZip" } kmp-zip-okio = { module = "no.synth:kmp-zip-okio", version.ref = "kmpZip" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-testJunit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" } -junit = { module = "junit:junit", version.ref = "junit" } -androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core" } -androidx-testExt-junit = { module = "androidx.test.ext:junit", version.ref = "androidx-testExt" } -androidx-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-espresso" } -androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" } compose-uiTooling = { module = "org.jetbrains.compose.ui:ui-tooling", version.ref = "composeMultiplatform" } androidx-lifecycle-viewmodelCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" } @@ -153,8 +136,6 @@ kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-c kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" } kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" } -androidx-runner = { group = "androidx.test", name = "runner", version.ref = "runner" } -androidx-core = { group = "androidx.test", name = "core", version.ref = "core" } filekit-core = { group = "io.github.vinceglb", name = "filekit-core", version.ref = "filekit" } filekit-dialogs = { group = "io.github.vinceglb", name = "filekit-dialogs", version.ref = "filekit" } filekit-dialogs-compose = { group = "io.github.vinceglb", name = "filekit-dialogs-compose", version.ref = "filekit" } @@ -170,7 +151,6 @@ feather-icons = { module = "br.com.devsrsouza.compose.icons:feather", version.re kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" } androidx-datastore = { module = "androidx.datastore:datastore", version.ref = "androidx-datastore" } androidx-datastore-preferences = { module = "androidx.datastore:datastore-preferences", version.ref = "androidx-datastore" } -kotlinx-io-okio = { module = "org.jetbrains.kotlinx:kotlinx-io-okio", version.ref = "kotlinx-io" } cryptography-core = { module = "dev.whyoleg.cryptography:cryptography-core", version.ref = "cryptography" } cryptography-provider-optimal = { module = "dev.whyoleg.cryptography:cryptography-provider-optimal", version.ref = "cryptography" } reorderable = { module = "sh.calvin.reorderable:reorderable", version.ref = "reorderable" } @@ -189,10 +169,8 @@ kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", versio jetbrainsKotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } androidKotlinMultiplatformLibrary = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" } zipline-gradle-plugin = { id = "app.cash.zipline", version.ref = "ziplineVersion" } -mavenPublish = { id = "maven-publish" } spotubeGradle = { id = "org.spotube.gradle-plugin", version.ref = "spotube-gradle" } vlcjBundler = { id = "org.spotube.vlcj-bundler", version.ref = "vlcjBundler" } -kotlinxAtomicFu = { id = "org.jetbrains.kotlinx.atomicfu", version.ref = "kotlinx-atomicfu" } uniffi = { id = "dev.gobley.uniffi", version.ref = "uniffi" } cargo = { id = "dev.gobley.cargo", version.ref = "uniffi" } mokkery = { id = "dev.mokkery", version.ref = "mokkery" }