diff --git a/package.json b/package.json index 76c02759..c9f0e5ff 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,7 @@ { + "scripts": { + "links:refresh": "node tools/run_link_checks.js" + }, "dependencies": { "postcss-import": "^16.1.0", "postcss-nested": "^7.0.2", diff --git a/tools/run_link_checks.js b/tools/run_link_checks.js new file mode 100644 index 00000000..73f95360 --- /dev/null +++ b/tools/run_link_checks.js @@ -0,0 +1,54 @@ +#!/usr/bin/env node + +const path = require("path"); +const { spawn } = require("child_process"); + +const SITE_ROOT = path.resolve(__dirname, ".."); + +const steps = [ + { label: "check_internal_links", script: path.join(__dirname, "check_internal_links.js") }, + { label: "check_external_links", script: path.join(__dirname, "check_external_links.js") }, + { label: "update_external_links", script: path.join(__dirname, "update_external_links.js") }, + { label: "mark_dead_links", script: path.join(__dirname, "mark_dead_links.js") }, +]; + +function runStep({ label, script }) { + return new Promise((resolve, reject) => { + const child = spawn("node", [script], { + cwd: SITE_ROOT, + stdio: "inherit", + }); + + child.on("exit", (code, signal) => { + if (typeof code === "number" && code === 0) { + resolve(); + return; + } + const reason = + typeof code === "number" + ? `code ${code}` + : signal + ? `signal ${signal}` + : "unknown reason"; + reject(new Error(`Étape "${label}" terminée avec ${reason}`)); + }); + + child.on("error", (error) => { + reject(new Error(`Impossible d'exécuter "${label}": ${error.message}`)); + }); + }); +} + +async function main() { + for (const step of steps) { + const relative = path.relative(SITE_ROOT, step.script); + console.log(`\n➡️ Exécution de ${relative}...`); + await runStep(step); + } + console.log("\n✅ Workflow des liens terminé."); +} + +main().catch((error) => { + console.error(`\n❌ Échec du workflow: ${error.message}`); + process.exitCode = 1; +});