mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-05-30 09:37:13 -04:00
56 lines
1.8 KiB
JavaScript
56 lines
1.8 KiB
JavaScript
#!/usr/bin/env node
|
|
// scripts/check-doc-freshness.js
|
|
// Reports doc pages whose last_updated frontmatter is older than a threshold.
|
|
// Exit 0 = all fresh, Exit 1 = stale pages found (advisory).
|
|
//
|
|
// Usage: node scripts/check-doc-freshness.js [docs-dir] [--max-age-days=180]
|
|
|
|
"use strict";
|
|
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
const { parseFrontmatter, forEachDocPage } = require("./lib/frontmatter");
|
|
|
|
const args = process.argv.slice(2);
|
|
const positional = args.filter(a => !a.startsWith("--"));
|
|
const DOCS_DIR = path.resolve(positional[0] || path.join("docs", "en"));
|
|
|
|
const maxAgeArg = args.find(a => a.startsWith("--max-age-days="));
|
|
const MAX_AGE_DAYS = maxAgeArg ? parseInt(maxAgeArg.split("=")[1], 10) : 180;
|
|
|
|
const now = new Date();
|
|
let staleCount = 0;
|
|
let totalCount = 0;
|
|
|
|
console.log(`Checking doc freshness (max age: ${MAX_AGE_DAYS} days)...`);
|
|
console.log("");
|
|
|
|
forEachDocPage(DOCS_DIR, (filePath, slug, section) => {
|
|
totalCount++;
|
|
const content = fs.readFileSync(filePath, "utf-8");
|
|
const { fields } = parseFrontmatter(content);
|
|
|
|
if (!fields.last_updated) {
|
|
console.log(` ⚠ ${section}/${slug}.md — missing last_updated field`);
|
|
staleCount++;
|
|
return;
|
|
}
|
|
|
|
const lastUpdated = new Date(fields.last_updated);
|
|
const ageDays = Math.floor((now - lastUpdated) / (1000 * 60 * 60 * 24));
|
|
|
|
if (ageDays > MAX_AGE_DAYS) {
|
|
console.log(` ⚠ ${section}/${slug}.md — ${ageDays} days old (last: ${fields.last_updated})`);
|
|
staleCount++;
|
|
}
|
|
});
|
|
|
|
console.log("");
|
|
if (staleCount > 0) {
|
|
console.log(`${staleCount}/${totalCount} page(s) need review (older than ${MAX_AGE_DAYS} days or missing date).`);
|
|
process.exit(1);
|
|
} else {
|
|
console.log(`All ${totalCount} pages are fresh (updated within ${MAX_AGE_DAYS} days).`);
|
|
process.exit(0);
|
|
}
|