fix(build): add headless mode for Linux and update CI to prepare dependencies

This commit is contained in:
Kingkor Roy Tirtho 2026-10-29 15:01:43 +06:00
parent eb972c8633
commit 8d4ea82a7e
3 changed files with 101 additions and 7 deletions

View File

@ -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:

View File

@ -646,6 +646,12 @@ tasks.withType<ComposeHotRun>().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()

View File

@ -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"