diff --git a/.github/workflows/spotube-release-binary.yml b/.github/workflows/spotube-release-binary.yml index cc69ab89..d666c54d 100644 --- a/.github/workflows/spotube-release-binary.yml +++ b/.github/workflows/spotube-release-binary.yml @@ -45,6 +45,11 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.release_type }}-${{ inputs.platform }} cancel-in-progress: false +env: + COMPOSE_WEBVIEW_REPO: KRTirtho/ComposeNativeWebview + # fix/linux-wayland-input + COMPOSE_WEBVIEW_COMMIT: b11ac748de1219f9432338c067a2c5dafef3072a + jobs: validate-inputs: name: Validate Inputs @@ -56,15 +61,61 @@ jobs: echo "::error::Building a single platform is only supported for nightly releases" exit 1 + prepare-deps: + name: Prepare Dependencies + needs: validate-inputs + runs-on: macos-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 + run: | + chmod +x gradlew + ./gradlew publishToMavenLocal + + - name: Upload maven local + uses: actions/upload-artifact@v7 + with: + name: maven-local + path: ~/.m2/repository/ + build-android: name: Android - needs: validate-inputs + needs: [validate-inputs, prepare-deps] 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: @@ -127,7 +178,7 @@ jobs: build-linux: name: Linux Desktop - needs: validate-inputs + needs: [validate-inputs, prepare-deps] if: ${{ inputs.platform == 'all' || inputs.platform == 'linux-x86_64' }} timeout-minutes: 120 runs-on: ubuntu-latest @@ -142,6 +193,12 @@ jobs: sudo apt-get update sudo apt-get install -y rpm fuse build-essential zlib1g-dev patchelf zstd + - 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: @@ -235,7 +292,7 @@ jobs: build-linux-arm64: name: Linux Desktop (aarch64) - needs: validate-inputs + needs: [validate-inputs, prepare-deps] if: ${{ inputs.platform == 'all' || inputs.platform == 'linux-aarch64' }} timeout-minutes: 120 runs-on: ubuntu-24.04-arm @@ -257,6 +314,12 @@ jobs: sudo apt-get update sudo apt-get install -y rpm fuse build-essential zlib1g-dev patchelf zstd + - 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: @@ -350,13 +413,19 @@ jobs: build-windows: name: Windows Desktop - needs: validate-inputs + needs: [validate-inputs, prepare-deps] 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: @@ -408,13 +477,19 @@ jobs: build-macos: name: macOS Desktop - needs: validate-inputs + needs: [validate-inputs, prepare-deps] 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: @@ -471,13 +546,19 @@ jobs: build-ios: name: iOS - needs: validate-inputs + needs: [validate-inputs, prepare-deps] 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: @@ -539,6 +620,7 @@ jobs: if: ${{ !inputs.dry_run && !cancelled() && !contains(needs.*.result, 'failure') }} needs: - validate-inputs + - prepare-deps - build-android - build-linux - build-linux-arm64 @@ -551,6 +633,12 @@ jobs: 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: diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 99794847..f60ba709 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -646,6 +646,12 @@ tasks.withType().configureEach { jvmArgs( "--enable-native-access=ALL-UNNAMED" ) + // Linux: the hot-reload agent starts AWT before main(), and JBR's X11 toolkit pins GTK to + // XWayland, where the embedded WebKit WebView renders black. Tao owns the windows, so the + // reloadable JVM stays headless (DevTools runs in its own JVM and is unaffected). + if (System.getProperty("os.name").lowercase().contains("linux")) { + jvmArgs("-Djava.awt.headless=true") + } systemProperty( "compose.application.resources.dir", project.layout.buildDirectory.dir("compose/tmp/prepareAppResources").get() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 020d99eb..d8ec04eb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -50,7 +50,7 @@ ziplineVersion = "1.28.0" ktor = "3.5.1" dnssdkt = "1.1.0" filekit = "0.14.2" -compose-webview = "1.0.3" +compose-webview = "0.1.0-SNAPSHOT" composeNativeTray = "2.1.6" koin = "4.2.2" multiplatform-nav3-ui = "1.1.1"