69 lines
3.5 KiB
JavaScript
69 lines
3.5 KiB
JavaScript
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
|
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
|
|
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
|
|
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
|
|
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
|
|
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
|
// ┃ Copyright (c) 2017, the Perspective Authors. ┃
|
|
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
|
|
// ┃ This file is part of the Perspective library, distributed under the terms ┃
|
|
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
|
|
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
|
|
import * as fs from "node:fs";
|
|
import * as path from "node:path";
|
|
import { execFileSync } from "node:child_process";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const REPO_ROOT = path.resolve(__dirname, "..");
|
|
const DIST = path.join(__dirname, "dist");
|
|
const STAGING = path.join(REPO_ROOT, "dist-gh-pages");
|
|
const BRANCH = "gh-pages";
|
|
|
|
function git(args, opts = {}) {
|
|
return execFileSync("git", args, {
|
|
stdio: "inherit",
|
|
cwd: REPO_ROOT,
|
|
...opts,
|
|
});
|
|
}
|
|
|
|
function copyRecursive(src, dest) {
|
|
const stat = fs.statSync(src);
|
|
if (stat.isDirectory()) {
|
|
fs.mkdirSync(dest, { recursive: true });
|
|
for (const child of fs.readdirSync(src)) {
|
|
copyRecursive(path.join(src, child), path.join(dest, child));
|
|
}
|
|
} else {
|
|
fs.copyFileSync(src, dest);
|
|
}
|
|
}
|
|
|
|
if (!fs.existsSync(DIST)) {
|
|
console.error(`Missing ${DIST} — run \`npm run build\` first.`);
|
|
process.exit(1);
|
|
}
|
|
|
|
if (!fs.existsSync(STAGING)) {
|
|
git(["worktree", "add", STAGING, BRANCH]);
|
|
} else {
|
|
git(["fetch", "origin", BRANCH]);
|
|
git(["checkout", `origin/${BRANCH}`], { cwd: STAGING });
|
|
}
|
|
|
|
// Clear tracked + untracked content in the staging worktree, preserving
|
|
// the worktree's `.git` link.
|
|
git(["rm", "-rf", "--quiet", "--ignore-unmatch", "."], { cwd: STAGING });
|
|
git(["clean", "-fdx"], { cwd: STAGING });
|
|
|
|
for (const entry of fs.readdirSync(DIST)) {
|
|
copyRecursive(path.join(DIST, entry), path.join(STAGING, entry));
|
|
}
|
|
|
|
git(["add", "-A"], { cwd: STAGING });
|
|
|
|
console.log(`Staged dist/ onto ${BRANCH} at ${STAGING}`);
|
|
console.log(`Review with \`git -C ${STAGING} status\`, then commit and push.`);
|