d13dbbaedd
- Move server and desktop Nix packages under `packages/t3code-*` - Update flake outputs and README references to the new names
98 lines
3.1 KiB
JavaScript
98 lines
3.1 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import * as FS from "node:fs";
|
|
import * as Path from "node:path";
|
|
|
|
class BuildNixDesktopPackageError extends Error {
|
|
constructor(message) {
|
|
super(message);
|
|
this.name = "BuildNixDesktopPackageError";
|
|
}
|
|
}
|
|
|
|
function parseArgs(argv) {
|
|
let outputDir;
|
|
|
|
for (let index = 0; index < argv.length; index += 1) {
|
|
const arg = argv[index];
|
|
if (arg === "--output-dir") {
|
|
outputDir = argv[index + 1];
|
|
index += 1;
|
|
}
|
|
}
|
|
|
|
if (!outputDir) {
|
|
throw new BuildNixDesktopPackageError("Missing required --output-dir argument.");
|
|
}
|
|
|
|
return { outputDir };
|
|
}
|
|
|
|
function assertPathExists(path, description) {
|
|
if (!FS.existsSync(path)) {
|
|
throw new BuildNixDesktopPackageError(
|
|
`Missing ${description} at ${path}. Run 'bun run build:desktop' first.`,
|
|
);
|
|
}
|
|
}
|
|
|
|
function readJson(path) {
|
|
return JSON.parse(FS.readFileSync(path, "utf8"));
|
|
}
|
|
|
|
function main() {
|
|
const { outputDir } = parseArgs(process.argv.slice(2));
|
|
const repoRoot = process.cwd();
|
|
const packagedAppDir = Path.resolve(repoRoot, outputDir);
|
|
|
|
const rootPackageJson = readJson(Path.join(repoRoot, "package.json"));
|
|
const desktopPackageJson = readJson(Path.join(repoRoot, "apps/desktop/package.json"));
|
|
const serverPackageJson = readJson(Path.join(repoRoot, "apps/server/package.json"));
|
|
|
|
const desktopDistDir = Path.join(repoRoot, "apps/desktop/dist-electron");
|
|
const desktopResourcesDir = Path.join(repoRoot, "apps/desktop/resources");
|
|
const serverDistDir = Path.join(repoRoot, "apps/server/dist");
|
|
const bundledClientIndex = Path.join(serverDistDir, "client/index.html");
|
|
|
|
assertPathExists(desktopDistDir, "desktop bundle");
|
|
assertPathExists(Path.join(desktopDistDir, "main.cjs"), "desktop main entry");
|
|
assertPathExists(Path.join(desktopDistDir, "preload.cjs"), "desktop preload entry");
|
|
assertPathExists(desktopResourcesDir, "desktop resources");
|
|
assertPathExists(serverDistDir, "server bundle");
|
|
assertPathExists(Path.join(serverDistDir, "bin.mjs"), "server entry");
|
|
assertPathExists(bundledClientIndex, "bundled desktop web client");
|
|
|
|
FS.rmSync(packagedAppDir, { recursive: true, force: true });
|
|
FS.mkdirSync(Path.join(packagedAppDir, "apps/desktop"), { recursive: true });
|
|
FS.mkdirSync(Path.join(packagedAppDir, "apps/server"), { recursive: true });
|
|
|
|
FS.cpSync(desktopDistDir, Path.join(packagedAppDir, "apps/desktop/dist-electron"), {
|
|
recursive: true,
|
|
});
|
|
FS.cpSync(desktopResourcesDir, Path.join(packagedAppDir, "apps/desktop/resources"), {
|
|
recursive: true,
|
|
});
|
|
FS.cpSync(serverDistDir, Path.join(packagedAppDir, "apps/server/dist"), {
|
|
recursive: true,
|
|
});
|
|
|
|
const packageJson = {
|
|
name: "t3code",
|
|
version: serverPackageJson.version ?? desktopPackageJson.version,
|
|
private: true,
|
|
description: "T3 Code desktop build",
|
|
author: "T3 Tools",
|
|
main: "apps/desktop/dist-electron/main.cjs",
|
|
t3codeCommitHash: "unknown",
|
|
packageManager: rootPackageJson.packageManager,
|
|
};
|
|
|
|
FS.writeFileSync(
|
|
Path.join(packagedAppDir, "package.json"),
|
|
`${JSON.stringify(packageJson, null, 2)}\n`,
|
|
"utf8",
|
|
);
|
|
}
|
|
|
|
main();
|