chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
|
||||
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
|
||||
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
|
||||
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
|
||||
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
||||
// ┃ 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.`);
|
||||
Reference in New Issue
Block a user