mirror of
https://github.com/Xevion/banner.git
synced 2026-01-31 10:23:39 -06:00
Move all [script("bun")] blocks into standalone TypeScript files under
scripts/ with shared utilities in scripts/lib/. The Justfile is now ~40
lines of thin `bun scripts/*.ts` wrappers.
Shared code consolidated into two lib files:
- lib/proc.ts: process spawning (run, spawnCollect, raceInOrder, ProcessGroup)
- lib/fmt.ts: color output, elapsed timers, reusable flag parser
46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
/**
|
|
* Production build.
|
|
*
|
|
* Usage: bun scripts/build.ts [flags]
|
|
*
|
|
* Flags:
|
|
* -d, --debug Debug build instead of release
|
|
* -f, --frontend-only Frontend only
|
|
* -b, --backend-only Backend only
|
|
*/
|
|
|
|
import { parseFlags, c } from "./lib/fmt";
|
|
import { run } from "./lib/proc";
|
|
|
|
const { flags } = parseFlags(
|
|
process.argv.slice(2),
|
|
{
|
|
debug: "bool",
|
|
"frontend-only": "bool",
|
|
"backend-only": "bool",
|
|
} as const,
|
|
{ d: "debug", f: "frontend-only", b: "backend-only" },
|
|
{ debug: false, "frontend-only": false, "backend-only": false },
|
|
);
|
|
|
|
if (flags["frontend-only"] && flags["backend-only"]) {
|
|
console.error("Cannot use -f and -b together");
|
|
process.exit(1);
|
|
}
|
|
|
|
const buildFrontend = !flags["backend-only"];
|
|
const buildBackend = !flags["frontend-only"];
|
|
const profile = flags.debug ? "debug" : "release";
|
|
|
|
if (buildFrontend) {
|
|
console.log(c("1;36", "→ Building frontend..."));
|
|
run(["bun", "run", "--cwd", "web", "build"]);
|
|
}
|
|
|
|
if (buildBackend) {
|
|
console.log(c("1;36", `→ Building backend (${profile})...`));
|
|
const cmd = ["cargo", "build", "--bin", "banner"];
|
|
if (!flags.debug) cmd.push("--release");
|
|
run(cmd);
|
|
}
|