Ctrl K
ComunidadGuías…

scripts/package-linux-deb.mjs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { spawnSync } from "node:child_process";
import {
  cp,
  mkdir,
  mkdtemp,
  readFile,
  rm,
  symlink,
  writeFile
} from "node:fs/promises";
import os from "node:os";
import path from "node:path";

function option(args, name) {
  const index = args.indexOf(name);
  if (index < 0) return undefined;
  const value = args[index + 1];
  if (!value || value.startsWith("--")) throw new Error(`Missing value for ${name}`);
  return value;
}

function run(command, args) {
  const result = spawnSync(command, args, {
    stdio: "inherit",
    windowsHide: true
  });
  if (result.error) throw result.error;
  if (result.status !== 0) {
    throw new Error(`${command} failed with exit code ${result.status}`);
  }
}

async function main() {
  if (process.platform !== "linux") {
    throw new Error("Debian packages must be built on Linux");
  }
  const args = process.argv.slice(2);
  const rootArg = option(args, "--root");
  const outArg = option(args, "--out");
  if (!rootArg || !outArg) {
    throw new Error(
      "Usage: node scripts/package-linux-deb.mjs --root <runtime-root> --out <file.deb>"
    );
  }

  const root = path.resolve(rootArg);
  const out = path.resolve(outArg);
  const manifest = JSON.parse(
    await readFile(path.join(root, "release-manifest.json"), "utf8")
  );
  if (manifest.platform !== "linux" || manifest.arch !== "x64") {
    throw new Error("Debian packaging currently requires a linux-x64 runtime");
  }

  const temp = await mkdtemp(path.join(os.tmpdir(), "palmtty-deb-"));
  try {
    const installRoot = path.join(temp, "usr", "lib", "palmtty");
    await mkdir(path.dirname(installRoot), { recursive: true });
    await cp(root, installRoot, { recursive: true });
    const binDir = path.join(temp, "usr", "bin");
    await mkdir(binDir, { recursive: true });
    await symlink("../lib/palmtty/bin/palmtty", path.join(binDir, "palmtty"));

    const controlDir = path.join(temp, "DEBIAN");
    await mkdir(controlDir, { recursive: true, mode: 0o755 });
    const control = `Package: palmtty
Version: ${manifest.version}
Section: utils
Priority: optional
Architecture: amd64
Maintainer: PalmTTY contributors
Homepage: https://github.com/hamburger-os/PalmTTY
Depends: libc6, libstdc++6
Description: Mobile-first self-hosted remote development workbench
 PalmTTY installs a self-contained Agent runtime and Web/PWA assets.
 The service remains a current-user process; no system service is installed.
`;
    await writeFile(path.join(controlDir, "control"), control, "utf8");
    await mkdir(path.dirname(out), { recursive: true });
    run("dpkg-deb", ["--build", "--root-owner-group", temp, out]);
    console.log(`[PalmTTY] built Debian package: ${out}`);
  } finally {
    await rm(temp, { recursive: true, force: true });
  }
}

main().catch((error) => {
  console.error(
    `[PalmTTY] deb packaging failed: ${error instanceof Error ? error.message : error}`
  );
  process.exitCode = 1;
});