From 04869a60912aa2766b0a9a829cd4f19c272aaf65 Mon Sep 17 00:00:00 2001 From: Richard Dern Date: Sat, 1 Nov 2025 16:27:37 +0100 Subject: [PATCH] =?UTF-8?q?Workflow=20de=20v=C3=A9rification=20des=20liens?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 +++ tools/run_link_checks.js | 54 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 tools/run_link_checks.js 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; +});