Skip to main content

max / audiofiles

Add Bento build recipes (macos, linux, windows) Per-platform .rhai recipes under dist/recipes/ for bentod. egui app, no iOS; recipes wrap the self-contained dist/build-*.sh scripts. Windows builds natively via build-msi-native.ps1 (no cross-compile). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-06-16 18:32 UTC
Commit: 105f2896220122a68c1b8bb7b239feb42cc3c64f
Parent: dcf342e
3 files changed, +81 insertions, -0 deletions
@@ -0,0 +1,26 @@
1 + // audiofiles — Linux release recipe for Bento (x86_64 on fw13, aarch64 on astra).
2 + //
3 + // One recipe, both arches via build_host(). audiofiles ships its own
4 + // self-contained dist scripts: build-appimage.sh and build-deb.sh, each of which
5 + // runs `cargo build -p audiofiles-app` and emits its artifact into dist/
6 + // (AudioFiles-<version>-<arch>.AppImage, audiofiles_<version>_<arch>.deb). We
7 + // run both, then collect the results into Bento's dist tree.
8 +
9 + let h = build_host();
10 + let v = version();
11 + let r = repo();
12 +
13 + step("checkout");
14 + sh_ok(h, "cd " + r + " && git pull --ff-only");
15 +
16 + step("build");
17 + sh_ok(h, "cd " + r + " && ./dist/build-appimage.sh");
18 + sh_ok(h, "cd " + r + " && ./dist/build-deb.sh");
19 +
20 + step("collect");
21 + let appimage = sh(h, "ls -t " + r + "/dist/*.AppImage | head -1").stdout_tail.trim();
22 + if appimage == "" { throw "no .AppImage produced for " + target(); }
23 + collect(h, appimage, "audiofiles", v);
24 + let deb = sh(h, "ls -t " + r + "/dist/*.deb 2>/dev/null | head -1").stdout_tail.trim();
25 + if deb != "" { collect(h, deb, "audiofiles", v); }
26 + log("audiofiles " + target() + " v" + v + " collected.");
@@ -0,0 +1,31 @@
1 + // audiofiles — macOS (aarch64) release recipe for Bento.
2 + //
3 + // audiofiles is an egui app (no Tauri), so it builds through its own
4 + // self-contained dist/build-macos.sh: cargo build -p audiofiles-app, assemble
5 + // the .app bundle, codesign (Developer ID), notarize (notarytool keychain
6 + // profile), staple, and emit dist/Audiofiles_<version>_<arch>.dmg. Runs on mbp
7 + // over the in-session ops-agent transport (login.keychain unlocked there). We
8 + // re-verify Gatekeeper here and collect the DMG into Bento's dist tree.
9 +
10 + let h = build_host();
11 + let v = version();
12 + let r = repo();
13 +
14 + step("checkout");
15 + sh_ok(h, "cd " + r + " && git pull --ff-only");
16 +
17 + // build-macos.sh: build + sign + notarize + staple, DMG into dist/.
18 + step("build");
19 + sh_ok(h, "cd " + r + " && ./dist/build-macos.sh");
20 +
21 + // DMG name uses `uname -m` (arm64), not the target arch slug — resolve it.
22 + step("verify");
23 + let dmg = sh(h, "ls -t " + r + "/dist/Audiofiles_*.dmg | head -1").stdout_tail.trim();
24 + if dmg == "" { throw "no .dmg produced under dist/"; }
25 + if !verify_gatekeeper(h, dmg) {
26 + throw "DMG is not Gatekeeper-accepted as Notarized Developer ID: " + dmg;
27 + }
28 +
29 + step("collect");
30 + collect(h, dmg, "audiofiles", v);
31 + log("audiofiles macOS v" + v + " built, notarized, and collected.");
@@ -0,0 +1,24 @@
1 + // audiofiles — Windows (x86_64) release recipe for Bento.
2 + //
3 + // UNSUPPORTED at launch: the MSI/EXE ship unsigned (Azure certificate blocker —
4 + // see docs/deploy.md). Best-effort, not exercised end-to-end through Bento.
5 + //
6 + // Built NATIVELY on windows-x86 via dist/build-msi-native.ps1 (WiX) — the
7 + // no-cross-compile house rule rules out build-windows.sh's cargo-xwin path. The
8 + // checkout is at a Windows path (not repo()), and commands run through
9 + // PowerShell over ssh. Output: dist/Audiofiles_<version>_x86_64.msi (+ .exe).
10 +
11 + let h = build_host();
12 + let v = version();
13 + let win_repo = "C:/Users/me/Code/Apps/audiofiles";
14 +
15 + step("checkout");
16 + sh_ok(h, "powershell -Command \"cd " + win_repo + "; git pull --ff-only\"");
17 +
18 + step("build");
19 + sh_ok(h, "powershell -Command \"cd " + win_repo + "; pwsh -File dist\\build-msi-native.ps1\"");
20 +
21 + step("collect");
22 + collect(h, win_repo + "/dist/*.msi", "audiofiles", v);
23 + collect(h, win_repo + "/dist/Audiofiles*.exe", "audiofiles", v);
24 + log("audiofiles windows/x86_64 v" + v + " collected (unsigned, unsupported).");