version: '3' vars: JLINK_MODULES: "java.base,java.compiler,java.desktop,java.instrument,java.logging,java.management,java.naming,java.net.http,java.prefs,java.rmi,java.scripting,java.security.jgss,java.security.sasl,java.sql,java.transaction.xa,java.xml,java.xml.crypto,jdk.crypto.ec,jdk.crypto.cryptoki,jdk.unsupported" # Override via JPDFIUM_PLATFORMS env (csv of platform keys, or 'all'). JPDFIUM_PLATFORMS: sh: | if [ -n "${JPDFIUM_PLATFORMS:-}" ]; then echo "$JPDFIUM_PLATFORMS" else case "{{OS}}-{{ARCH}}" in darwin-arm64) echo "darwin-arm64";; darwin-amd64) echo "darwin-x64";; linux-amd64) echo "linux-x64";; linux-arm64) echo "linux-arm64";; windows-amd64) echo "windows-x64";; *) echo "all";; esac fi tasks: prepare: desc: "Prepare desktop build dependencies" deps: - jlink - task: ":frontend:prepare" vars: { MODE: desktop } - provisioner provisioner: desc: "Build installer provisioner" platforms: [windows] cmds: - node editor/scripts/build-provisioner.mjs dev: desc: "Start Tauri desktop dev mode" deps: [prepare] ignore_error: true cmds: - cd editor && npx tauri dev --no-watch build: desc: "Build Tauri desktop app (production)" deps: [prepare] cmds: - cd editor && npx tauri build build:dev: desc: "Build Tauri desktop app (dev, no bundling)" deps: [prepare] cmds: - cd editor && npx tauri build --no-bundle build:dev:mac: desc: "Build Tauri desktop .app bundle (macOS)" deps: [prepare] cmds: - cd editor && npx tauri build --bundles app build:dev:windows: desc: "Build Tauri desktop NSIS installer (Windows)" deps: [prepare] cmds: - cd editor && npx tauri build --bundles nsis build:dev:linux: desc: "Build Tauri desktop AppImage (Linux)" deps: [prepare] cmds: - cd editor && npx tauri build --bundles appimage clean: desc: "Clean Tauri/Cargo build artifacts" cmds: - task: jlink:clean - cd editor/src-tauri && cargo clean - rm -rf editor/dist editor/build # ============================================================ # JLink — Build bundled Java runtime for Tauri # ============================================================ jlink: desc: "Build backend JAR and create JLink runtime for Tauri" deps: [jlink:jar, jlink:runtime] jlink:jar: desc: "Build backend JAR for Tauri bundling (host-OS natives only by default)" run: once dir: .. env: DISABLE_ADDITIONAL_FEATURES: "true" cmds: - echo "Building bootJar with JPDFium natives for {{.JPDFIUM_PLATFORMS}}" - cmd: cmd /c gradlew.bat bootJar --no-daemon -PjpdfiumPlatforms={{.JPDFIUM_PLATFORMS}} platforms: [windows] - cmd: ./gradlew bootJar --no-daemon -PjpdfiumPlatforms={{.JPDFIUM_PLATFORMS}} platforms: [linux, darwin] - mkdir -p frontend/editor/src-tauri/libs - cp app/core/build/libs/stirling-pdf-*.jar frontend/editor/src-tauri/libs/ status: - test -f frontend/editor/src-tauri/libs/stirling-pdf-*.jar jlink:runtime: desc: "Create custom JRE with jlink" deps: [jlink:jar] cmds: - rm -rf editor/src-tauri/runtime/jre - mkdir -p editor/src-tauri/runtime - >- jlink --add-modules {{.JLINK_MODULES}} --strip-debug --compress=zip-6 --no-header-files --no-man-pages --output editor/src-tauri/runtime/jre status: - test -d editor/src-tauri/runtime/jre jlink:clean: desc: "Remove JLink runtime and bundled JARs" cmds: - rm -rf editor/src-tauri/libs editor/src-tauri/runtime # macOS-only. Replaces jlink:runtime's single-arch JRE with a universal # (arm64 + x86_64) one for the universal Tauri shell. Runs the x86_64 # jlink under Rosetta on Apple Silicon, so it is opt-in and not part of # the default desktop:build flow. Requires AARCH64_JAVA_HOME and # X64_JAVA_HOME to point at matching JDK installations with jmods/. jlink:universal-mac: desc: "Create universal (arm64+x86_64) JRE for the macOS Tauri build" deps: [jlink:jar] platforms: [darwin] env: JLINK_MODULES: "{{.JLINK_MODULES}}" OUTPUT_DIR: editor/src-tauri/runtime/jre cmds: - editor/scripts/build-universal-mac-jre.sh