mirror of
https://github.com/fromchat-messenger/app.git
synced 2026-09-22 19:15:05 +03:00
Run ProGuard once on Linux x64, reuse jars for all platform packaging.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -25,6 +25,7 @@ concurrency:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx6g -Dkotlin.daemon.jvm.options=-Xmx6g
|
GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx6g -Dkotlin.daemon.jvm.options=-Xmx6g
|
||||||
|
FROMCHAT_PREBUILT_PROGUARD: "1"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
resolve-version:
|
resolve-version:
|
||||||
@@ -48,10 +49,35 @@ jobs:
|
|||||||
echo "version=$V" >> "$GITHUB_OUTPUT"
|
echo "version=$V" >> "$GITHUB_OUTPUT"
|
||||||
echo "tag=v$V" >> "$GITHUB_OUTPUT"
|
echo "tag=v$V" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
desktop-proguard:
|
||||||
|
needs: resolve-version
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 45
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
distribution: temurin
|
||||||
|
java-version: "17"
|
||||||
|
- uses: gradle/actions/setup-gradle@v4
|
||||||
|
with:
|
||||||
|
gradle-version: wrapper
|
||||||
|
- uses: ./.github/actions/set-version
|
||||||
|
with:
|
||||||
|
version: ${{ needs.resolve-version.outputs.version }}
|
||||||
|
- name: Compile and ProGuard release desktop jars
|
||||||
|
run: ./gradlew :app:desktop:exportReleaseProguardForCi --no-daemon --console=plain
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: desktop-proguard
|
||||||
|
path: app/desktop/build/ci/proguard/
|
||||||
|
if-no-files-found: error
|
||||||
|
retention-days: 7
|
||||||
|
|
||||||
windows-common:
|
windows-common:
|
||||||
needs: resolve-version
|
needs: resolve-version
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
timeout-minutes: 45
|
timeout-minutes: 30
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-java@v4
|
- uses: actions/setup-java@v4
|
||||||
@@ -77,20 +103,10 @@ jobs:
|
|||||||
key: cargo-windows-${{ runner.os }}-${{ hashFiles('app/desktop/windows-setup/Cargo.lock') }}
|
key: cargo-windows-${{ runner.os }}-${{ hashFiles('app/desktop/windows-setup/Cargo.lock') }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
cargo-windows-${{ runner.os }}-
|
cargo-windows-${{ runner.os }}-
|
||||||
- name: Build arch-independent Windows tooling and compile JVM
|
- name: Build Windows installer Rust tooling
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: ./gradlew :app:desktop:buildWindowsSetupRust --no-daemon --console=plain
|
||||||
export FROMCHAT_PACKAGING_JDK="$JAVA_HOME"
|
- uses: actions/upload-artifact@v4
|
||||||
./gradlew \
|
|
||||||
:app:desktop:buildWindowsSetupRust \
|
|
||||||
:app:shared:compileKotlinJvm \
|
|
||||||
:utils:shared:compileKotlinJvm \
|
|
||||||
:app:desktop:compileKotlin \
|
|
||||||
:app:desktop:jar \
|
|
||||||
--no-daemon \
|
|
||||||
--console=plain
|
|
||||||
- name: Upload Windows Rust installer tools
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
with:
|
||||||
name: windows-rust-tools
|
name: windows-rust-tools
|
||||||
path: app/desktop/windows-setup/target/release/*.exe
|
path: app/desktop/windows-setup/target/release/*.exe
|
||||||
@@ -98,7 +114,7 @@ jobs:
|
|||||||
retention-days: 7
|
retention-days: 7
|
||||||
|
|
||||||
windows-package:
|
windows-package:
|
||||||
needs: [resolve-version, windows-common]
|
needs: [resolve-version, desktop-proguard, windows-common]
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -126,6 +142,10 @@ jobs:
|
|||||||
- uses: ./.github/actions/set-version
|
- uses: ./.github/actions/set-version
|
||||||
with:
|
with:
|
||||||
version: ${{ needs.resolve-version.outputs.version }}
|
version: ${{ needs.resolve-version.outputs.version }}
|
||||||
|
- uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: desktop-proguard
|
||||||
|
path: app/desktop/build/prebuilt/main-release/proguard
|
||||||
- name: Restore Windows Rust installer tools
|
- name: Restore Windows Rust installer tools
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
@@ -156,7 +176,7 @@ jobs:
|
|||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
macos:
|
macos:
|
||||||
needs: resolve-version
|
needs: [resolve-version, desktop-proguard]
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -164,7 +184,7 @@ jobs:
|
|||||||
- arch: arm64
|
- arch: arm64
|
||||||
- arch: x64
|
- arch: x64
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
timeout-minutes: 90
|
timeout-minutes: 60
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-java@v4
|
- uses: actions/setup-java@v4
|
||||||
@@ -184,6 +204,10 @@ jobs:
|
|||||||
- uses: ./.github/actions/set-version
|
- uses: ./.github/actions/set-version
|
||||||
with:
|
with:
|
||||||
version: ${{ needs.resolve-version.outputs.version }}
|
version: ${{ needs.resolve-version.outputs.version }}
|
||||||
|
- uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: desktop-proguard
|
||||||
|
path: app/desktop/build/prebuilt/main-release/proguard
|
||||||
- name: Cache DMG background tooling
|
- name: Cache DMG background tooling
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
@@ -213,7 +237,7 @@ jobs:
|
|||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
linux:
|
linux:
|
||||||
needs: resolve-version
|
needs: [resolve-version, desktop-proguard]
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -225,7 +249,7 @@ jobs:
|
|||||||
runner: ubuntu-24.04-arm
|
runner: ubuntu-24.04-arm
|
||||||
appimage: appimagetool-aarch64.AppImage
|
appimage: appimagetool-aarch64.AppImage
|
||||||
runs-on: ${{ matrix.runner }}
|
runs-on: ${{ matrix.runner }}
|
||||||
timeout-minutes: 75
|
timeout-minutes: 45
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-java@v4
|
- uses: actions/setup-java@v4
|
||||||
@@ -238,6 +262,10 @@ jobs:
|
|||||||
- uses: ./.github/actions/set-version
|
- uses: ./.github/actions/set-version
|
||||||
with:
|
with:
|
||||||
version: ${{ needs.resolve-version.outputs.version }}
|
version: ${{ needs.resolve-version.outputs.version }}
|
||||||
|
- uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: desktop-proguard
|
||||||
|
path: app/desktop/build/prebuilt/main-release/proguard
|
||||||
- name: Install Linux packaging tools
|
- name: Install Linux packaging tools
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
|||||||
@@ -744,6 +744,46 @@ val macDmgReleaseOutput = desktopDistDir.map {
|
|||||||
it.file("FromChat-$desktopVersionName-macOS-${desktopReleaseArchLabel()}.dmg")
|
it.file("FromChat-$desktopVersionName-macOS-${desktopReleaseArchLabel()}.dmg")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val releaseProguardOutputDir = layout.buildDirectory.dir("compose/tmp/main-release/proguard")
|
||||||
|
val ciPrebuiltProguardDir = layout.buildDirectory.dir("prebuilt/main-release/proguard")
|
||||||
|
val ciProguardExportDir = layout.buildDirectory.dir("ci/proguard")
|
||||||
|
|
||||||
|
fun useCiPrebuiltProguard(): Boolean =
|
||||||
|
System.getenv("FROMCHAT_PREBUILT_PROGUARD") == "1"
|
||||||
|
|
||||||
|
tasks.register<Copy>("exportReleaseProguardForCi") {
|
||||||
|
group = "compose desktop"
|
||||||
|
description = "Compile, ProGuard, and export release jars for CI (run once on Linux x64)."
|
||||||
|
dependsOn("proguardReleaseJars")
|
||||||
|
from(releaseProguardOutputDir)
|
||||||
|
into(ciProguardExportDir)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register<Copy>("stageCiPrebuiltProguard") {
|
||||||
|
group = "compose desktop"
|
||||||
|
description = "Stage downloaded CI ProGuard jars into compose release tmp before packaging."
|
||||||
|
onlyIf { useCiPrebuiltProguard() }
|
||||||
|
from(ciPrebuiltProguardDir)
|
||||||
|
into(releaseProguardOutputDir)
|
||||||
|
doFirst {
|
||||||
|
check(ciPrebuiltProguardDir.get().asFile.isDirectory) {
|
||||||
|
"Missing prebuilt ProGuard at ${ciPrebuiltProguardDir.get().asFile}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register("packageReleaseFromPrebuiltProguard") {
|
||||||
|
group = "compose desktop"
|
||||||
|
description = "Package release desktop for the current OS using CI prebuilt ProGuard jars."
|
||||||
|
dependsOn("stageCiPrebuiltProguard")
|
||||||
|
when {
|
||||||
|
runningOnMacOs -> dependsOn("packageReleaseMac")
|
||||||
|
runningOnLinux -> dependsOn("packageReleaseLinux")
|
||||||
|
runningOnWindows -> dependsOn("packageReleaseWindows")
|
||||||
|
else -> doFirst { error("Unsupported OS for packageReleaseFromPrebuiltProguard") }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tasks.register("packageReleaseMac") {
|
tasks.register("packageReleaseMac") {
|
||||||
group = "compose desktop"
|
group = "compose desktop"
|
||||||
description = "Build release macOS DMG and copy to distributions/release."
|
description = "Build release macOS DMG and copy to distributions/release."
|
||||||
@@ -1109,6 +1149,18 @@ tasks.register<Exec>("packageBetaWindows") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
afterEvaluate {
|
afterEvaluate {
|
||||||
|
tasks.matching { it.name == "proguardReleaseJars" }.configureEach {
|
||||||
|
onlyIf {
|
||||||
|
!useCiPrebuiltProguard() || !ciPrebuiltProguardDir.get().asFile.isDirectory
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tasks.matching {
|
||||||
|
it.name == "createReleaseDistributable" || it.name == "createReleaseDistributableImpl"
|
||||||
|
}.configureEach {
|
||||||
|
if (useCiPrebuiltProguard()) {
|
||||||
|
dependsOn("stageCiPrebuiltProguard")
|
||||||
|
}
|
||||||
|
}
|
||||||
tasks.matching { it.name == "createRuntimeImage" || it.name == "createReleaseRuntimeImage" }.configureEach {
|
tasks.matching { it.name == "createRuntimeImage" || it.name == "createReleaseRuntimeImage" }.configureEach {
|
||||||
if (!isWindowsArm64Host()) return@configureEach
|
if (!isWindowsArm64Host()) return@configureEach
|
||||||
inputs.property("packagingJdkHome", resolvePackagingJdkHome())
|
inputs.property("packagingJdkHome", resolvePackagingJdkHome())
|
||||||
|
|||||||
Reference in New Issue
Block a user