57 lines
1.8 KiB
JavaScript
Executable File
57 lines
1.8 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
import { languageKeys } from '#src/languages/lib/languages.js'
|
|
|
|
import { makeLanguageSurrogateKey } from '../../../middleware/set-fastly-surrogate-key.js'
|
|
import purgeEdgeCache from '../../../script/deployment/purge-edge-cache.js'
|
|
|
|
/**
|
|
* In simple terms, this script sends purge commands for...
|
|
*
|
|
* 1. no-language
|
|
* 2. 'en'
|
|
* 3. 'ja'
|
|
* 4. 'pt'
|
|
* ...
|
|
*
|
|
* ...and so on for all languages.
|
|
* But to avoid a stampeding herd after each purge, and to avoid unnecessary
|
|
* load on the backend, put a slight delay between each language.
|
|
* This gives the backend a chance to finish processing all the now stale
|
|
* URLs, for that language, before tackling the next.
|
|
*/
|
|
const DELAY_BETWEEN_LANGUAGES = 10 * 1000
|
|
|
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
|
|
|
|
// This covers things like `/api/webhooks` which isn't language specific.
|
|
await purgeEdgeCache(makeLanguageSurrogateKey())
|
|
|
|
const languages = process.env.LANGUAGES
|
|
? languagesFromString(process.env.LANGUAGES)
|
|
: // Make sure `en` is first because contributors write mostly in English
|
|
// and they're most likely wanting to see their landed changes appear
|
|
// in production as soon as possible.
|
|
languageKeys.sort((a) => (a === 'en' ? -1 : 1))
|
|
|
|
for (const language of languages) {
|
|
console.log(
|
|
`Sleeping ${DELAY_BETWEEN_LANGUAGES / 1000} seconds before purging for '${language}'...`,
|
|
)
|
|
await sleep(DELAY_BETWEEN_LANGUAGES)
|
|
await purgeEdgeCache(makeLanguageSurrogateKey(language))
|
|
}
|
|
|
|
function languagesFromString(str) {
|
|
const languages = str
|
|
.split(/,/)
|
|
.map((x) => x.trim())
|
|
.filter(Boolean)
|
|
if (!languages.every((lang) => languageKeys.includes(lang))) {
|
|
throw new Error(
|
|
`Unrecognized language code (${languages.find((lang) => !languageKeys.includes(lang))})`,
|
|
)
|
|
}
|
|
return languages
|
|
}
|