fix(build): make the release actually buildable, and check it before tagging
🏗️ Build and Test JellyTau / Run Tests (pull_request) Successful in 18m41s
🏗️ Build and Test JellyTau / Supply Chain (pull_request) Successful in 31s
Traceability Validation / Check Requirement Traces (pull_request) Successful in 9s
🏗️ Build and Test JellyTau / Android Compile Check (pull_request) Successful in 4m5s
🏗️ Build and Test JellyTau / Run Tests (pull_request) Successful in 18m41s
🏗️ Build and Test JellyTau / Supply Chain (pull_request) Successful in 31s
Traceability Validation / Check Requirement Traces (pull_request) Successful in 9s
🏗️ Build and Test JellyTau / Android Compile Check (pull_request) Successful in 4m5s
Preparing v0.10.0 meant building the release locally first. It did not build. Two separate defects were sitting on master, both invisible to every gate this project has, for the same reason: nothing in build-and-test.yml runs `tauri build`. Only a tag does. So the first time anyone would have discovered either was a failed release. **Tauri plugin versions had drifted apart.** Tauri refuses to build when a plugin's Rust crate and npm package are on different minor versions: tauri-plugin-log (v2.8.0) : @tauri-apps/plugin-log (v2.9.0) tauri-plugin-updater (v2.9.0) : @tauri-apps/plugin-updater (v2.10.1) Introduced by the updater and diagnostics work in this same branch -- `cargo add` took what the pinned toolchain allowed while `bun add` took latest, and the caret ranges let them separate. cargo check, clippy, cargo test and svelte-check all passed. Matching upward pulled wry 0.53.5 -> 0.54.2 along with wasm-bindgen, web-sys and webkit2gtk: the webview layer, which on Linux is the video playback path. That is not a change to make while cutting a release, so the npm packages are pinned down to the crates instead -- exactly, not by caret, since the caret is what allowed the drift. The upgrade is worth doing deliberately, with a playback check, and ci-operations.md says so. CI now runs `tauri info`, which performs the same comparison without building. Verified by reintroducing the mismatch and watching it fail. **The AppImage target had never been built.** It was added earlier in this branch because the release notes had advertised an AppImage for months while tauri.conf.json never produced one. It does not work out of the box: linuxdeploy carries its own `strip`, too old to parse the .relr.dyn section modern toolchains emit, and it fails on every bundled library -- strip: libzstd.so.1: unknown type [0x13] section `.relr.dyn' failed to bundle project `failed to run linuxdeploy` Ubuntu 23.10+ links with -z pack-relative-relocs by default, so the CI builder image fails exactly as a modern Arch host does. NO_STRIP=true is linuxdeploy's documented escape hatch. The resulting 153 MB AppImage was verified to be well-formed and to actually start. Without this the release would have failed at the Linux build step -- the artifact check added earlier refuses to publish when no AppImage is produced, which is the behaviour we want, but it would have refused a tagged build rather than a local one. Also: the traceability extractor now reads the tooling shell scripts that carry TRACES comments. DR-207, DR-213 and DR-220 all had them and were counted as uncovered because only .ts/.svelte/.rs were scanned. Listed individually rather than globbing scripts/*.sh -- most implement nothing, and adding one should be a decision. DR-221.
This commit is contained in:
@@ -26,7 +26,25 @@ bun run build
|
||||
|
||||
# --bundles overrides tauri.conf.json bundle.targets so this script controls
|
||||
# exactly which Linux formats are produced (never NSIS here).
|
||||
bun run tauri build --bundles "$BUNDLES"
|
||||
# TRACES: | DR-221
|
||||
#
|
||||
# 🔴 NO_STRIP=true is required for the AppImage bundle.
|
||||
#
|
||||
# linuxdeploy (which Tauri downloads and runs to build the AppImage) carries its
|
||||
# own `strip`, and that copy is too old to parse the `.relr.dyn` section modern
|
||||
# toolchains emit for RELR relocations. It fails on essentially every bundled
|
||||
# library:
|
||||
#
|
||||
# strip: libzstd.so.1: unknown type [0x13] section `.relr.dyn'
|
||||
# failed to bundle project `failed to run linuxdeploy-x86_64.AppImage`
|
||||
#
|
||||
# Ubuntu 23.10+ links with -z pack-relative-relocs by default, so the CI builder
|
||||
# image hits this exactly as a modern Arch host does. Skipping the strip step is
|
||||
# linuxdeploy's own documented escape hatch; the cost is an unstripped, larger
|
||||
# AppImage (~153 MB for a build that bundles libmpv and its ffmpeg stack).
|
||||
#
|
||||
# Remove this only after confirming a linuxdeploy release that understands RELR.
|
||||
NO_STRIP=true bun run tauri build --bundles "$BUNDLES"
|
||||
|
||||
BUNDLE_ROOT="src-tauri/target/release/bundle"
|
||||
echo ""
|
||||
|
||||
@@ -46,6 +46,8 @@ bun run build
|
||||
# from tauri.conf.json (bundle.targets includes "nsis"), which is not subject to
|
||||
# that CLI validation — the bundler then picks nsis once it knows the target is
|
||||
# Windows.
|
||||
# TRACES: | DR-221
|
||||
#
|
||||
# 🔴 Clear the bundle output before building.
|
||||
#
|
||||
# The bundle directory is not versioned and is never cleaned by cargo, and the
|
||||
|
||||
@@ -49,6 +49,11 @@ describe("isTracedSourceFile", () => {
|
||||
expect(isTracedSourceFile("src-tauri/deny.toml")).toBe(true);
|
||||
expect(isTracedSourceFile("src-tauri/rust-toolchain.toml")).toBe(true);
|
||||
expect(isTracedSourceFile("scripts/hooks/pre-commit")).toBe(true);
|
||||
// Shell tooling is listed individually, not globbed: most scripts/*.sh
|
||||
// implement nothing, and adding one should be a decision.
|
||||
expect(isTracedSourceFile("scripts/check-release-artifacts.sh")).toBe(true);
|
||||
expect(isTracedSourceFile("scripts/build-desktop-linux.sh")).toBe(true);
|
||||
expect(isTracedSourceFile("scripts/logcat.sh")).toBe(false);
|
||||
});
|
||||
|
||||
it("does not scan CI workflows, whose comments discuss TRACES in prose", () => {
|
||||
|
||||
@@ -95,6 +95,14 @@ const TOOLING_FILES = new Set([
|
||||
"scripts/hooks/pre-commit",
|
||||
"src-tauri/deny.toml",
|
||||
"src-tauri/rust-toolchain.toml",
|
||||
// Shell tooling that implements a requirement. Named individually rather than
|
||||
// globbing scripts/*.sh: most of these scripts implement nothing, and the
|
||||
// point of the list is that adding a file is a decision.
|
||||
"scripts/install-hooks.sh",
|
||||
"scripts/check-release-artifacts.sh",
|
||||
"scripts/build-desktop-linux.sh",
|
||||
"scripts/build-windows-cross.sh",
|
||||
"scripts/restore-ownership.sh",
|
||||
]);
|
||||
|
||||
/** Directory names that never contain hand-written traced source. */
|
||||
|
||||
Reference in New Issue
Block a user