Files
blackroad-os-archive/scripts/gen_cover_skeletons.ts
2025-11-24 04:32:13 -06:00

88 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import fs from "fs";
import path from "path";
import yaml from "js-yaml";
type RepoRecord = {
id: string;
full_name: string;
status: string;
};
type Catalog = { repos: RepoRecord[] };
function loadCatalog(catalogPath: string): Catalog {
const raw = fs.readFileSync(catalogPath, "utf8");
return yaml.load(raw) as Catalog;
}
function coverPathForRepo(repoName: string): string {
return path.join(process.cwd(), "covers", `${repoName}.cover.md`);
}
function formatTitle(repoName: string): string {
const words = repoName.replace(/[-_]/g, " ")
.replace(/\bos\b/i, "OS")
.split(" ")
.map((word) => word.charAt(0).toUpperCase() + word.slice(1));
return words.join(" ");
}
function createSkeleton(repoName: string, status: string): string {
const title = formatTitle(repoName);
return `---
id: ${repoName}
title: ${title}
type: repo
status: ${status}
timeframe: 2025-
primary_repo: ${repoName}
linked_repos: []
summary: TODO
why_it_matters: TODO
risk_if_lost: TODO
recommended_action: keep-live
---
# ${title} Archive Cover Sheet
## Narrative
TODO
## History
TODO
## Current Role
TODO
## Dependencies
TODO
## Migration / Future
TODO
`;
}
function ensureCover(repo: RepoRecord) {
const repoName = repo.full_name.split("/")[1];
const destination = coverPathForRepo(repoName);
if (fs.existsSync(destination)) {
return;
}
const skeleton = createSkeleton(repoName, repo.status ?? "active");
fs.writeFileSync(destination, skeleton);
console.log(`Generated cover skeleton for ${repoName}`);
}
function main() {
const catalogPath = path.join(process.cwd(), "catalog", "repos.yaml");
if (!fs.existsSync(catalogPath)) {
throw new Error("catalog/repos.yaml not found");
}
const catalog = loadCatalog(catalogPath);
catalog.repos.forEach((repo) => ensureCover(repo));
}
if (require.main === module) {
main();
}