Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 44 additions & 2 deletions scripts/manage-faq-routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,48 @@
const fs = require('fs');
const path = require('path');

/**
* Safely rename directory (works across filesystems in Docker)
* Uses copy + delete instead of rename to avoid EXDEV errors
*/
function safeRenameSync(oldPath, newPath) {
if (!fs.existsSync(oldPath)) {
return;
}

try {
// Try native rename first (faster if on same filesystem)
fs.renameSync(oldPath, newPath);
} catch (err) {
if (err.code === 'EXDEV') {
// Cross-device error - use copy + delete approach
copyDirSync(oldPath, newPath);
fs.rmSync(oldPath, { recursive: true, force: true });
} else {
throw err;
}
}
}

/**
* Recursively copy directory
*/
function copyDirSync(src, dest) {
fs.mkdirSync(dest, { recursive: true });
const entries = fs.readdirSync(src, { withFileTypes: true });

for (const entry of entries) {
const srcPath = path.join(src, entry.name);
const destPath = path.join(dest, entry.name);

if (entry.isDirectory()) {
copyDirSync(srcPath, destPath);
} else {
fs.copyFileSync(srcPath, destPath);
}
}
}

// Load environment variables from .env.local
const envPath = path.join(__dirname, '..', '.env.local');
if (fs.existsSync(envPath)) {
Expand Down Expand Up @@ -41,15 +83,15 @@ langDirs.forEach(langDir => {
// FAQ is enabled - ensure route is active (faq/ not _faq/)
if (fs.existsSync(disabledFaqPath)) {
console.log(` Enabling FAQ routes: ${langDir}/_faq → ${langDir}/faq`);
fs.renameSync(disabledFaqPath, faqPath);
safeRenameSync(disabledFaqPath, faqPath);
} else if (fs.existsSync(faqPath)) {
console.log(` FAQ routes already enabled: ${langDir}/faq`);
}
} else {
// FAQ is disabled - ensure route is inactive (faq/ → _faq/)
if (fs.existsSync(faqPath)) {
console.log(` Disabling FAQ routes: ${langDir}/faq → ${langDir}/_faq`);
fs.renameSync(faqPath, disabledFaqPath);
safeRenameSync(faqPath, disabledFaqPath);
} else if (fs.existsSync(disabledFaqPath)) {
console.log(` FAQ routes already disabled: ${langDir}/_faq`);
}
Expand Down