diff --git a/src/scripts/generate-redirects.mjs b/src/scripts/generate-redirects.mjs index 6f887b314a95..943dc1c36f23 100644 --- a/src/scripts/generate-redirects.mjs +++ b/src/scripts/generate-redirects.mjs @@ -7,7 +7,9 @@ import fs from 'fs/promises' import redirects from './redirects.mjs' -const redirectLines = (await redirects()).map(({ source, destination }) => `${source} ${destination}`).join('\n') +const foo = await redirects() + +const redirectLines = (await redirects()).map((entry) => `${entry.source} ${entry.destination}${entry.force ? ' 302!' : ''}`).join('\n') const lines = `\n# Generated by generate-redirects.mjs from Git history\n${redirectLines}\n` console.log('Redirects:\n', lines) diff --git a/src/scripts/redirects.mjs b/src/scripts/redirects.mjs index 30946a565804..abc5069c4ebf 100644 --- a/src/scripts/redirects.mjs +++ b/src/scripts/redirects.mjs @@ -31,10 +31,21 @@ export function cleanupRedirects(movedPages) { /** * Reads Notion specific redirections from data/notion_migration.yaml. * - * @returns {redirections: {source: string, destination: string}[]} + * @returns {redirections: {source: string, destination: string, force: true}[]} */ async function readNotionMigrationRedirects() { - return load(await readFile('data/notion_migration.yaml', 'utf8')) + const data = load(await readFile('data/notion_migration.yaml', 'utf8')) + + // While NextJS is okay if content exists when setting up a redirection, + // Netlify doesn't: it will skip the redirection entirely if it finds + // existing content. + // To go around that, we add a new field 'force' that the script that + // generate the final _redirects file used by Netlify uses to append + // 301! on that entry, effectively forcing the redirection. + for ( let entry of data.redirections ) { + entry["force"] = true + } + return data } /** @@ -46,12 +57,11 @@ export default async function redirects() { const movedPages = await getMovedPagesFromHistory() const notionRedirections = await readNotionMigrationRedirects() return cleanupRedirects([ - ...notionRedirections.redirections, ...movedPages, // Add custom redirects { source: '/careers', destination: 'https://about.sourcegraph.com/jobs', }, - ]) + ]).concat(notionRedirections.redirections) // we skip the cleanup because notion redirects are always going outside. }