From 9cb5db15f0b81b1555b778ba427dffefebbd57ec Mon Sep 17 00:00:00 2001 From: Julian Chang Date: Mon, 6 Jul 2026 01:00:56 -0400 Subject: [PATCH] Attempt installer/updating --- .github/actions/setup-rust/action.yml | 32 ++ .github/workflows/oneclient_release.yml | 293 ++++++++++++++++++ CONTRIBUTING.md | 14 + Cargo.lock | 265 +++++++++++++++- README.md | 16 + packages/oneclient_app/Cargo.toml | 42 +++ .../distribution/App.entitlements | 18 ++ .../linux/org.polyfrost.oneclient.template | 12 + packages/oneclient_app/icons/128x128.png | Bin 0 -> 5626 bytes packages/oneclient_app/icons/128x128@2x.png | Bin 0 -> 11645 bytes packages/oneclient_app/icons/32x32.png | Bin 0 -> 2762 bytes packages/oneclient_app/icons/512x512.png | Bin 0 -> 19730 bytes packages/oneclient_app/icons/StoreLogo.png | Bin 0 -> 1716 bytes packages/oneclient_app/icons/icon.icns | Bin 0 -> 26852 bytes packages/oneclient_app/icons/icon.ico | Bin 0 -> 47387 bytes packages/oneclient_app/icons/icon.png | Bin 0 -> 19730 bytes packages/oneclient_app/src/lib.rs | 1 + packages/oneclient_app/src/main.rs | 2 + packages/oneclient_app/src/updater.rs | 42 +++ .../oneclient_core/src/settings/launcher.rs | 2 + 20 files changed, 734 insertions(+), 5 deletions(-) create mode 100644 .github/actions/setup-rust/action.yml create mode 100644 .github/workflows/oneclient_release.yml create mode 100644 packages/oneclient_app/distribution/App.entitlements create mode 100644 packages/oneclient_app/distribution/linux/org.polyfrost.oneclient.template create mode 100644 packages/oneclient_app/icons/128x128.png create mode 100644 packages/oneclient_app/icons/128x128@2x.png create mode 100644 packages/oneclient_app/icons/32x32.png create mode 100644 packages/oneclient_app/icons/512x512.png create mode 100644 packages/oneclient_app/icons/StoreLogo.png create mode 100644 packages/oneclient_app/icons/icon.icns create mode 100644 packages/oneclient_app/icons/icon.ico create mode 100644 packages/oneclient_app/icons/icon.png create mode 100644 packages/oneclient_app/src/updater.rs diff --git a/.github/actions/setup-rust/action.yml b/.github/actions/setup-rust/action.yml new file mode 100644 index 00000000..4115cc0c --- /dev/null +++ b/.github/actions/setup-rust/action.yml @@ -0,0 +1,32 @@ +name: Setup Rust +description: Install the Rust toolchain (+ optional targets) and restore the build cache. +inputs: + target: + description: Comma-separated extra target triples to install + required: false + default: '' + save-cache: + description: Whether to save the Rust cache + required: false + default: 'false' + restore-cache: + description: Whether to restore the Rust cache + required: false + default: 'true' +runs: + using: composite + steps: + - name: Install Rust (stable) + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + targets: ${{ inputs.target }} + components: cargo, clippy, rustc, rustfmt + + - name: Cache Rust + if: ${{ inputs.restore-cache == 'true' }} + uses: Swatinem/rust-cache@master + with: + key: ${{ inputs.target }} + save-if: ${{ inputs.save-cache }} + shared-key: release-cache diff --git a/.github/workflows/oneclient_release.yml b/.github/workflows/oneclient_release.yml new file mode 100644 index 00000000..599beced --- /dev/null +++ b/.github/workflows/oneclient_release.yml @@ -0,0 +1,293 @@ +name: OneClient Release Build + + +on: + workflow_dispatch: + +env: + CARGO_PACKAGER_SIGN_PRIVATE_KEY: ${{ secrets.CARGO_PACKAGER_SIGN_PRIVATE_KEY }} + CARGO_PACKAGER_SIGN_PRIVATE_KEY_PASSWORD: ${{ secrets.CARGO_PACKAGER_SIGN_PRIVATE_KEY_PASSWORD }} + +jobs: + prepare: + runs-on: ubuntu-latest + permissions: + contents: write + outputs: + version: ${{ steps.version.outputs.version }} + tag: ${{ steps.version.outputs.tag }} + steps: + - uses: actions/checkout@v4 + + - name: Resolve version from Cargo.toml + id: version + shell: bash + run: | + VERSION=$(grep -m1 '^version' Cargo.toml | sed -E 's/.*"([^"]+)".*/\1/') + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "tag=oneclient-$VERSION" >> "$GITHUB_OUTPUT" + + - name: Create/ensure draft release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ steps.version.outputs.tag }} + VERSION: ${{ steps.version.outputs.version }} + run: | + if ! gh release view "$TAG" >/dev/null 2>&1; then + gh release create "$TAG" \ + --draft \ + --title "OneClient $VERSION" \ + --notes "Automated release for OneClient $VERSION." + fi + + # --------------------------------------------------------------------------- + package: + needs: prepare + permissions: + contents: write + # Required so SignPath can download the uploaded build artifact. + actions: read + strategy: + fail-fast: false + matrix: + include: + - platform: macos-latest + target: aarch64-apple-darwin + os_key: darwin + arch: aarch64 + formats: app,dmg + - platform: macos-latest + target: x86_64-apple-darwin + os_key: darwin + arch: x86_64 + formats: app,dmg + - platform: ubuntu-22.04 + target: '' + os_key: linux + arch: x86_64 + formats: deb,appimage + - platform: windows-latest + target: '' + os_key: windows + arch: x86_64 + formats: nsis + + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v4 + + - name: Setup Rust + uses: ./.github/actions/setup-rust + with: + target: ${{ matrix.target }} + save-cache: true + restore-cache: true + + - name: (Linux) Install system dependencies + if: matrix.platform == 'ubuntu-22.04' + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends \ + build-essential cmake pkg-config clang python3 \ + libfontconfig-dev libfreetype-dev \ + libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev libxrandr-dev \ + libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libdbus-1-dev \ + libfuse2 + + - name: Install cargo-packager + shell: bash + run: cargo install cargo-packager --version 0.11.8 --locked + + - name: Import Apple Developer certificate + if: startsWith(matrix.platform, 'macos') + env: + APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} + APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + run: | + echo "$APPLE_CERTIFICATE" | base64 --decode > certificate.p12 + security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain + security default-keychain -s build.keychain + security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain + security set-keychain-settings -t 3600 -u build.keychain + security import certificate.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain + CERT_ID=$(security find-identity -v -p codesigning build.keychain | awk -F'"' '/Developer ID Application/ {print $2; exit}') + if [ -z "$CERT_ID" ]; then + echo "::error::No Developer ID Application certificate found in keychain." + exit 1 + fi + echo "APPLE_SIGNING_IDENTITY=$CERT_ID" >> "$GITHUB_ENV" + + - name: Build release binary + shell: bash + run: | + if [ -n "${{ matrix.target }}" ]; then + cargo build --release --bin oneclient_app --target ${{ matrix.target }} + else + cargo build --release --bin oneclient_app + fi + + - name: Package + shell: bash + env: + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + run: | + ARGS="--release --formats ${{ matrix.formats }}" + if [ -n "${{ matrix.target }}" ]; then + ARGS="$ARGS --target ${{ matrix.target }}" + fi + cargo packager $ARGS --verbose + + - name: Resolve packager output dir + id: outdir + shell: bash + run: | + if [ -n "${{ matrix.target }}" ]; then + echo "dir=target/${{ matrix.target }}/release" >> "$GITHUB_OUTPUT" + else + echo "dir=target/release" >> "$GITHUB_OUTPUT" + fi + + - name: (Windows) Locate installer + if: matrix.platform == 'windows-latest' + id: win_installer + shell: bash + run: echo "path=$(ls ${{ steps.outdir.outputs.dir }}/*-setup.exe | head -n1)" >> "$GITHUB_OUTPUT" + + - name: (Windows) Upload unsigned installer artifact + if: matrix.platform == 'windows-latest' + id: win_upload_unsigned + uses: actions/upload-artifact@v4 + with: + name: oneclient-windows-installer-unsigned + path: ${{ steps.win_installer.outputs.path }} + + - name: (Windows) Submit SignPath signing request + if: matrix.platform == 'windows-latest' + uses: signpath/github-action-submit-signing-request@v1 + with: + api-token: ${{ secrets.SIGNPATH_API_TOKEN }} + organization-id: ${{ secrets.SIGNPATH_ORGANIZATION_ID }} + project-slug: onelauncher + signing-policy-slug: test-signing + artifact-configuration-slug: onelauncher-installer + github-artifact-id: ${{ steps.win_upload_unsigned.outputs.artifact-id }} + wait-for-completion: true + output-artifact-directory: signed + + - name: (Windows) Replace installer with signed one + recompute updater sig + if: matrix.platform == 'windows-latest' + shell: bash + run: | + signed="$(ls signed/*-setup.exe | head -n1)" + # Overwrite the unsigned installer in the packager out dir with the signed exe. + cp "$signed" "${{ steps.win_installer.outputs.path }}" + # Recompute the updater signature over the SIGNED exe. + cargo packager signer sign \ + --private-key "$CARGO_PACKAGER_SIGN_PRIVATE_KEY" \ + --password "$CARGO_PACKAGER_SIGN_PRIVATE_KEY_PASSWORD" \ + "${{ steps.win_installer.outputs.path }}" + + - name: Upload installers and build manifest fragment + shell: bash + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ needs.prepare.outputs.tag }} + OUT_DIR: ${{ steps.outdir.outputs.dir }} + OS_KEY: ${{ matrix.os_key }} + ARCH: ${{ matrix.arch }} + VERSION: ${{ needs.prepare.outputs.version }} + run: | + set -euo pipefail + shopt -s nullglob + + # Identify the single updater artifact for this platform (the file with a + # sibling .sig): -setup.exe (nsis), *.app.tar.gz (app), *.AppImage.tar.gz (appimage). + updater_file=""; fmt=""; ext="" + case "$OS_KEY" in + windows) updater_file="$(ls "$OUT_DIR"/*-setup.exe | head -n1)"; fmt="nsis"; ext="exe" ;; + darwin) updater_file="$(ls "$OUT_DIR"/*.app.tar.gz | head -n1)"; fmt="app"; ext="app.tar.gz" ;; + linux) updater_file="$(ls "$OUT_DIR"/*.AppImage.tar.gz 2>/dev/null | head -n1)"; fmt="appimage"; ext="AppImage.tar.gz" + if [ -z "$updater_file" ]; then updater_file="$(ls "$OUT_DIR"/*.AppImage | head -n1)"; ext="AppImage"; fi ;; + esac + + # The updater bundle isn't always arch-tagged by cargo-packager, so the two + # macOS legs would collide on the release. Rename the updater artifact + its .sig + # to an arch-unique name before upload, and point the manifest at that name. + unique="OneClient_${VERSION}_${OS_KEY}_${ARCH}.${ext}" + cp "$updater_file" "$OUT_DIR/$unique" + cp "$updater_file.sig" "$OUT_DIR/$unique.sig" + + # Upload human-facing installers (dmg/deb/AppImage/signed exe) + the renamed + # updater bundle and its .sig. Skip the un-renamed updater bundle to avoid clashes. + for f in "$OUT_DIR"/*.dmg "$OUT_DIR"/*.deb "$OUT_DIR"/*.AppImage "$OUT_DIR"/*-setup.exe "$OUT_DIR/$unique" "$OUT_DIR/$unique.sig"; do + [ -e "$f" ] || continue + gh release upload "$TAG" "$f" --clobber + done + + base="$unique" + mkdir -p fragments + SIG="$(cat "$updater_file.sig")" \ + URL="https://github.com/${GITHUB_REPOSITORY}/releases/download/${TAG}/${base}" \ + FMT="$fmt" \ + KEY="${OS_KEY}-${ARCH}" \ + python3 - <<'PY' + import json, os + frag = { + os.environ["KEY"]: { + "signature": os.environ["SIG"], + "url": os.environ["URL"], + "format": os.environ["FMT"], + } + } + with open(f"fragments/{os.environ['KEY']}.json", "w") as f: + json.dump(frag, f) + PY + + - name: Upload manifest fragment + uses: actions/upload-artifact@v4 + with: + name: manifest-${{ matrix.os_key }}-${{ matrix.arch }} + path: fragments/*.json + + manifest: + needs: [prepare, package] + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Download all manifest fragments + uses: actions/download-artifact@v4 + with: + pattern: manifest-* + path: fragments + merge-multiple: true + + - name: Assemble latest.json + env: + VERSION: ${{ needs.prepare.outputs.version }} + run: | + python3 - <<'PY' + import json, glob, os, datetime + platforms = {} + for path in glob.glob("fragments/*.json"): + with open(path) as f: + platforms.update(json.load(f)) + manifest = { + "version": os.environ["VERSION"], + "pub_date": datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"), + "platforms": platforms, + } + with open("latest.json", "w") as f: + json.dump(manifest, f, indent=2) + print(json.dumps(manifest, indent=2)) + PY + + - name: Upload latest.json to release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ needs.prepare.outputs.tag }} + run: gh release upload "$TAG" latest.json --clobber diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2b0be4a6..4d0b3af4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -55,6 +55,19 @@ The app crate is `oneclient_app`: After you finish making your changes and committed them to your branch, run `cargo fmt` and `cargo clippy` to fix style inconsistencies and catch lints. +### Packaging + +Installers are built with [cargo-packager] (config in +`packages/oneclient_app/Cargo.toml` under `[package.metadata.packager]`): + +- `cargo install cargo-packager --locked` +- `cargo build --release -p oneclient_app` +- `cargo packager --release -p oneclient_app --formats ` + +Releases are cut by dispatching the `OneClient Release Build` GitHub Actions +workflow. See the **Packaging / Releasing** section of the [README] for details +and per-OS prerequisites. + ### Pull Request Once you have finished making your changes, create a pull request (PR) to submit them. @@ -84,6 +97,7 @@ Run `xcode-select --install` in the terminal to install them. If they are alread This CONTRIBUTING.md file was inspired by the [`github/docs` CONTRIBUTING.md] file, and we extend our gratitude to the original authors. +[cargo-packager]: https://github.com/crabnebula-dev/cargo-packager [Skia]: https://skia.org/ [Freya setup guide]: https://book.freyaui.dev/setup.html [`cargo`]: https://doc.rust-lang.org/cargo/getting-started/installation.html diff --git a/Cargo.lock b/Cargo.lock index 140fd4dc..9b1c5367 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -931,6 +931,42 @@ dependencies = [ "wayland-client", ] +[[package]] +name = "cargo-packager-updater" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eec09acab5c2227aba2e592d431708305bdeb6d507703f6cd8983fb57b6c5ef7" +dependencies = [ + "base64", + "cargo-packager-utils", + "ctor 0.2.9", + "dirs", + "dunce", + "flate2", + "http", + "log", + "minisign-verify", + "percent-encoding", + "reqwest 0.12.28", + "semver", + "serde", + "serde_json", + "tar", + "tempfile", + "thiserror 1.0.69", + "time", + "url", +] + +[[package]] +name = "cargo-packager-utils" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b43458dd2ee3cdab3f5b105acd80791383b730380c929018701313d7d299d4e8" +dependencies = [ + "ctor 0.2.9", +] + [[package]] name = "cc" version = "1.2.63" @@ -1304,6 +1340,16 @@ dependencies = [ "hybrid-array", ] +[[package]] +name = "ctor" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" +dependencies = [ + "quote", + "syn", +] + [[package]] name = "ctor" version = "0.10.1" @@ -1346,6 +1392,12 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac6b926516df9c60bfa16e107b21086399f8285a44ca9711344b9e553c5146e2" +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" + [[package]] name = "digest" version = "0.10.7" @@ -1373,7 +1425,28 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" dependencies = [ - "dirs-sys", + "dirs-sys 0.5.0", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.4.6", + "windows-sys 0.48.0", ] [[package]] @@ -1384,7 +1457,7 @@ checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", - "redox_users", + "redox_users 0.5.2", "windows-sys 0.61.2", ] @@ -2606,6 +2679,7 @@ dependencies = [ "hyper", "hyper-util", "rustls", + "rustls-native-certs", "tokio", "tokio-rustls", "tower-service", @@ -3359,6 +3433,12 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "minisign-verify" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f9645cb765ea72b8111f36c522475d2daa0d22c957a9826437e97534bc4e9e" + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -3530,6 +3610,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + [[package]] name = "num-derive" version = "0.4.2" @@ -4020,6 +4106,7 @@ dependencies = [ "anyhow", "arboard", "bytes 1.11.1", + "cargo-packager-updater", "chrono", "freya", "freya-skia-safe", @@ -4064,7 +4151,7 @@ dependencies = [ "parking_lot", "polyio", "rand 0.10.1", - "reqwest", + "reqwest 0.13.3", "sanitize-filename", "serde", "serde_json", @@ -4379,6 +4466,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -4757,6 +4850,17 @@ dependencies = [ "bitflags 2.12.1", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 1.0.69", +] + [[package]] name = "redox_users" version = "0.5.2" @@ -4797,6 +4901,48 @@ version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64", + "bytes 1.11.1", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams 0.4.2", + "web-sys", +] + [[package]] name = "reqwest" version = "0.13.3" @@ -4841,7 +4987,7 @@ dependencies = [ "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams", + "wasm-streams 0.5.0", "web-sys", ] @@ -5868,6 +6014,36 @@ dependencies = [ "zune-jpeg", ] +[[package]] +name = "time" +version = "0.3.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-skia" version = "0.11.4" @@ -5900,7 +6076,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a90a0ca3ee6a69f2ad28fd11621a4c3f03b371f366be500b64df260c4ffbafb4" dependencies = [ "as-raw-xcb-connection", - "ctor", + "ctor 0.10.1", "libloading", "pkg-config", "tracing", @@ -6538,6 +6714,19 @@ dependencies = [ "wasmparser", ] +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "wasm-streams" version = "0.5.0" @@ -6950,6 +7139,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -6977,6 +7175,21 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -7019,6 +7232,12 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -7031,6 +7250,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -7043,6 +7268,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -7067,6 +7298,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -7079,6 +7316,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -7091,6 +7334,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -7103,6 +7352,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" diff --git a/README.md b/README.md index 50f159ff..d816872e 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,22 @@ cargo run -p oneclient_app cargo build --release -p oneclient_app ``` +### Packaging / Releasing + +Installers are produced with [**cargo-packager**](https://github.com/crabnebula-dev/cargo-packager) +(the standalone bundler spun out of the Tauri bundler). Config lives in +[`packages/oneclient_app/Cargo.toml`](./packages/oneclient_app/Cargo.toml) under +`[package.metadata.packager]`. + +```sh +cargo install cargo-packager --locked + +# Build the binary, then bundle it for the current OS: +cargo build --release -p oneclient_app +cargo packager --release -p oneclient_app --formats +# Windows: nsis macOS: app,dmg Linux: deb,appimage +``` + ### Versioning The workspace shares a single version, defined in the root [`Cargo.toml`](./Cargo.toml) diff --git a/packages/oneclient_app/Cargo.toml b/packages/oneclient_app/Cargo.toml index 61b5e5d2..b1eac8f1 100644 --- a/packages/oneclient_app/Cargo.toml +++ b/packages/oneclient_app/Cargo.toml @@ -32,6 +32,8 @@ sysinfo.workspace = true anyhow.workspace = true regex.workspace = true +cargo-packager-updater = "=0.2.3" + # file dialog rfd = "=0.17.2" @@ -48,3 +50,43 @@ mimalloc = "=0.1.52" [patch.crates-io] freya = { git = "https://github.com/marc2332/freya.git", branch = "fix/blur" } +# Build then package (per OS): +# cargo build --release -p oneclient_app +# cargo packager --release -p oneclient_app --formats +[package.metadata.packager] +product-name = "OneClient" +identifier = "org.polyfrost.OneClient" +category = "Game" +publisher = "Polyfrost" +copyright = "© 2026 Polyfrost Inc." +homepage = "https://polyfrost.org/projects/oneclient" +license-file = "../../LICENSE" +long-description = "Next-generation open source Minecraft launcher" +formats = ["nsis", "app", "dmg", "deb", "appimage"] +binaries = [{ path = "oneclient_app", main = true }] +icons = [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico", +] + +[package.metadata.packager.macos] +minimum-system-version = "10.15" +entitlements = "distribution/App.entitlements" + +[package.metadata.packager.dmg] +app-position = { x = 190, y = 190 } +app-folder-position = { x = 470, y = 190 } + +[package.metadata.packager.windows] +digest-algorithm = "sha256" +timestamp-url = "https://timestamp.digicert.com" + +[package.metadata.packager.deb] +desktop-template = "distribution/linux/org.polyfrost.oneclient.template" + +[package.metadata.packager.appimage] +# desktop entry generated from the deb template above via the linux config + diff --git a/packages/oneclient_app/distribution/App.entitlements b/packages/oneclient_app/distribution/App.entitlements new file mode 100644 index 00000000..48f4264c --- /dev/null +++ b/packages/oneclient_app/distribution/App.entitlements @@ -0,0 +1,18 @@ + + + + + + com.apple.security.cs.disable-library-validation + + + com.apple.security.cs.allow-dyld-environment-variables + + + com.apple.security.device.audio-input + + + com.apple.security.device.camera + + + diff --git a/packages/oneclient_app/distribution/linux/org.polyfrost.oneclient.template b/packages/oneclient_app/distribution/linux/org.polyfrost.oneclient.template new file mode 100644 index 00000000..e43eb2ad --- /dev/null +++ b/packages/oneclient_app/distribution/linux/org.polyfrost.oneclient.template @@ -0,0 +1,12 @@ +[Desktop Entry] +Name=OneClient +Comment=Next-generation open source Minecraft launcher +Exec={{exec}} +Icon={{icon}} +Type=Application +Terminal=false +StartupNotify=true +Categories=Game;ActionGame;AdventureGame;Simulation; +Keywords=mc;minecraft;game +StartupWMClass={{exec}} +Version=1.4 diff --git a/packages/oneclient_app/icons/128x128.png b/packages/oneclient_app/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..21b907527ce5ac9a02bef47445d9fe5fbfedd0d1 GIT binary patch literal 5626 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 UY<2Kz_W%F@07*qoM6N<$f^>hMtpET3 literal 0 HcmV?d00001 diff --git a/packages/oneclient_app/icons/128x128@2x.png b/packages/oneclient_app/icons/128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0786a43c136ccf6b8c4616a74f3f379b2d5fa92d GIT binary patch literal 11645 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 Qf&c&j07*qoM6N<$f|#ur&;S4c literal 0 HcmV?d00001 diff --git a/packages/oneclient_app/icons/512x512.png b/packages/oneclient_app/icons/512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..fbc4ca47a8eac0aa50392f22cc83d557635e5d3c GIT binary patch literal 19730 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 XvtNe8wYze3VFQ}`*Lwx7jFW!?NpD~= literal 0 HcmV?d00001 diff --git a/packages/oneclient_app/icons/StoreLogo.png b/packages/oneclient_app/icons/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..431f57e55e5827f4deceb23fc2e33bec6f6de727 GIT binary patch literal 1716 zcmV;l221&gP)z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;xNDJpgGwPCcUl000SaNLh0L01FcU01FcV0GgZ_00007 zbV*G`2k8p~5i%Hi0(*4;00sC-L_t(&-tC%wY*SSfz<>9>u3ux_2HOf7$OaLD0s?~$ z9EwW(!vG1VzNeh{S*b8v~|gLIRaE=MPAZ5owT_58TIfdhXu z;}2;(GTX`AJ93c{S|bvRS+IR)4KICs28UH4f3%&M(=%{Q%*13;dLG2RRlI=`laHf@?>Y_lDZ%+AG^@ERMS1oIv979^FrRQ9$HKMWd)s7GV zIYaCK_ybXVO&S10oc0dSt>4$oGp`(>wKdvvAUk%|@b-abL!C2IpS0H>#p}~2IcT7j z@hKgLeCJ?@?K{u*3`nE5g%$7C80r>`wqUoJVjvm~Ufm)>2=16Nz_87V_iAYLwj>_p zi!G-(6myyX%Jc~-?Vqb_+c;U%*8Y9M7-Nvb0gcbUb|)6(gxk-fWeuI`XI!5dE7o9J zc?(~bw-SlynNY!`j85AXe|e7MCw++l(KN~W4JYX=L0fm{K&}~;4#4lnTi9|+qslKi zcsLBe(Ch(}J}}s@tprLoxY0D({UGK0J-l8XG}OH@XCO<8t_C0yk(6v~YS*p(JV0|u zcg6X4=CR>Er(qu@6+!k^)^!=AOWAL8sEt`m4zj&g_j#*;qKP(KV^b(}WiV=Fnr<}- z@0WRba$Ef3T{XkZvis98sR96ZbrZWQ>#024#HW=(8e>ox}X_Oy1u=Gj3X)8EKdK^76;Kp`qUd9Fn?)`rkv7SpqhVez3-Xow;(60d zr^1Q_$>fi-VKIxuyVm|+>-p0iAa7VQL!368S#~VucvG~tNcP9c`M>`a^D?EVx*Q3S<{^XP1eKDD)xBY&I+ zVDtzJvvXDQQw0;R)hou+H35n~HcmkVu(T)-MG@T(0x%-i!JG3s-*tDEH?)WA+Y8Lh zEijX0(kEAOu=A|BWbPnF=A|aK9+^LDxM8&i@N?CLWO3LK6S+AT7VU4pHyO4WJ3wLK z?A*i`R_SRL);^SDsM~m~h31eR+0q><8R<$anUrkVXPh~&eK3dgG)v+^0A}8p!z1~2 zLtULmujNx63h54guQ`7{%;7-CJnZ2~Hg27f-E)Tz<|Ks|mycnot0T;rS{=lZqT-0T z;Muy42NlIGJ1;H22D4ecB#=u!*Gh9(c9F0;Y0hUOcOat?RgpXMY2=Q1~)WRhhv60000< KMNUMnLSTY3D;YEZ literal 0 HcmV?d00001 diff --git a/packages/oneclient_app/icons/icon.icns b/packages/oneclient_app/icons/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..3f4729d4bcdb9aae158b2f53e5f4c103c0399f94 GIT binary patch literal 26852 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 literal 0 HcmV?d00001 diff --git a/packages/oneclient_app/icons/icon.ico b/packages/oneclient_app/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..446f9a84c1f1725522ccdef4fb752208e4a026f8 GIT binary patch literal 47387 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 HuIc!HkmGku literal 0 HcmV?d00001 diff --git a/packages/oneclient_app/icons/icon.png b/packages/oneclient_app/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fbc4ca47a8eac0aa50392f22cc83d557635e5d3c GIT binary patch literal 19730 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 XvtNe8wYze3VFQ}`*Lwx7jFW!?NpD~= literal 0 HcmV?d00001 diff --git a/packages/oneclient_app/src/lib.rs b/packages/oneclient_app/src/lib.rs index 3e2ed858..066daa30 100644 --- a/packages/oneclient_app/src/lib.rs +++ b/packages/oneclient_app/src/lib.rs @@ -10,6 +10,7 @@ mod notifications; pub mod platform; mod routes; pub mod theme; +pub mod updater; mod ui; pub(crate) mod utils; mod view; diff --git a/packages/oneclient_app/src/main.rs b/packages/oneclient_app/src/main.rs index 76bad9d8..d026dc66 100644 --- a/packages/oneclient_app/src/main.rs +++ b/packages/oneclient_app/src/main.rs @@ -46,6 +46,8 @@ fn main() { oneclient_core::logger::init() }.expect("Failed to initialize logger"); + oneclient_app::updater::spawn_update_check(settings.auto_update); + let (bridge, handle): (OneClientBridge, CoreBridgeHandle) = OneClientBridge::new(); handle.spawn_runtime(); diff --git a/packages/oneclient_app/src/updater.rs b/packages/oneclient_app/src/updater.rs new file mode 100644 index 00000000..a6504f1f --- /dev/null +++ b/packages/oneclient_app/src/updater.rs @@ -0,0 +1,42 @@ +//! In-app self-update via [`cargo-packager-updater`]. + +use cargo_packager_updater::{Config, check_update}; + +pub const UPDATER_PUBKEY: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDFGODk3MkMyMjg0MjFDMDUKUldRRkhFSW93bktKSHpkWjNEMXNzaDVINVpCTU8xSnhuK2RnV0dTZ2FkcFJWbG1zUkhGYTNjaUkK"; + +pub const UPDATER_ENDPOINT: &str = + "https://github.com/Polyfrost/OneLauncher/releases/latest/download/latest.json"; + +pub fn spawn_update_check(auto_install: bool) { + std::thread::Builder::new() + .name("oneclient-updater".into()) + .spawn(move || { + if let Err(err) = run_check(auto_install) { + tracing::warn!("update check failed: {err}"); + } + }) + .ok(); +} + +fn run_check(auto_install: bool) -> anyhow::Result<()> { + let current = env!("CARGO_PKG_VERSION").parse()?; + let config = Config { + endpoints: vec![UPDATER_ENDPOINT.parse()?], + pubkey: UPDATER_PUBKEY.into(), + ..Default::default() + }; + + match check_update(current, config)? { + Some(update) => { + tracing::info!("update available: {}", update.version); + if auto_install { + tracing::info!("downloading and installing update…"); + update.download_and_install()?; + tracing::info!("update installed; restart to apply"); + } + } + None => tracing::info!("no update available"), + } + + Ok(()) +} diff --git a/packages/oneclient_core/src/settings/launcher.rs b/packages/oneclient_core/src/settings/launcher.rs index bb850449..9991984f 100644 --- a/packages/oneclient_core/src/settings/launcher.rs +++ b/packages/oneclient_core/src/settings/launcher.rs @@ -25,6 +25,7 @@ pub struct ViewState { pub struct LauncherSettings { pub settings_version: u32, pub log_debug: bool, + pub auto_update: bool, pub enable_gamemode: bool, pub discord_enabled: bool, pub max_concurrent_requests: usize, @@ -55,6 +56,7 @@ impl Default for LauncherSettings { Self { settings_version: 1, log_debug: false, + auto_update: true, discord_enabled: true, enable_gamemode: false, max_concurrent_requests: 25,