diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index bd74fd6e..99849abb 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -143,9 +143,24 @@ jobs: Write-Output "Tauri is already installed" } - - name: Build Tauri project + - name: Build Tauri project (Unix) + with: + PRIVATE_PUBLISH_KEY: ${{ secrets.PRIVATE_PUBLISH_KEY }} + PRIVATE_PUBLISH_KEY_PASSWORD: ${{ secrets.PRIVATE_PUBLISH_KEY_PASSWORD }} run: | cd runtime + export TAURI_PRIVATE_KEY="$PRIVATE_PUBLISH_KEY" + export TAURI_KEY_PASSWORD='$PRIVATE_PUBLISH_KEY_PASSWORD' + cargo tauri build --target ${{ matrix.rust_target }} --bundles ${{ matrix.tauri_bundle }} + + - name: Build Tauri project (Windows) + with: + PRIVATE_PUBLISH_KEY: ${{ secrets.PRIVATE_PUBLISH_KEY }} + PRIVATE_PUBLISH_KEY_PASSWORD: ${{ secrets.PRIVATE_PUBLISH_KEY_PASSWORD }} + run: | + cd runtime + $env:TAURI_PRIVATE_KEY="$PRIVATE_PUBLISH_KEY" + $env:TAURI_KEY_PASSWORD="$PRIVATE_PUBLISH_KEY_PASSWORD" cargo tauri build --target ${{ matrix.rust_target }} --bundles ${{ matrix.tauri_bundle }} - name: Upload artifact (macOS) @@ -153,7 +168,9 @@ jobs: uses: actions/upload-artifact@v4 with: name: MindWork AI Studio (macOS ${{ matrix.dotnet_runtime }}) - path: "runtime/target/${{ matrix.rust_target }}/release/bundle/dmg/MindWork AI Studio_*.dmg" + path: | + "runtime/target/${{ matrix.rust_target }}/release/bundle/dmg/MindWork AI Studio_*.dmg" + "runtime/target/${{ matrix.rust_target }}/release/bundle/macos/MindWork AI Studio_*.app.tar.gz*" if-no-files-found: error retention-days: ${{ env.RETENTION_DAYS }} @@ -162,7 +179,9 @@ jobs: uses: actions/upload-artifact@v4 with: name: MindWork AI Studio (Windows - MSI ${{ matrix.dotnet_runtime }}) - path: "runtime/target/${{ matrix.rust_target }}/release/bundle/msi/MindWork AI Studio_*.msi" + path: | + "runtime/target/${{ matrix.rust_target }}/release/bundle/msi/MindWork AI Studio_*.msi" + "runtime/target/${{ matrix.rust_target }}/release/bundle/msi/MindWork AI Studio_*.msi.zip*" if-no-files-found: error retention-days: ${{ env.RETENTION_DAYS }} @@ -171,7 +190,9 @@ jobs: uses: actions/upload-artifact@v4 with: name: MindWork AI Studio (Windows - NSIS ${{ matrix.dotnet_runtime }}) - path: "runtime/target/${{ matrix.rust_target }}/release/bundle/nsis/MindWork AI Studio_*.exe" + path: | + "runtime/target/${{ matrix.rust_target }}/release/bundle/nsis/MindWork AI Studio_*.exe" + "runtime/target/${{ matrix.rust_target }}/release/bundle/nsis/MindWork AI Studio_*.nsis.zip*" if-no-files-found: error retention-days: ${{ env.RETENTION_DAYS }} @@ -189,7 +210,9 @@ jobs: uses: actions/upload-artifact@v4 with: name: MindWork AI Studio (Linux - AppImage ${{ matrix.dotnet_runtime }}) - path: "runtime/target/${{ matrix.rust_target }}/release/bundle/appimage/mind-work-ai-studio_*.AppImage" + path: | + "runtime/target/${{ matrix.rust_target }}/release/bundle/appimage/mind-work-ai-studio_*.AppImage" + "runtime/target/${{ matrix.rust_target }}/release/bundle/appimage/mind-work-ai-studio_*.AppImage.tar.gz*" if-no-files-found: error retention-days: ${{ env.RETENTION_DAYS }} @@ -292,6 +315,16 @@ jobs: optimize_image: false copy_artifact_path: runtime copy_artifact_dest: result + + # + # We do not need to set the PRIVATE_PUBLISH_KEY and PRIVATE_PUBLISH_KEY_PASSWORD here, + # because we cannot produce the AppImage on arm64. Only the AppImage supports the automatic + # update feature. The Debian package does not support this feature. + # + #PRIVATE_PUBLISH_KEY: ${{ secrets.PRIVATE_PUBLISH_KEY }} + #PRIVATE_PUBLISH_KEY_PASSWORD: ${{ secrets.PRIVATE_PUBLISH_KEY_PASSWORD }} + # + shell: /bin/bash commands: | export HOME=/root diff --git a/runtime/Cargo.lock b/runtime/Cargo.lock index e2402d17..4085532a 100644 --- a/runtime/Cargo.lock +++ b/runtime/Cargo.lock @@ -2328,6 +2328,12 @@ dependencies = [ "tokio", ] +[[package]] +name = "minisign-verify" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" + [[package]] name = "miniz_oxide" version = "0.7.2" @@ -2560,6 +2566,17 @@ dependencies = [ "objc_exception", ] +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + [[package]] name = "objc-sys" version = "0.3.3" @@ -3371,6 +3388,30 @@ dependencies = [ "winreg 0.52.0", ] +[[package]] +name = "rfd" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea" +dependencies = [ + "block", + "dispatch", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "lazy_static", + "log", + "objc", + "objc-foundation", + "objc_id", + "raw-window-handle", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows 0.37.0", +] + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -4018,6 +4059,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f078117725e36d55d29fafcbb4b1e909073807ca328ae8deb8c0b3843aac0fed" dependencies = [ "anyhow", + "base64 0.21.7", "bytes", "cocoa", "dirs-next", @@ -4033,6 +4075,7 @@ dependencies = [ "http 0.2.12", "ignore", "indexmap 1.9.3", + "minisign-verify", "objc", "once_cell", "open", @@ -4042,6 +4085,7 @@ dependencies = [ "raw-window-handle", "regex", "reqwest 0.11.24", + "rfd", "semver", "serde", "serde_json", @@ -4056,12 +4100,14 @@ dependencies = [ "tauri-utils", "tempfile", "thiserror", + "time", "tokio", "url", "uuid", "webkit2gtk", "webview2-com", "windows 0.39.0", + "zip", ] [[package]] @@ -4914,6 +4960,19 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" +dependencies = [ + "windows_aarch64_msvc 0.37.0", + "windows_i686_gnu 0.37.0", + "windows_i686_msvc 0.37.0", + "windows_x86_64_gnu 0.37.0", + "windows_x86_64_msvc 0.37.0", +] + [[package]] name = "windows" version = "0.39.0" @@ -5068,6 +5127,12 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" +[[package]] +name = "windows_aarch64_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" + [[package]] name = "windows_aarch64_msvc" version = "0.39.0" @@ -5092,6 +5157,12 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" +[[package]] +name = "windows_i686_gnu" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" + [[package]] name = "windows_i686_gnu" version = "0.39.0" @@ -5116,6 +5187,12 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" +[[package]] +name = "windows_i686_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" + [[package]] name = "windows_i686_msvc" version = "0.39.0" @@ -5140,6 +5217,12 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" +[[package]] +name = "windows_x86_64_gnu" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" + [[package]] name = "windows_x86_64_gnu" version = "0.39.0" @@ -5182,6 +5265,12 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" +[[package]] +name = "windows_x86_64_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" + [[package]] name = "windows_x86_64_msvc" version = "0.39.0" @@ -5407,6 +5496,17 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", +] + [[package]] name = "zvariant" version = "3.15.2" diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 1c180171..5dd12f82 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -9,7 +9,7 @@ authors = ["Thorsten Sommer"] tauri-build = { version = "1.5", features = [] } [dependencies] -tauri = { version = "1.6", features = [ "http-all", "shell-sidecar", "path-all", "shell-open"] } +tauri = { version = "1.6", features = [ "updater", "http-all", "shell-sidecar", "path-all", "shell-open"] } tauri-plugin-window-state = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" diff --git a/runtime/tauri.conf.json b/runtime/tauri.conf.json index a0f9234e..6ea3152f 100644 --- a/runtime/tauri.conf.json +++ b/runtime/tauri.conf.json @@ -72,7 +72,15 @@ ] }, "updater": { - "active": false + "active": true, + "endpoints": [ + "https://raw.githubusercontent.com/MindWorkAI/AI-Studio/main/.updates/latest.json" + ], + "dialog": true, + "windows": { + "installMode": "passive" + }, + "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDM3MzE4MTM4RTNDMkM0NEQKUldSTnhNTGpPSUV4TjFkczFxRFJOZWgydzFQN1dmaFlKbXhJS1YyR1RKS1RnR09jYUpMaGsrWXYK" } } }