mirror of
https://github.com/storytold/craft-launcher.git
synced 2026-10-13 14:59:07 +00:00
* Install and update Craft apps from a local mirror Add an opt-in developer mode for installing the Craft apps from builds on this machine instead of GitHub: - ARTCRAFT_LAUNCHER_DOWNLOAD_BASE (loopback http only) points the launcher at a local mirror. While set, every check reads the mirror's release_info.json, trusts download links under the mirror, never treats entries as stale, and never falls back to GitHub or ArtCraft's API. - cargo xtask local sync pulls every sibling app checkout (git pull --ff-only --recurse-submodules), packages each app whose version isn't mirrored yet with its own packaging script, and files the results under <mirror>/<app>/<version>/ with SHA256SUMS.txt and notes from git log. - cargo xtask local serve serves the mirror on 127.0.0.1 (with range requests, so paused downloads resume) and writes the feed fresh from the mirror's contents on every request. - cargo xtask local status compares each checkout with what's mirrored. * Sync the local mirror on an interval while serving it cargo xtask local serve --sync-every <30m|1h|1d…> runs the same sync as cargo xtask local sync on a background thread, one after another, so the mirror follows origin without a second process. Downloads keep being served during a build, and a version only joins the feed once its build is complete. Pulls are --no-stat to keep the server's log readable. * Build every new commit as a dev version with --every-commit cargo xtask local sync --every-commit (and serve --sync-every … --every-commit) builds each new commit rather than only new versions. A commit of a 0.4.0 checkout is packaged as 0.4.1-dev.<commit time> through the app's <APP>_VERSION override, so it orders after 0.4.0, after earlier commits, and before the real 0.4.1. The full version lands in the bundle's <App>Version key, which the launcher reads, so it offers each build as an update and sees it as current once installed. * Keep the local mirror out of release builds; parse loopback URLs strictly ARTCRAFT_LAUNCHER_DOWNLOAD_BASE makes the launcher trust the mirror's own checksums and skip GitHub, so a shipped launcher must not read it: it now needs the local-mirror cargo feature (cargo run --features local-mirror), which release builds never enable. The loopback check parsed the URL by prefix, so http://127.0.0.1:1@evil.example/ passed; it now requires the host to be exactly 127.0.0.1, localhost or [::1] with a numeric port. The same check guards ARTCRAFT_LAUNCHER_FEED_URL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: khutchings <7854672+khutchings@users.noreply.github.com> Co-authored-by: Brandon Thomas <echelon@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>