Share install and deploy preparation with verified release bundle reuse
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
# Shared install/deploy build preparation
|
||||
|
||||
`make install` and `make deploy` both call `prepareGalaxyBuild` before their
|
||||
separate copy/launch or sign/archive/upload steps. Both require a clean checkout
|
||||
on a branch and pull that branch from `origin` with `--ff-only`.
|
||||
|
||||
The shared builder keeps the existing optimized release profile, binary, and
|
||||
`release_bundle,extern_plist` features. It does not run `cargo clean`.
|
||||
|
||||
After pulling, it compares the source commit, build command, toolchain/SDK,
|
||||
architecture, environment, and Cargo configuration with the last successful
|
||||
build. An exact match with an intact cached app skips Cargo and bundling.
|
||||
Otherwise it runs the release bundle command, allowing Cargo to reuse its normal
|
||||
compilation artifacts. The first invocation builds rather than trusting an
|
||||
unidentified app already in `target/release`.
|
||||
|
||||
The cache lives in `target/galaxy-build-cache`. Bundle contents, modes, and
|
||||
symlinks are checked before reuse. Each caller receives a private copy, so
|
||||
signing for deployment cannot modify the shared cached app. Preparation is
|
||||
serialized; copying, installing, and uploading use independent private copies.
|
||||
The lock atomically records process identity and waits for live builds without
|
||||
a fixed cold-build timeout. If a command is killed and leaves an abandoned lock,
|
||||
the next command reports the lock path for manual removal rather than risk
|
||||
stealing a live build's lock. Callers must release their copy in a `finally`
|
||||
block.
|
||||
|
||||
Cargo metadata supplies the effective build output directory, including custom
|
||||
`CARGO_TARGET_DIR` and `build.target-dir` settings. The shared cache remains
|
||||
checkout-local so both commands use the same lock and cache. Both commands
|
||||
explicitly request the Rust host target, overriding cross-target configuration;
|
||||
these commands prepare native macOS bundles.
|
||||
|
||||
Unverifiable tool identity, external Cargo configuration, or mutable build
|
||||
input overrides conservatively disable reuse rather than risk shipping stale
|
||||
output. Upload credentials and Yarn invocation metadata do not identify the
|
||||
application build. No credential values are stored in the manifest.
|
||||
|
||||
To force a fresh bundle while retaining compiled dependencies, remove
|
||||
`target/galaxy-build-cache` when no install/deploy command is running.
|
||||
`make clean` removes both Cargo output and this cache.
|
||||
|
||||
Run focused cache tests without installing or deploying anything:
|
||||
|
||||
```sh
|
||||
node --test script/lib/prepare-galaxy-build.test.mjs
|
||||
```
|
||||
Reference in New Issue
Block a user