From b8f5a89b037580805cd9cbdad06ebc01105a77cc Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Tue, 29 Oct 2024 14:08:59 +0100 Subject: [PATCH 01/39] feat(rari): support rari as beta feature --- .github/workflows/test-build.yml | 37 +++--- .nvmrc | 2 +- Procfile.rari | 3 + client/src/document/toolbar/flaws.tsx | 16 ++- copy/community/community.md | 4 + libs/env/index.d.ts | 2 + libs/env/index.js | 3 + libs/types/document.ts | 1 + package.json | 3 + server/index.ts | 164 +++++++++++++++++++------- yarn.lock | 122 ++++++++++++++----- 11 files changed, 256 insertions(+), 101 deletions(-) create mode 100644 Procfile.rari diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 4039bbabf04b..6d374b5a6c77 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -44,6 +44,7 @@ jobs: with: repository: mdn/content path: mdn/content + ref: rari # Yes, this means fetch EVERY COMMIT EVER. # It's probably not sustainable in the far future (e.g. past 2021) # but for now it's good enough. We'll need all the history @@ -111,6 +112,12 @@ jobs: CURRICULUM_ROOT: ${{ github.workspace }}/mdn/curriculum BASE_URL: "https://test.developer.allizom.org" + # rari + BUILD_OUT_ROOT: "client/build" + GENERIC_PAGES_ROOT: "copy" + LIVE_SAMPLES_BASE_URL: https://live.test.mdnyalp.dev + INTERACTIVE_EXAMPLES_BASE_URL: https://interactive-examples.mdn.allizom.net + # The default for this environment variable is geared for writers # (aka. local development). Usually defaults are supposed to be for # secure production but this is an exception and default @@ -168,31 +175,14 @@ jobs: echo "BLOG_ROOT=$BLOG_ROOT" # Build the ServiceWorker first yarn build:sw - yarn build:prepare - - #yarn tool sync-translated-content - - # Build using one process per locale. - # Note: We have 4 cores, but 9 processes is a reasonable number. - for locale in en-us fr; do - yarn build:docs --locale $locale 2>&1 | sed "s/^/[$locale] /" & - pids+=($!) - done - - for pid in "${pids[@]}"; do - wait $pid - done - - du -sh client/build - - # Build the blog - yarn build:blog + yarn build:client + yarn build:ssr - # Build the curriculum - yarn build:curriculum + yarn rari content sync-translated-content - # Generate sitemap index file - yarn build --sitemap-index + yarn rari popularities + yarn rari git-history + yarn rari build --issues client/build/issues.json --templ-stats # SSR all pages yarn render:html @@ -241,6 +231,7 @@ jobs: run: | npm ci npm run build-redirects + npm run build-canonicals - name: Deploy Function if: ${{ ! vars.SKIP_FUNCTION }} diff --git a/.nvmrc b/.nvmrc index 3f430af82b3d..9a2a0e219c9b 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18 +v20 diff --git a/Procfile.rari b/Procfile.rari new file mode 100644 index 000000000000..02f0fa3a7ff1 --- /dev/null +++ b/Procfile.rari @@ -0,0 +1,3 @@ +server: yarn start:server +web: yarn start:client +rari: yarn rari -- serve -vv diff --git a/client/src/document/toolbar/flaws.tsx b/client/src/document/toolbar/flaws.tsx index 191760550773..f0220575978e 100644 --- a/client/src/document/toolbar/flaws.tsx +++ b/client/src/document/toolbar/flaws.tsx @@ -331,7 +331,7 @@ function Flaws({ /> ); default: - throw new Error(`Unknown flaw check '${flaw.name}'`); + return ; } })} @@ -531,6 +531,20 @@ function BrokenLinks({ ); } +function Unknown({ flaws }: { flaws: GenericFlaw[] }) { + return ( +
+

{humanizeFlawName("unknown")}

+
    + {flaws.map((flaw) => ( +
  • + {flaw.explanation} +
  • + ))} +
+
+ ); +} function BadBCDQueries({ flaws }: { flaws: BadBCDQueryFlaw[] }) { return (
diff --git a/copy/community/community.md b/copy/community/community.md index 1f851e99e660..a0f35e196761 100644 --- a/copy/community/community.md +++ b/copy/community/community.md @@ -1,3 +1,7 @@ +--- +title: Contribute to MDN +--- + # MDN Community Where web enthusiasts learn, collaborate, and create diff --git a/libs/env/index.d.ts b/libs/env/index.d.ts index fec939592c93..f57b38a5ed1b 100644 --- a/libs/env/index.d.ts +++ b/libs/env/index.d.ts @@ -1,5 +1,6 @@ export const BUILD_OUT_ROOT: string; export const DEFAULT_FLAW_LEVELS: string; +export const RARI: boolean; export const BASE_URL: string; export const FILES: string; export const FOLDERSEARCH: string; @@ -27,6 +28,7 @@ export const STATIC_ROOT: string; export const PROXY_HOSTNAME: string; export const CONTENT_HOSTNAME: string; export const FAKE_V1_API: boolean; +export const EXTERNAL_DEV_SERVER: sting; export const SENTRY_DSN_BUILD: string; export const OPENAI_KEY: string; export const PG_URI: string; diff --git a/libs/env/index.js b/libs/env/index.js index 253b341d7999..7f9e65be1a13 100644 --- a/libs/env/index.js +++ b/libs/env/index.js @@ -28,6 +28,7 @@ dotenv.config({ // build // ----- +export const RARI = Boolean(parse(process.env.RARI || "false")); export const BASE_URL = process.env.BASE_URL || "https://developer.mozilla.org"; export const BUILD_OUT_ROOT = @@ -178,6 +179,8 @@ export const PROXY_HOSTNAME = export const CONTENT_HOSTNAME = process.env.SERVER_CONTENT_HOST; export const FAKE_V1_API = parse(process.env.SERVER_FAKE_V1_API || false); +export const EXTERNAL_DEV_SERVER = + process.env.EXTERNAL_DEV_SERVER || "http://localhost:8083"; // ---- // tool diff --git a/libs/types/document.ts b/libs/types/document.ts index 1ccedcc18412..bec2c34d4856 100644 --- a/libs/types/document.ts +++ b/libs/types/document.ts @@ -110,6 +110,7 @@ export type Flaws = Partial<{ heading_links: HeadingLinksFlaw[]; translation_differences: TranslationDifferenceFlaw[]; unsafe_html: UnsafeHTMLFlaw[]; + unknown: GenericFlaw[]; }>; export type Translation = { diff --git a/package.json b/package.json index ea5e8a058360..383929fbd5af 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,8 @@ "render:html": "cross-env NODE_ENV=production NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node build/ssr-cli.ts", "start": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && (test -f popularities.json || yarn tool popularities) && (test -d client/build/en-us/_spas || yarn tool spas) && (test -d client/build/en-us/_spas/404.html || yarn render:html -s) && nf -j Procfile.start start", "start:client": "cd client && cross-env NODE_ENV=development BABEL_ENV=development PORT=3000 node scripts/start.js", + "start:rari": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && cross-env RARI=true nf -j Procfile.rari start", + "start:rari-external": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && cross-env RARI=true nf -j Procfile.start start", "start:server": "node-dev --experimental-loader ts-node/esm server/index.ts", "start:static-server": "cross-env NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node server/static.ts", "stylelint": "stylelint \"**/*.scss\"", @@ -74,6 +76,7 @@ "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", "@mdn/browser-compat-data": "^5.6.10", + "@mdn/rari": "^0.0.15", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.35.0", "@stripe/stripe-js": "^4.9.0", diff --git a/server/index.ts b/server/index.ts index 2dc964aea3b9..1b515a5603ba 100644 --- a/server/index.ts +++ b/server/index.ts @@ -34,6 +34,8 @@ import { CONTENT_TRANSLATED_ROOT, BLOG_ROOT, CURRICULUM_ROOT, + EXTERNAL_DEV_SERVER, + RARI, } from "../libs/env/index.js"; import documentRouter from "./document.js"; @@ -54,28 +56,43 @@ import { } from "../build/blog.js"; import { findCurriculumPageBySlug } from "../build/curriculum.js"; +async function fetch_from_rari(path: string, res = null) { + const external_url = `${EXTERNAL_DEV_SERVER}${path}`; + console.log(`using ${external_url}`); + // eslint-disable-next-line n/no-unsupported-features/node-builtins + return await (await fetch(external_url)).json(); +} + async function buildDocumentFromURL(url: string) { try { console.time(`buildDocumentFromURL(${url})`); - const document = Document.findByURL(url); - if (!document) { - return null; - } - const documentOptions = {}; - if (CONTENT_TRANSLATED_ROOT) { - // When you're running the dev server and build documents - // every time a URL is requested, you won't have had the chance to do - // the phase that happens when you do a regular `yarn build`. - document.translations = findTranslations( - document.metadata.slug, - document.metadata.locale - ); + let built; + if (!RARI) { + const document = Document.findByURL(url); + if (!document) { + return null; + } + const documentOptions = {}; + if (CONTENT_TRANSLATED_ROOT) { + // When you're running the dev server and build documents + // every time a URL is requested, you won't have had the chance to do + // the phase that happens when you do a regular `yarn build`. + document.translations = findTranslations( + document.metadata.slug, + document.metadata.locale + ); + } + built = await buildDocument(document, documentOptions); + if (built) { + return { doc: built?.doc, url }; + } + } else { + built = await fetch_from_rari(url); + if (built) { + return built; + } } - const built = await buildDocument(document, documentOptions); - - if (built) { - return { doc: built?.doc, url }; - } else if ( + if ( url.split("/")[1] && url.split("/")[1].toLowerCase() !== DEFAULT_LOCALE.toLowerCase() && !CONTENT_TRANSLATED_ROOT @@ -96,19 +113,25 @@ async function buildDocumentFromURL(url: string) { } } -function redirectOr404(res: express.Response, url, suffix = "") { +async function redirectOr404(res: express.Response, url, suffix = "") { const redirectURL = Redirect.resolve(url); if (redirectURL !== url) { // This was and is broken for redirects with anchors... return res.redirect(301, redirectURL + suffix); } - return send404(res); + return await send404(res); } -function send404(res: express.Response) { - return res - .status(404) - .sendFile(path.join(STATIC_ROOT, "en-us", "_spas", "404.html")); +async function send404(res: express.Response) { + if (!RARI) { + return res + .status(404) + .sendFile(path.join(STATIC_ROOT, "en-us", "_spas", "404.html")); + } else { + const index = fetch_from_rari("/en-US/404"); + res.header("Content-Security-Policy", CSP_VALUE); + return res.send(renderHTML(index)); + } } const app = express(); @@ -293,8 +316,17 @@ if (CURRICULUM_ROOT) { "/:locale/curriculum/index.json", ], async (req, res) => { - const { slug = "" } = req.params; - const data = await findCurriculumPageBySlug(slug); + let data; + if (!RARI) { + const { slug = "" } = req.params; + data = await findCurriculumPageBySlug(slug); + } else { + try { + data = await fetch_from_rari(req.path, res); + } catch (error) { + return res.status(500).json(JSON.stringify(error.toString())); + } + } if (!data) { return res.status(404).send("Nothing here 🤷‍♂️"); } @@ -302,19 +334,28 @@ if (CURRICULUM_ROOT) { } ); } else { - app.get("/[^/]+/curriculum/*", (_, res) => { + app.get("/[^/]+/curriculum/*", async (_, res) => { console.warn("'CURRICULUM_ROOT' not set in .env file"); - return send404(res); + return await send404(res); }); } if (BLOG_ROOT) { - app.get("/:locale/blog/index.json", async (_, res) => { - const posts = await allPostFrontmatter( - { includeUnpublished: true }, - MEMOIZE_INVALIDATE - ); - return res.json({ hyData: { posts } }); + app.get("/:locale/blog/index.json", async (req, res) => { + if (!RARI) { + const posts = await allPostFrontmatter( + { includeUnpublished: true }, + MEMOIZE_INVALIDATE + ); + return res.json({ hyData: { posts } }); + } else { + try { + const index = await fetch_from_rari(req.path, res); + return res.json(index); + } catch (error) { + return res.status(500).json(JSON.stringify(error.toString())); + } + } }); app.get("/:locale/blog/author/:slug/:asset", async (req, res) => { const { slug, asset } = req.params; @@ -330,12 +371,21 @@ if (BLOG_ROOT) { ).pipe(res); }); app.get("/:locale/blog/:slug/index.json", async (req, res) => { - const { slug } = req.params; - const data = await findPostBySlug(slug); - if (!data) { - return res.status(404).send("Nothing here 🤷‍♂️"); + if (!RARI) { + const { slug } = req.params; + const data = await findPostBySlug(slug); + if (!data) { + return res.status(404).send("Nothing here 🤷‍♂️"); + } + return res.json(data); + } else { + try { + const index = await fetch_from_rari(req.path, res); + return res.json(index); + } catch (error) { + return res.status(500).json(JSON.stringify(error.toString())); + } } - return res.json(data); }); app.get("/:locale/blog/:slug/:asset", async (req, res) => { const { slug, asset } = req.params; @@ -349,9 +399,9 @@ if (BLOG_ROOT) { return res.status(404).send("Nothing here 🤷‍♂️"); }); } else { - app.get("/[^/]+/blog/*", (_, res) => { + app.get("/[^/]+/blog/*", async (_, res) => { console.warn("'BLOG_ROOT' not set in .env file"); - return send404(res); + return await send404(res); }); } @@ -376,7 +426,7 @@ if (contentProxy) { try { const doc = await buildDocumentFromURL(url); if (!doc) { - return redirectOr404(res, url, "/index.json"); + return await redirectOr404(res, url, "/index.json"); } return res.json(doc); } catch (error) { @@ -387,7 +437,7 @@ if (contentProxy) { const url = decodeURI(req.path.replace(/\/metadata.json$/, "")); const doc = await buildDocumentFromURL(url); if (!doc?.doc) { - return redirectOr404(res, url, "/metadata.json"); + return await redirectOr404(res, url, "/metadata.json"); } const docString = JSON.stringify(doc); @@ -416,7 +466,7 @@ if (contentProxy) { try { const doc = await buildDocumentFromURL(url); if (!doc) { - return redirectOr404(res, url); + return await redirectOr404(res, url); } res.header("Content-Security-Policy", CSP_VALUE); return res.send(renderHTML(doc)); @@ -425,7 +475,31 @@ if (contentProxy) { } }); } -app.get("/*", (_, res) => send404(res)); +if (RARI) { + app.get( + [ + "/en-US/community", + "/en-US/community/index.json", + "/en-US/plus/docs/*", + "/en-US/observatory/docs/*", + "/:locale/", + ], + async (req, res) => { + try { + const index = await fetch_from_rari(req.path, res); + if (req.path.endsWith(".json")) { + return res.json(index); + } + res.header("Content-Security-Policy", CSP_VALUE); + return res.send(renderHTML(index)); + } catch (error) { + return res.status(500).json(JSON.stringify(error.toString())); + } + } + ); +} + +app.get("/*", async (_, res) => await send404(res)); if (!fs.existsSync(path.resolve(CONTENT_ROOT))) { throw new Error(`${path.resolve(CONTENT_ROOT)} does not exist!`); diff --git a/yarn.lock b/yarn.lock index b2d0c6e3f4f1..a33e0e3e157b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1876,6 +1876,13 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -2248,6 +2255,16 @@ resolved "https://registry.yarnpkg.com/@mdn/minimalist/-/minimalist-2.0.4.tgz#6488ab0cb65b059446dcd9bf542246b81febe241" integrity sha512-jocePw/fsGcBxO67D+iWQLZ0TQjwNVonaME2BFN98QIm/e1kTY1/k2s4fOqH5MMa3QYURxa098bI4sChn6s/7Q== +"@mdn/rari@^0.0.15": + version "0.0.15" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.15.tgz#9fe583cff09b675dc1c12d0d13d7125a5dbca1b1" + integrity sha512-WD0BIyHC+7gOBGKK8poyGCcoVvseotR3rcQfvX//juJEIe4xpdJHkZ2Jr4UYwuMjVdwfFomDSuxXvWKZqRyCtA== + dependencies: + extract-zip "^2.0.1" + https-proxy-agent "^7.0.2" + proxy-from-env "^1.1.0" + tar "^7.4.3" + "@mozilla/glean@5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@mozilla/glean/-/glean-5.0.3.tgz#eda7169f3e8f38a7d3019a1512b45778c4f05735" @@ -3623,6 +3640,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@8.12.1": version "8.12.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.1.tgz#ea39bc3c1bf9828b01e35478daede2188b471b2e" @@ -5005,6 +5029,11 @@ chokidar@^4.0.0: dependencies: readdirp "^4.0.1" +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== + chrome-trace-event@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" @@ -7031,6 +7060,17 @@ external-editor@^3.0.3, external-editor@^3.1.0: iconv-lite "^0.4.24" tmp "^0.0.33" +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -7552,6 +7592,13 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -7619,7 +7666,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^10.0.0: +glob@^10.0.0, glob@^10.3.7: version "10.4.5" resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== @@ -10812,11 +10859,19 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +minizlib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.1.tgz#46d5329d1eb3c83924eff1d3b858ca0a31581012" + integrity sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg== + dependencies: + minipass "^7.0.4" + rimraf "^5.0.5" + mkdirp@^0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -10824,6 +10879,11 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.6" +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + module-details-from-path@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" @@ -13150,6 +13210,13 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +rimraf@^5.0.5: + version "5.0.10" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c" + integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== + dependencies: + glob "^10.3.7" + rough-notation@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/rough-notation/-/rough-notation-0.5.1.tgz#32abbb16b973fb00fba83ab96b18704e98620e95" @@ -13786,7 +13853,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -13812,15 +13879,6 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -13915,7 +13973,7 @@ stringify-entities@^4.0.0: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -13936,13 +13994,6 @@ strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -14307,6 +14358,18 @@ tar-stream@^1.5.2: to-buffer "^1.1.1" xtend "^4.0.0" +tar@^7.4.3: + version "7.4.3" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" + integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.0.1" + mkdirp "^3.0.1" + yallist "^5.0.0" + temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -15505,7 +15568,8 @@ word-wrap@^1.2.5, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + name wrap-ansi-cjs version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -15523,15 +15587,6 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -15624,6 +15679,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== + yaml@2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" @@ -15657,7 +15717,7 @@ yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.1.1" -yauzl@^2.4.2, yauzl@^2.9.2: +yauzl@^2.10.0, yauzl@^2.4.2, yauzl@^2.9.2: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== From 8419dc2dd923bb5cb58c9fe0e0f7270f72412230 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Wed, 30 Oct 2024 22:03:07 +0100 Subject: [PATCH 02/39] feat(rari): add rari server to bin --- Procfile.rari | 3 --- Procfile.start | 2 +- package.json | 3 +++ server/cli.ts | 30 ++++++++++++++++++++++++++++++ server/filename.ts | 3 +++ yarn.lock | 34 ++++++++++++++++++++++++++++++++-- 6 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 server/cli.ts create mode 100644 server/filename.ts diff --git a/Procfile.rari b/Procfile.rari index 02f0fa3a7ff1..e69de29bb2d1 100644 --- a/Procfile.rari +++ b/Procfile.rari @@ -1,3 +0,0 @@ -server: yarn start:server -web: yarn start:client -rari: yarn rari -- serve -vv diff --git a/Procfile.start b/Procfile.start index a5108c2c7b44..a39285dfe174 100644 --- a/Procfile.start +++ b/Procfile.start @@ -1,2 +1,2 @@ -server: yarn start:server +server: yarn start:rari-server web: yarn start:client diff --git a/package.json b/package.json index 383929fbd5af..fc0b1d777aa5 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "author": "MDN Web Docs", "type": "module", "bin": { + "rari-server": "server/cli.js", "yari-build": "build/cli.js", "yari-build-blog": "build/build-blog.js", "yari-filecheck": "filecheck/cli.js", @@ -44,6 +45,7 @@ "start:client": "cd client && cross-env NODE_ENV=development BABEL_ENV=development PORT=3000 node scripts/start.js", "start:rari": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && cross-env RARI=true nf -j Procfile.rari start", "start:rari-external": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && cross-env RARI=true nf -j Procfile.start start", + "start:rari-server": "node-dev --experimental-loader ts-node/esm server/cli.ts", "start:server": "node-dev --experimental-loader ts-node/esm server/index.ts", "start:static-server": "cross-env NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node server/static.ts", "stylelint": "stylelint \"**/*.scss\"", @@ -91,6 +93,7 @@ "codemirror": "^6.0.1", "compression": "^1.7.4", "compute-baseline": "^0.1.1", + "concurrently": "^9.0.1", "cookie": "^0.7.2", "cookie-parser": "^1.4.7", "css-tree": "^2.3.1", diff --git a/server/cli.ts b/server/cli.ts new file mode 100644 index 000000000000..620265e130a6 --- /dev/null +++ b/server/cli.ts @@ -0,0 +1,30 @@ +import { concurrently } from "concurrently"; +import { rariBin } from "@mdn/rari"; +import { filename } from "./filename.js"; + +const { result } = concurrently( + [ + { + command: `node ${filename}`, + name: "server", + env: { + NODE_OPTIONS: "--no-warnings=ExperimentalWarning --loader ts-node/esm", + }, + }, + { + command: `${rariBin} serve -vv`, + name: "rari", + }, + ], + { + prefix: "🙈", + killOthers: ["failure", "success"], + restartTries: 0, + } +); + +try { + await result; +} catch { + console.error("NOPE"); +} diff --git a/server/filename.ts b/server/filename.ts new file mode 100644 index 000000000000..4b5b7b947877 --- /dev/null +++ b/server/filename.ts @@ -0,0 +1,3 @@ +export const filename = import.meta + .resolve("./index.ts") + .replace(/^file:\/\//, ""); diff --git a/yarn.lock b/yarn.lock index a33e0e3e157b..54bd703d0ddf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5308,6 +5308,19 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +concurrently@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.0.1.tgz#01e171bf6c7af0c022eb85daef95bff04d8185aa" + integrity sha512-wYKvCd/f54sTXJMSfV6Ln/B8UrfLBKOYa+lzc6CHay3Qek+LorVSBdMVfyewFhRbH0Rbabsk4D+3PL/VjQ5gzg== + dependencies: + chalk "^4.1.2" + lodash "^4.17.21" + rxjs "^7.8.1" + shell-quote "^1.8.1" + supports-color "^8.1.1" + tree-kill "^1.2.2" + yargs "^17.7.2" + config-chain@^1.1.11: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -13251,6 +13264,13 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" @@ -14243,7 +14263,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: +supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -14579,6 +14599,11 @@ tree-dump@^1.0.1: resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.2.tgz#c460d5921caeb197bde71d0e9a7b479848c5b8ac" integrity sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ== +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + trim-lines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" @@ -14693,6 +14718,11 @@ tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.1, tslib@^2.6 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== +tslib@^2.1.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" + integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -15704,7 +15734,7 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.3.1: +yargs@^17.3.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== From 54337d040efa87efec75f7fac5eaa119bcce7c5e Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Thu, 31 Oct 2024 15:27:34 +0100 Subject: [PATCH 03/39] fix server cli --- Procfile.rari | 2 ++ Procfile.start | 2 +- server/cli.ts | 19 +++++++++++++++---- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Procfile.rari b/Procfile.rari index e69de29bb2d1..a39285dfe174 100644 --- a/Procfile.rari +++ b/Procfile.rari @@ -0,0 +1,2 @@ +server: yarn start:rari-server +web: yarn start:client diff --git a/Procfile.start b/Procfile.start index a39285dfe174..a5108c2c7b44 100644 --- a/Procfile.start +++ b/Procfile.start @@ -1,2 +1,2 @@ -server: yarn start:rari-server +server: yarn start:server web: yarn start:client diff --git a/server/cli.ts b/server/cli.ts index 620265e130a6..500774461add 100644 --- a/server/cli.ts +++ b/server/cli.ts @@ -2,7 +2,7 @@ import { concurrently } from "concurrently"; import { rariBin } from "@mdn/rari"; import { filename } from "./filename.js"; -const { result } = concurrently( +const { commands, result } = concurrently( [ { command: `node ${filename}`, @@ -10,21 +10,32 @@ const { result } = concurrently( env: { NODE_OPTIONS: "--no-warnings=ExperimentalWarning --loader ts-node/esm", }, + prefixColor: "red", }, { command: `${rariBin} serve -vv`, name: "rari", + prefixColor: "blue", }, ], { - prefix: "🙈", killOthers: ["failure", "success"], restartTries: 0, + handleInput: true, + inputStream: process.stdin, } ); +const stop = new Promise((resolve, reject) => { + process.on("SIGINT", () => { + commands.forEach((cmd) => cmd.kill()); // Terminate all concurrently-run processes + reject(); + }); + result.finally(() => resolve(null)); +}); try { - await result; + await stop; + console.log("All tasks completed successfully."); } catch { - console.error("NOPE"); + console.log("Killed ☠️"); } From 13cbf0a6ffc39813ed972274ecdf677ebf9ccbc8 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Thu, 31 Oct 2024 20:58:42 +0100 Subject: [PATCH 04/39] update rari --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0e5573531a4c..a887fe5c47cf 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", "@mdn/browser-compat-data": "^5.6.11", - "@mdn/rari": "^0.0.15", + "@mdn/rari": "^0.0.16", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.36.0", "@stripe/stripe-js": "^4.9.0", diff --git a/yarn.lock b/yarn.lock index 1fea970b8f92..9a5fa7f36d86 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2255,10 +2255,10 @@ resolved "https://registry.yarnpkg.com/@mdn/minimalist/-/minimalist-2.0.4.tgz#6488ab0cb65b059446dcd9bf542246b81febe241" integrity sha512-jocePw/fsGcBxO67D+iWQLZ0TQjwNVonaME2BFN98QIm/e1kTY1/k2s4fOqH5MMa3QYURxa098bI4sChn6s/7Q== -"@mdn/rari@^0.0.15": - version "0.0.15" - resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.15.tgz#9fe583cff09b675dc1c12d0d13d7125a5dbca1b1" - integrity sha512-WD0BIyHC+7gOBGKK8poyGCcoVvseotR3rcQfvX//juJEIe4xpdJHkZ2Jr4UYwuMjVdwfFomDSuxXvWKZqRyCtA== +"@mdn/rari@^0.0.16": + version "0.0.16" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.16.tgz#3dfee65599726fc29c26cb27d5f66523f9d386ef" + integrity sha512-L08VLxw/VSxlcZ8UdnTIm/WlbSoX2NGLKI4dPGFSNQnoy+kmDhV7rtw0/qW1YITJgCXl62bles6Cz+Mt/5H8Cg== dependencies: extract-zip "^2.0.1" https-proxy-agent "^7.0.2" From 184c53748e18ed533a7bf5aeac8dc5a6e3c90692 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Thu, 7 Nov 2024 17:37:13 +0100 Subject: [PATCH 05/39] add de --- .github/workflows/test-build.yml | 14 ++++++++++++++ package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 162e7d9576d4..745bbf4f3c70 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -73,6 +73,19 @@ jobs: # See matching warning for mdn/content checkout step fetch-depth: 0 + - name: Checkout (translated-content-de) + uses: actions/checkout@v4 + if: ${{ ! vars.SKIP_BUILD || ! vars.SKIP_FUNCTION }} + with: + repository: mdn/translated-content-de + path: mdn/translated-content-de + + - name: Move de into translated-content + if: ${{ ! vars.SKIP_BUILD || ! vars.SKIP_FUNCTION }} + run: | + mv mdn/translated-content-de/files/de mdn/translated-content/files/ + rm -rf mdn/translated-content-de + - uses: actions/checkout@v4 if: ${{ ! vars.SKIP_BUILD }} with: @@ -117,6 +130,7 @@ jobs: GENERIC_PAGES_ROOT: "copy" LIVE_SAMPLES_BASE_URL: https://live.test.mdnyalp.dev INTERACTIVE_EXAMPLES_BASE_URL: https://interactive-examples.mdn.allizom.net + ADDITIONAL_LOCALES_FOR_GENERICS_AND_SPAS: de # The default for this environment variable is geared for writers # (aka. local development). Usually defaults are supposed to be for diff --git a/package.json b/package.json index 55ccd0f512ea..361e00715435 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", "@mdn/browser-compat-data": "^5.6.13", - "@mdn/rari": "^0.0.16", + "@mdn/rari": "^0.0.17", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.37.1", "@stripe/stripe-js": "^4.9.0", diff --git a/yarn.lock b/yarn.lock index 89bacdb707ac..24654cf49d9a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2255,10 +2255,10 @@ resolved "https://registry.yarnpkg.com/@mdn/minimalist/-/minimalist-2.0.4.tgz#6488ab0cb65b059446dcd9bf542246b81febe241" integrity sha512-jocePw/fsGcBxO67D+iWQLZ0TQjwNVonaME2BFN98QIm/e1kTY1/k2s4fOqH5MMa3QYURxa098bI4sChn6s/7Q== -"@mdn/rari@^0.0.16": - version "0.0.16" - resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.16.tgz#3dfee65599726fc29c26cb27d5f66523f9d386ef" - integrity sha512-L08VLxw/VSxlcZ8UdnTIm/WlbSoX2NGLKI4dPGFSNQnoy+kmDhV7rtw0/qW1YITJgCXl62bles6Cz+Mt/5H8Cg== +"@mdn/rari@^0.0.17": + version "0.0.17" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.17.tgz#19e115434a615e6e87f903dfd608ab154bd1e493" + integrity sha512-fYl9mToddoWa5j1ZPF7oHwmst6Zuma2UrT3vBpK19LfQ5xXTIDynX0+yoNdRyw/qKfnLjGMHInfe2ja770B86w== dependencies: extract-zip "^2.0.1" https-proxy-agent "^7.0.2" From 3cd614bd8c12664954be14dd554ac06da747dea8 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Fri, 8 Nov 2024 16:48:17 +0100 Subject: [PATCH 06/39] update rari --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2c4c00ccdcdf..d06e48b2a328 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", "@mdn/browser-compat-data": "^5.6.13", - "@mdn/rari": "^0.0.17", + "@mdn/rari": "^0.0.18", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.37.1", "@stripe/stripe-js": "^4.9.0", diff --git a/yarn.lock b/yarn.lock index be61eae1450f..4443c6980925 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2255,10 +2255,10 @@ resolved "https://registry.yarnpkg.com/@mdn/minimalist/-/minimalist-2.0.4.tgz#6488ab0cb65b059446dcd9bf542246b81febe241" integrity sha512-jocePw/fsGcBxO67D+iWQLZ0TQjwNVonaME2BFN98QIm/e1kTY1/k2s4fOqH5MMa3QYURxa098bI4sChn6s/7Q== -"@mdn/rari@^0.0.17": - version "0.0.17" - resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.17.tgz#19e115434a615e6e87f903dfd608ab154bd1e493" - integrity sha512-fYl9mToddoWa5j1ZPF7oHwmst6Zuma2UrT3vBpK19LfQ5xXTIDynX0+yoNdRyw/qKfnLjGMHInfe2ja770B86w== +"@mdn/rari@^0.0.18": + version "0.0.18" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.18.tgz#e046b0af21a74584f669145d368a0b121172d62d" + integrity sha512-c9pfCdZsTKcxP54EOF3bZBFC4vUXdSX+t+TmXAjQUm9fC4ea7deVN0hQ3GdiVeFGUsADnjlUqcD5eKbfmE4f3w== dependencies: extract-zip "^2.0.1" https-proxy-agent "^7.0.2" From e994cd9d05df73eedf531e51bb75f112e0f21e98 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Mon, 11 Nov 2024 09:57:47 +0100 Subject: [PATCH 07/39] fix(playground): fix testing url --- .github/workflows/test-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 745bbf4f3c70..6af01ed1b932 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -176,7 +176,7 @@ jobs: REACT_APP_PLACEMENT_ENABLED: true # Playground - REACT_APP_PLAYGROUND_BASE_HOST: play.test.mdn.allizom.net + REACT_APP_PLAYGROUND_BASE_HOST: test.mdnyalp.dev # Observatory REACT_APP_OBSERVATORY_API_URL: https://observatory-api.mdn.allizom.net From de59651ccd44890692f77b45d3a4475f46a1b9aa Mon Sep 17 00:00:00 2001 From: Andi Pieper Date: Wed, 13 Nov 2024 15:46:01 +0100 Subject: [PATCH 08/39] yarn.lock --- yarn.lock | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 883421c19e09..b36b9d930b0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13836,7 +13836,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -13862,6 +13862,15 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -13956,7 +13965,7 @@ stringify-entities@^4.0.0: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -13977,6 +13986,13 @@ strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -15544,8 +15560,7 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - name wrap-ansi-cjs +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -15563,6 +15578,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From 0e3653ecbe70bb1825dc0e497e80d0c5416bb8c1 Mon Sep 17 00:00:00 2001 From: Andi Pieper Date: Wed, 13 Nov 2024 16:26:13 +0100 Subject: [PATCH 09/39] squelch a linter warning --- server/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/index.ts b/server/index.ts index 1b515a5603ba..9d25bc7dba6b 100644 --- a/server/index.ts +++ b/server/index.ts @@ -56,6 +56,7 @@ import { } from "../build/blog.js"; import { findCurriculumPageBySlug } from "../build/curriculum.js"; +// eslint-disable-next-line @typescript-eslint/no-unused-vars async function fetch_from_rari(path: string, res = null) { const external_url = `${EXTERNAL_DEV_SERVER}${path}`; console.log(`using ${external_url}`); From 1a3977cf4a6f599796a0c3e083f48f4973fbeb63 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Wed, 13 Nov 2024 17:14:53 +0100 Subject: [PATCH 10/39] Update server/index.ts Co-authored-by: Andi Pieper --- server/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/index.ts b/server/index.ts index 9d25bc7dba6b..8e566541786c 100644 --- a/server/index.ts +++ b/server/index.ts @@ -129,7 +129,7 @@ async function send404(res: express.Response) { .status(404) .sendFile(path.join(STATIC_ROOT, "en-us", "_spas", "404.html")); } else { - const index = fetch_from_rari("/en-US/404"); + const index = await fetch_from_rari("/en-US/404"); res.header("Content-Security-Policy", CSP_VALUE); return res.send(renderHTML(index)); } From de68cc8076129c3bb725d8febf67ba01a7eb12df Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Thu, 14 Nov 2024 14:22:20 +0100 Subject: [PATCH 11/39] content merged --- .github/workflows/test-build.yml | 1 - client/src/document/toolbar/flaws.tsx | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 6af01ed1b932..d6ace64e42a3 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -44,7 +44,6 @@ jobs: with: repository: mdn/content path: mdn/content - ref: rari # Yes, this means fetch EVERY COMMIT EVER. # It's probably not sustainable in the far future (e.g. past 2021) # but for now it's good enough. We'll need all the history diff --git a/client/src/document/toolbar/flaws.tsx b/client/src/document/toolbar/flaws.tsx index f0220575978e..ea5698f7eb75 100644 --- a/client/src/document/toolbar/flaws.tsx +++ b/client/src/document/toolbar/flaws.tsx @@ -706,7 +706,9 @@ function Macros({

{humanizeFlawName("macros")}

{flaws.map((flaw) => { - const inPrerequisiteMacro = !flaw.filepath.includes(sourceFilePath); + const inPrerequisiteMacro = flaw.filepath + ? !flaw.filepath.includes(sourceFilePath) + : false; return (
Date: Thu, 14 Nov 2024 17:35:59 +0100 Subject: [PATCH 12/39] rari 19 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index b8d8860a1ce3..06c75f673349 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", "@mdn/browser-compat-data": "^5.6.15", - "@mdn/rari": "^0.0.18", + "@mdn/rari": "^0.0.19", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.38.0", "@stripe/stripe-js": "^4.10.0", diff --git a/yarn.lock b/yarn.lock index 283db0f42c4d..e2be90f7d11a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2273,10 +2273,10 @@ resolved "https://registry.yarnpkg.com/@mdn/minimalist/-/minimalist-2.0.4.tgz#6488ab0cb65b059446dcd9bf542246b81febe241" integrity sha512-jocePw/fsGcBxO67D+iWQLZ0TQjwNVonaME2BFN98QIm/e1kTY1/k2s4fOqH5MMa3QYURxa098bI4sChn6s/7Q== -"@mdn/rari@^0.0.18": - version "0.0.18" - resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.18.tgz#e046b0af21a74584f669145d368a0b121172d62d" - integrity sha512-c9pfCdZsTKcxP54EOF3bZBFC4vUXdSX+t+TmXAjQUm9fC4ea7deVN0hQ3GdiVeFGUsADnjlUqcD5eKbfmE4f3w== +"@mdn/rari@^0.0.19": + version "0.0.19" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.19.tgz#23fae7fa1166e93440d17e970cedce7bea76dd02" + integrity sha512-FzuLMzJeofPpbliDUM8XxsgD4UMe04Sxcn2WFBGGfRGWRkfydx/8zz8+YGn/Onz601bL8HUtcpPiRFVDj0Kf0Q== dependencies: extract-zip "^2.0.1" https-proxy-agent "^7.0.2" From 1b272c4abe0da2573d6141ccc6f32104856e8f1b Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Sun, 17 Nov 2024 14:23:48 +0100 Subject: [PATCH 13/39] search index --- server/index.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/server/index.ts b/server/index.ts index 8e566541786c..056c8e9b28d0 100644 --- a/server/index.ts +++ b/server/index.ts @@ -277,7 +277,16 @@ app.get("/_open", (req, res) => { res.status(200).send(`Tried to open ${spec} in ${process.env.EDITOR}`); }); -app.use("/:locale/search-index.json", searchIndexRoute); +if (RARI) { + app.use("/:locale/search-index.json", async (req, res) => { + const { locale } = req.params; + const json = await fetch_from_rari(`/${locale}/search-index.json`, res); + res.setHeader("Access-Control-Allow-Origin", "*"); + return res.json(json); + }); +} else { + app.use("/:locale/search-index.json", searchIndexRoute); +} app.get("/_flaws", flawsRoute); From 23b3e232bf3e7677f93576ebacdb13c23c92216b Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Mon, 18 Nov 2024 10:35:08 +0100 Subject: [PATCH 14/39] rari 20 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index bb9f65f90952..461cb4634f07 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", "@mdn/browser-compat-data": "^5.6.15", - "@mdn/rari": "^0.0.19", + "@mdn/rari": "^0.0.20", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.38.0", "@stripe/stripe-js": "^4.10.0", diff --git a/yarn.lock b/yarn.lock index 5c137aadb51f..93ab82a06560 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2273,10 +2273,10 @@ resolved "https://registry.yarnpkg.com/@mdn/minimalist/-/minimalist-2.0.4.tgz#6488ab0cb65b059446dcd9bf542246b81febe241" integrity sha512-jocePw/fsGcBxO67D+iWQLZ0TQjwNVonaME2BFN98QIm/e1kTY1/k2s4fOqH5MMa3QYURxa098bI4sChn6s/7Q== -"@mdn/rari@^0.0.19": - version "0.0.19" - resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.19.tgz#23fae7fa1166e93440d17e970cedce7bea76dd02" - integrity sha512-FzuLMzJeofPpbliDUM8XxsgD4UMe04Sxcn2WFBGGfRGWRkfydx/8zz8+YGn/Onz601bL8HUtcpPiRFVDj0Kf0Q== +"@mdn/rari@^0.0.20": + version "0.0.20" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.20.tgz#35c7a9a61eb16083dec263a7eb17284ce4ab377f" + integrity sha512-gkL2pbVkZe5XTvk6XeOnMcpUNeGy56qGhcnPSTtwdJUbM5+PPOfcOJq5gJx9TuPqBDg8Iwxfog5ImuG06srE0Q== dependencies: extract-zip "^2.0.1" https-proxy-agent "^7.0.2" From 485ff2eee13b6064917a5b915eeb5f0ef7af43ba Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Mon, 18 Nov 2024 21:25:36 +0100 Subject: [PATCH 15/39] contributors.txt --- server/index.ts | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/server/index.ts b/server/index.ts index 056c8e9b28d0..ef9e34234491 100644 --- a/server/index.ts +++ b/server/index.ts @@ -293,22 +293,35 @@ app.get("/_flaws", flawsRoute); app.use("/_translations", translationsRouter); app.get("/*/contributors.txt", async (req, res) => { - const url = req.path.replace(/\/contributors\.txt$/, ""); - const document = Document.findByURL(url); - res.setHeader("content-type", "text/plain"); - if (!document) { - return res.status(404).send(`Document not found by URL (${url})`); - } - try { - const { doc: builtDocument } = await buildDocument(document); - res.send( - renderContributorsTxt( - document.metadata.contributors, - builtDocument.source.github_url.replace("/blob/", "/commits/") - ) - ); - } catch (error) { - return res.status(500).json(JSON.stringify(error.toString())); + if (!RARI) { + const url = req.path.replace(/\/contributors\.txt$/, ""); + const document = Document.findByURL(url); + res.setHeader("content-type", "text/plain"); + if (!document) { + return res.status(404).send(`Document not found by URL (${url})`); + } + try { + const { doc: builtDocument } = await buildDocument(document); + res.send( + renderContributorsTxt( + document.metadata.contributors, + builtDocument.source.github_url.replace("/blob/", "/commits/") + ) + ); + } catch (error) { + return res.status(500).json(JSON.stringify(error.toString())); + } + } else { + try { + const external_url = `${EXTERNAL_DEV_SERVER}${req.path}`; + console.log(`contributors.txt: using ${external_url}`); + // eslint-disable-next-line n/no-unsupported-features/node-builtins + const text = await (await fetch(external_url)).text(); + res.setHeader("content-type", "text/plain"); + return res.send(text); + } catch (error) { + return res.status(500).json(JSON.stringify(error.toString())); + } } }); From 3202e0e2483aca38c77577ae9576796b075bae04 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Mon, 18 Nov 2024 21:30:23 +0100 Subject: [PATCH 16/39] stage --- .github/workflows/stage-build.yml | 36 +++++++++++-------------------- package.json | 2 +- yarn.lock | 8 +++---- 3 files changed, 18 insertions(+), 28 deletions(-) diff --git a/.github/workflows/stage-build.yml b/.github/workflows/stage-build.yml index 5169210175ae..b2523980f9ad 100644 --- a/.github/workflows/stage-build.yml +++ b/.github/workflows/stage-build.yml @@ -214,6 +214,13 @@ jobs: CURRICULUM_ROOT: ${{ github.workspace }}/mdn/curriculum BASE_URL: "https://developer.allizom.org" + # rari + BUILD_OUT_ROOT: "client/build" + GENERIC_PAGES_ROOT: "copy" + LIVE_SAMPLES_BASE_URL: https://live.mdnyalp.dev + INTERACTIVE_EXAMPLES_BASE_URL: https://interactive-examples.mdn.allizom.net + ADDITIONAL_LOCALES_FOR_GENERICS_AND_SPAS: de + # The default for this environment variable is geared for writers # (aka. local development). Usually defaults are supposed to be for # secure production but this is an exception and default @@ -290,31 +297,14 @@ jobs: echo "BLOG_ROOT=$BLOG_ROOT" # Build the ServiceWorker first yarn build:sw - yarn build:prepare - - yarn tool sync-translated-content es fr ja ko pt-br ru zh-cn zh-tw - - # Build using one process per locale. - # Note: We have 4 cores, but 9 processes is a reasonable number. - for locale in en-us de es fr ja ko pt-br ru zh-cn zh-tw; do - yarn build:docs --locale $locale 2>&1 | sed "s/^/[$locale] /" & - pids+=($!) - done - - for pid in "${pids[@]}"; do - wait $pid - done - - du -sh client/build - - # Build the blog - yarn build:blog + yarn build:client + yarn build:ssr - # Build the curriculum - yarn build:curriculum + yarn rari content sync-translated-content - # Generate sitemap index file - yarn build --sitemap-index + yarn rari popularities + yarn rari git-history + yarn rari build --issues client/build/issues.json --templ-stats # SSR all pages yarn render:html diff --git a/package.json b/package.json index 2c6815e035ee..8fdf726e9837 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", "@mdn/browser-compat-data": "^5.6.16", - "@mdn/rari": "^0.0.20", + "@mdn/rari": "^0.0.21", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.38.0", "@stripe/stripe-js": "^4.10.0", diff --git a/yarn.lock b/yarn.lock index 928b1d3c4b6a..2044c07a4c21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2273,10 +2273,10 @@ resolved "https://registry.yarnpkg.com/@mdn/minimalist/-/minimalist-2.0.4.tgz#6488ab0cb65b059446dcd9bf542246b81febe241" integrity sha512-jocePw/fsGcBxO67D+iWQLZ0TQjwNVonaME2BFN98QIm/e1kTY1/k2s4fOqH5MMa3QYURxa098bI4sChn6s/7Q== -"@mdn/rari@^0.0.20": - version "0.0.20" - resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.20.tgz#35c7a9a61eb16083dec263a7eb17284ce4ab377f" - integrity sha512-gkL2pbVkZe5XTvk6XeOnMcpUNeGy56qGhcnPSTtwdJUbM5+PPOfcOJq5gJx9TuPqBDg8Iwxfog5ImuG06srE0Q== +"@mdn/rari@^0.0.21": + version "0.0.21" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.21.tgz#d17304f1c1064cc5917c84361ea56ded391fd095" + integrity sha512-J2Qtr4XbVCeZ+7aVCPv4/AN50U8/vD/1nM0YXdkvh5Pv8QtCQcygC08nKsYJzvmoOc9MVe85DkgancarXS439A== dependencies: extract-zip "^2.0.1" https-proxy-agent "^7.0.2" From cf799bdea5471e881f5cd2757d03aaa945b14481 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Mon, 18 Nov 2024 22:01:00 +0100 Subject: [PATCH 17/39] commit de --- .github/workflows/stage-build.yml | 7 +++++++ .github/workflows/test-build.yml | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/.github/workflows/stage-build.yml b/.github/workflows/stage-build.yml index b2523980f9ad..581cf687dabc 100644 --- a/.github/workflows/stage-build.yml +++ b/.github/workflows/stage-build.yml @@ -151,6 +151,13 @@ jobs: mv mdn/translated-content-de/files/de mdn/translated-content/files/ rm -rf mdn/translated-content-de + - name: Clean and commit de + if: ${{ ! vars.SKIP_BUILD || ! vars.SKIP_FUNCTION }} + working-directory: mdn/translated-content + run: | + git add files/de + git -c user.name='MDN' -c user.email='mdn-dev@mozilla.com' commit -m 'de' + - uses: actions/checkout@v4 if: ${{ ! vars.SKIP_BUILD }} with: diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index d6ace64e42a3..9af5c983a2db 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -85,6 +85,13 @@ jobs: mv mdn/translated-content-de/files/de mdn/translated-content/files/ rm -rf mdn/translated-content-de + - name: Clean and commit de + if: ${{ ! vars.SKIP_BUILD || ! vars.SKIP_FUNCTION }} + working-directory: mdn/translated-content + run: | + git add files/de + git -c user.name='MDN' -c user.email='mdn-dev@mozilla.com' commit -m 'de' + - uses: actions/checkout@v4 if: ${{ ! vars.SKIP_BUILD }} with: From 410cecec9f8358bedbf51eb53fe01a3f3529a54a Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Tue, 19 Nov 2024 10:09:31 +0100 Subject: [PATCH 18/39] comment --- .github/workflows/stage-build.yml | 3 ++- .github/workflows/test-build.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/stage-build.yml b/.github/workflows/stage-build.yml index 581cf687dabc..4387d73a5798 100644 --- a/.github/workflows/stage-build.yml +++ b/.github/workflows/stage-build.yml @@ -175,7 +175,8 @@ jobs: if: ${{ ! vars.SKIP_BUILD }} run: yarn --frozen-lockfile env: - # https://github.com/microsoft/vscode-ripgrep#github-api-limit-note + # Use a GITHUB_TOKEN to bypass rate limiting for ripgrep and rari. + # See https://github.com/microsoft/vscode-ripgrep#github-api-limit-note GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Install Python diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 9af5c983a2db..708d336d630d 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -109,7 +109,8 @@ jobs: if: ${{ ! vars.SKIP_BUILD }} run: yarn --frozen-lockfile env: - # https://github.com/microsoft/vscode-ripgrep#github-api-limit-note + # Use a GITHUB_TOKEN to bypass rate limiting for ripgrep and rari. + # See https://github.com/microsoft/vscode-ripgrep#github-api-limit-note GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Print information about build From 37d908606ec8a7cf8827afed795417b19fcf2323 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Tue, 19 Nov 2024 10:19:14 +0100 Subject: [PATCH 19/39] fix rari-server --- package.json | 2 +- server/cli.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 8fdf726e9837..67b96a464ee9 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "start:client": "cd client && cross-env NODE_ENV=development BABEL_ENV=development PORT=3000 node scripts/start.js", "start:rari": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && cross-env RARI=true nf -j Procfile.rari start", "start:rari-external": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && cross-env RARI=true nf -j Procfile.start start", - "start:rari-server": "node-dev --experimental-loader ts-node/esm server/cli.ts", + "start:rari-server": "cross-env NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node server/cli.ts", "start:server": "node-dev --experimental-loader ts-node/esm server/index.ts", "start:static-server": "cross-env NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node server/static.ts", "stylelint": "stylelint \"**/*.scss\"", diff --git a/server/cli.ts b/server/cli.ts index 500774461add..18e14c4df563 100644 --- a/server/cli.ts +++ b/server/cli.ts @@ -9,6 +9,7 @@ const { commands, result } = concurrently( name: "server", env: { NODE_OPTIONS: "--no-warnings=ExperimentalWarning --loader ts-node/esm", + RARI: true, }, prefixColor: "red", }, From e4fa1e080d3efed24d1683f4025282a558c90caf Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Tue, 19 Nov 2024 10:36:58 +0100 Subject: [PATCH 20/39] robots --- .github/workflows/stage-build.yml | 1 + .github/workflows/test-build.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/stage-build.yml b/.github/workflows/stage-build.yml index 4387d73a5798..6155e0456cac 100644 --- a/.github/workflows/stage-build.yml +++ b/.github/workflows/stage-build.yml @@ -307,6 +307,7 @@ jobs: yarn build:sw yarn build:client yarn build:ssr + yarn tool build-robots-txt yarn rari content sync-translated-content diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 708d336d630d..37c93ad3a07d 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -198,6 +198,7 @@ jobs: yarn build:sw yarn build:client yarn build:ssr + yarn tool build-robots-txt yarn rari content sync-translated-content From e09780356dbbc2eb01317908f4938e45466b9a6d Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Tue, 19 Nov 2024 11:13:29 +0100 Subject: [PATCH 21/39] switch if --- server/index.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server/index.ts b/server/index.ts index ef9e34234491..516eaaf4fa69 100644 --- a/server/index.ts +++ b/server/index.ts @@ -277,15 +277,15 @@ app.get("/_open", (req, res) => { res.status(200).send(`Tried to open ${spec} in ${process.env.EDITOR}`); }); -if (RARI) { +if (!RARI) { + app.use("/:locale/search-index.json", searchIndexRoute); +} else { app.use("/:locale/search-index.json", async (req, res) => { const { locale } = req.params; const json = await fetch_from_rari(`/${locale}/search-index.json`, res); res.setHeader("Access-Control-Allow-Origin", "*"); return res.json(json); }); -} else { - app.use("/:locale/search-index.json", searchIndexRoute); } app.get("/_flaws", flawsRoute); @@ -498,6 +498,7 @@ if (contentProxy) { } }); } + if (RARI) { app.get( [ From 5e97ddcbe0c441fbeeaab7134454b90890a5d077 Mon Sep 17 00:00:00 2001 From: Andi Pieper Date: Tue, 19 Nov 2024 12:45:17 +0100 Subject: [PATCH 22/39] fix missing summary field on search indexer --- deployer/src/deployer/search/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployer/src/deployer/search/__init__.py b/deployer/src/deployer/search/__init__.py index dfdb286dbe7b..972b7f7d2184 100644 --- a/deployer/src/deployer/search/__init__.py +++ b/deployer/src/deployer/search/__init__.py @@ -248,7 +248,7 @@ def to_search(file, _index=None): ) ), popularity=doc["popularity"], - summary=doc["summary"], + summary=doc.get("summary", ""), # Note! We're always lowercasing the 'slug'. This way we can search on it, # still as a `keyword` index, but filtering by prefix. # E.g. in kuma; ?slug_prefix=weB/Css From b953ac6cceb23d1cab8a05a7bcba01f988ac9265 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Tue, 19 Nov 2024 14:47:43 +0100 Subject: [PATCH 23/39] fix for windows --- server/filename.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/filename.ts b/server/filename.ts index 4b5b7b947877..801d44cd366f 100644 --- a/server/filename.ts +++ b/server/filename.ts @@ -1,3 +1,2 @@ -export const filename = import.meta - .resolve("./index.ts") - .replace(/^file:\/\//, ""); +import { fileURLToPath } from "node:url"; +export const filename = fileURLToPath(import.meta.resolve("./index.ts")); From 154b38e26eff2d2522653ef93b5d2f58dab478e0 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Tue, 19 Nov 2024 15:46:58 +0100 Subject: [PATCH 24/39] improve windows support --- README.md | 8 ++++++++ package.json | 24 ++++++++++++------------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index fab120f41c62..248cb0c20aaa 100644 --- a/README.md +++ b/README.md @@ -269,6 +269,14 @@ this, you can pick any unused port (e.g., 6000) and run the following: echo SERVER_PORT=6000 >> .env +### Problems running with rari on Windows + +Download and install: + +Microsoft Visual C++ Redistributable for Visual Studio 2019 ( +[x86](https://aka.ms/vs/16/release/VC_redist.x86.exe), +[ARM64](https://aka.ms/vs/16/release/VC_redist.arm64.exe) ) + ### Yarn install errors If you get errors while installing dependencies via yarn on a Mac, you may need diff --git a/package.json b/package.json index 67b96a464ee9..fa7f461d3b4d 100644 --- a/package.json +++ b/package.json @@ -15,39 +15,39 @@ "yari-tool": "tool/cli.js" }, "scripts": { - "ai-help-macros": "cross-env NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node scripts/ai-help-macros.ts", + "ai-help-macros": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node scripts/ai-help-macros.ts", "analyze": "(test -f client/build/stats.json || cross-env ANALYZE_BUNDLE=true yarn build:client) && webpack-bundle-analyzer client/build/stats.json", - "build": "cross-env NODE_ENV=production NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node build/cli.ts", - "build:blog": "cross-env NODE_ENV=production NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node build/build-blog.ts", + "build": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node build/cli.ts", + "build:blog": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node build/build-blog.ts", "build:client": "cd client && cross-env NODE_ENV=production BABEL_ENV=production node scripts/build.js", - "build:curriculum": "cross-env NODE_ENV=production NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node build/build-curriculum.ts", + "build:curriculum": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node build/build-curriculum.ts", "build:dist": "tsc -p tsconfig.dist.json", - "build:docs": "cross-env NODE_ENV=production NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node build/cli.ts -n", + "build:docs": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node build/cli.ts -n", "build:glean": "cd client && cross-env VIRTUAL_ENV=venv glean translate src/telemetry/metrics.yaml src/telemetry/pings.yaml -f typescript -o src/telemetry/generated", "build:prepare": "yarn build:client && yarn build:ssr && yarn tool popularities && yarn tool spas && yarn tool gather-git-history && yarn tool build-robots-txt", - "build:ssr": "cross-env NODE_ENV=production NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node ssr/prepare.ts && webpack --mode=production --config=ssr/webpack.config.js", + "build:ssr": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node ssr/prepare.ts && webpack --mode=production --config=ssr/webpack.config.js", "build:sw": "cd client/pwa && yarn && yarn build:prod", "build:sw-dev": "cd client/pwa && yarn && yarn build", "check:tsc": "find . -name 'tsconfig.json' ! -wholename '**/node_modules/**' -print0 | xargs -n1 -P 2 -0 sh -c 'cd `dirname $0` && echo \"🔄 $(pwd)\" && npx tsc --noEmit && echo \"☑️ $(pwd)\" || exit 255'", "dev": "yarn build:prepare && nf -j Procfile.dev start", "eslint": "eslint .", - "filecheck": "cross-env NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node filecheck/cli.ts", + "filecheck": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node filecheck/cli.ts", "install:all": "find . -mindepth 2 -name 'yarn.lock' ! -wholename '**/node_modules/**' -print0 | xargs -n1 -0 sh -cx 'yarn --cwd $(dirname $0) install'", "install:all:npm": "find . -mindepth 2 -name 'package-lock.json' ! -wholename '**/node_modules/**' -print0 | xargs -n1 -0 sh -cx 'npm --prefix $(dirname $0) install'", "jest": "node --experimental-vm-modules --expose-gc ./node_modules/.bin/jest --logHeapUsage", - "m2h": "cross-env NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node markdown/m2h/cli.ts", + "m2h": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node markdown/m2h/cli.ts", "prepack": "yarn render:html && yarn build:dist", "prepare": "(husky || true) && yarn install:all && yarn install:all:npm", "prettier-check": "prettier --check .", "prettier-format": "prettier --write .", - "render:html": "cross-env NODE_ENV=production NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node build/ssr-cli.ts", + "render:html": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node build/ssr-cli.ts", "start": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && (test -f popularities.json || yarn tool popularities) && (test -d client/build/en-us/_spas || yarn tool spas) && (test -d client/build/en-us/_spas/404.html || yarn render:html -s) && nf -j Procfile.start start", "start:client": "cd client && cross-env NODE_ENV=development BABEL_ENV=development PORT=3000 node scripts/start.js", "start:rari": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && cross-env RARI=true nf -j Procfile.rari start", "start:rari-external": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && cross-env RARI=true nf -j Procfile.start start", - "start:rari-server": "cross-env NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node server/cli.ts", + "start:rari-server": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node server/cli.ts", "start:server": "node-dev --experimental-loader ts-node/esm server/index.ts", - "start:static-server": "cross-env NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node server/static.ts", + "start:static-server": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node server/static.ts", "stylelint": "stylelint \"**/*.scss\"", "test": "yarn prettier-check && yarn test:client && yarn test:kumascript && yarn test:libs && yarn test:content && yarn test:testing", "test:client": "cd client && tsc --noEmit && cross-env NODE_ENV=test BABEL_ENV=test node scripts/test.js --env=jsdom", @@ -58,7 +58,7 @@ "test:libs": "yarn jest --rootDir libs --env=node", "test:prepare": "yarn build:prepare && yarn build:docs && yarn render:html && yarn start:static-server", "test:testing": "yarn jest --rootDir testing", - "tool": "cross-env NODE_OPTIONS='--no-warnings=ExperimentalWarning --loader ts-node/esm' node ./tool/cli.ts", + "tool": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node ./tool/cli.ts", "watch:ssr": "webpack --mode=production --watch --config=ssr/webpack.config.js" }, "resolutions": { From d6b0c668f05d4fb59a31eb781f25069b463348f6 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Thu, 21 Nov 2024 23:12:55 +0100 Subject: [PATCH 25/39] update rari --- package.json | 2 +- yarn.lock | 62 ++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index fa7f461d3b4d..eb38ae6df66d 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", "@mdn/browser-compat-data": "^5.6.16", - "@mdn/rari": "^0.0.21", + "@mdn/rari": "^0.0.22", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.38.0", "@stripe/stripe-js": "^4.10.0", diff --git a/yarn.lock b/yarn.lock index 2044c07a4c21..73c190617b8d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,15 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" +"@apidevtools/json-schema-ref-parser@^11.5.5": + version "11.7.2" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.7.2.tgz#cdf3e0aded21492364a70e193b45b7cf4177f031" + integrity sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA== + dependencies: + "@jsdevtools/ono" "^7.1.3" + "@types/json-schema" "^7.0.15" + js-yaml "^4.1.0" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.0.tgz#9374b5cd068d128dac0b94ff482594273b1c2815" @@ -2165,6 +2174,11 @@ jsbi "^4.3.0" tslib "^2.4.1" +"@jsdevtools/ono@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + "@jsonjoy.com/base64@^1.1.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" @@ -2273,13 +2287,14 @@ resolved "https://registry.yarnpkg.com/@mdn/minimalist/-/minimalist-2.0.4.tgz#6488ab0cb65b059446dcd9bf542246b81febe241" integrity sha512-jocePw/fsGcBxO67D+iWQLZ0TQjwNVonaME2BFN98QIm/e1kTY1/k2s4fOqH5MMa3QYURxa098bI4sChn6s/7Q== -"@mdn/rari@^0.0.21": - version "0.0.21" - resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.21.tgz#d17304f1c1064cc5917c84361ea56ded391fd095" - integrity sha512-J2Qtr4XbVCeZ+7aVCPv4/AN50U8/vD/1nM0YXdkvh5Pv8QtCQcygC08nKsYJzvmoOc9MVe85DkgancarXS439A== +"@mdn/rari@^0.0.22": + version "0.0.22" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.22.tgz#ccccadfa06f6e0ba1955187311d03578324867d4" + integrity sha512-akSzldMiBwDjUi3VY6GPDQDWXEULvutVuTMqzp/spAqswmUDAs1b90Ti0ker+X7T0gJC6w4JencX+KPHcz27uA== dependencies: extract-zip "^2.0.1" https-proxy-agent "^7.0.2" + json-schema-to-typescript "^15.0.0" proxy-from-env "^1.1.0" tar "^7.4.3" @@ -3410,7 +3425,7 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -3425,6 +3440,11 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== +"@types/lodash@^4.17.7": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.13.tgz#786e2d67cfd95e32862143abe7463a7f90c300eb" + integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg== + "@types/mdast@^3.0.0": version "3.0.15" resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" @@ -9732,6 +9752,21 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-schema-to-typescript@^15.0.0: + version "15.0.3" + resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-15.0.3.tgz#a58bc3e00e4480e76a8ee79471c01233494913be" + integrity sha512-iOKdzTUWEVM4nlxpFudFsWyUiu/Jakkga4OZPEt7CGoSEsAsUgdOZqR6pcgx2STBek9Gm4hcarJpXSzIvZ/hKA== + dependencies: + "@apidevtools/json-schema-ref-parser" "^11.5.5" + "@types/json-schema" "^7.0.15" + "@types/lodash" "^4.17.7" + is-glob "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + minimist "^1.2.8" + prettier "^3.2.5" + tinyglobby "^0.2.9" + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -10872,7 +10907,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -11711,6 +11746,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + pidtree@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" @@ -12443,7 +12483,7 @@ prettier-plugin-packagejson@^2.5.3: sort-package-json "2.10.1" synckit "0.9.2" -prettier@^3.3.3: +prettier@^3.2.5, prettier@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== @@ -14509,6 +14549,14 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== +tinyglobby@^0.2.9: + version "0.2.10" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" + integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + dependencies: + fdir "^6.4.2" + picomatch "^4.0.2" + tldts-core@^6.1.47: version "6.1.47" resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.47.tgz#bb6deb97abb6ef04243af60968d2d0055a65cbd7" From b3b1d9fb5a47ed7375119f7331f41d57a8248a8b Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Fri, 22 Nov 2024 21:01:42 +0100 Subject: [PATCH 26/39] config for spas --- copy/config.json | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 copy/config.json diff --git a/copy/config.json b/copy/config.json new file mode 100644 index 000000000000..3de6f570a471 --- /dev/null +++ b/copy/config.json @@ -0,0 +1,41 @@ +{ + "pages": { + "community": { + "titleSuffix": "Contribute to MDN" + }, + "plus": { + "slugPrefix": "plus/docs", + "titleSuffix": "MDN Plus" + }, + "observatory": { + "slugPrefix": "observatory/docs", + "titleSuffix": "HTTP Observatory" + } + }, + "spas": { + "about": { + "slug": "about", + "pageTitle": "About MDN", + "pageDescription": null, + "trailingSlash": false, + "enUsOnly": false, + "data": { "onlyFollow": false, "noIndexing": false } + }, + "advertising": { + "slug": "advertising", + "pageTitle": "Advertise with us", + "pageDescription": null, + "trailingSlash": false, + "enUsOnly": false, + "data": { "onlyFollow": false, "noIndexing": false } + }, + "plus": { + "slug": "plus", + "pageTitle": "MDN Plus", + "pageDescription": null, + "trailingSlash": false, + "enUsOnly": false, + "data": { "onlyFollow": false, "noIndexing": false } + } + } +} From f24f3bc6d83a4f2b0336a96f379aeef724087a09 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Mon, 25 Nov 2024 13:02:32 +0100 Subject: [PATCH 27/39] update rari --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2f39d8011f94..1841216d5f99 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", "@mdn/browser-compat-data": "^5.6.17", - "@mdn/rari": "^0.0.22", + "@mdn/rari": "^0.0.23", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.40.0", "@stripe/stripe-js": "^4.10.0", diff --git a/yarn.lock b/yarn.lock index 7f764bca9b93..e3e1a3196f34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2208,10 +2208,10 @@ resolved "https://registry.yarnpkg.com/@mdn/minimalist/-/minimalist-2.0.4.tgz#6488ab0cb65b059446dcd9bf542246b81febe241" integrity sha512-jocePw/fsGcBxO67D+iWQLZ0TQjwNVonaME2BFN98QIm/e1kTY1/k2s4fOqH5MMa3QYURxa098bI4sChn6s/7Q== -"@mdn/rari@^0.0.22": - version "0.0.22" - resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.22.tgz#ccccadfa06f6e0ba1955187311d03578324867d4" - integrity sha512-akSzldMiBwDjUi3VY6GPDQDWXEULvutVuTMqzp/spAqswmUDAs1b90Ti0ker+X7T0gJC6w4JencX+KPHcz27uA== +"@mdn/rari@^0.0.23": + version "0.0.23" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.23.tgz#53ac12e7d6edc8ef366cfe96b720d13294ae4962" + integrity sha512-0imXeMayMkYtR0kwsXOr/9082MGgo4/HBzVCd4QqL2Ts0XZkjIible6ZokbsZ6VjM2t/CFnUk6Vc39eoF2bKGg== dependencies: extract-zip "^2.0.1" https-proxy-agent "^7.0.2" From 042267aa768efe47085d6dd044f684883f5b60ef Mon Sep 17 00:00:00 2001 From: Andi Pieper Date: Mon, 25 Nov 2024 17:50:45 +0100 Subject: [PATCH 28/39] update popularities format in yari to match rari implementation --- tool/popularities.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tool/popularities.ts b/tool/popularities.ts index 87a010ac7514..2b020ba4defb 100644 --- a/tool/popularities.ts +++ b/tool/popularities.ts @@ -69,7 +69,14 @@ export async function runMakePopularitiesFile({ pageviews.slice(0, maxUris).forEach(([uri, popularity]) => { popularities[uri] = parseFloat(popularity.toFixed(5)); }); - fs.writeFileSync(outfile, JSON.stringify(popularities, null, 2)); + fs.writeFileSync( + outfile, + JSON.stringify( + { popularities: popularities, date: new Date().toISOString() }, + null, + 2 + ) + ); resolve({ rowCount, popularities, pageviews }); }); }); From 19a961f21389be3d44edffaa8fa4e036b730f49f Mon Sep 17 00:00:00 2001 From: Andi Pieper Date: Mon, 25 Nov 2024 18:00:23 +0100 Subject: [PATCH 29/39] update bcd dependency --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1841216d5f99..57bed7fa3866 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "@inquirer/prompts": "^7.1.0", "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", - "@mdn/browser-compat-data": "^5.6.17", + "@mdn/browser-compat-data": "^5.6.18", "@mdn/rari": "^0.0.23", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.40.0", From dd480b0d734885c7cdaf815089cfac2ae00b6ac7 Mon Sep 17 00:00:00 2001 From: Andi Pieper Date: Mon, 25 Nov 2024 18:00:57 +0100 Subject: [PATCH 30/39] update bcd dependency --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index e3e1a3196f34..9eef116d2204 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2193,10 +2193,10 @@ resolved "https://registry.yarnpkg.com/@mdn/bcd-utils-api/-/bcd-utils-api-0.0.7.tgz#555e80c33df520df068943e6b18ebc07f0e24d19" integrity sha512-IHkkypEjlIkBkx4mJ2//Xbzog9M/Lzne1Sl8db2cIHJ/5pe3NCqSLwSchmqzcUN+/WJr/U+V3tNAbWunk2xZcA== -"@mdn/browser-compat-data@^5.6.17": - version "5.6.17" - resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-5.6.17.tgz#e1e8ee6bf1f444e3a22185cfdff70fee38e38976" - integrity sha512-Cik21uEp29W9YcRiWHkZM1SEHIinxLIb6EzmPIj7Hc8qPoqMW4oJ5bpDBNl+CkEjvtblKrp94b1cTa4opaNQDA== +"@mdn/browser-compat-data@^5.6.18": + version "5.6.18" + resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-5.6.18.tgz#62bfd9f7a646e54e68b3739cb34bcf508e699410" + integrity sha512-WCQcQGyydquw7NXPL2NopMCgmUvIQDG7KM/IGR4PMJSDH5SHZKXUDEF6rdpGWj0MtcjQseOCl/hjzYzj0fMMeA== "@mdn/dinocons@^0.5.5": version "0.5.5" From 47ad5194c1eb893f626669fcf1a043d3e35e1ccd Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Mon, 25 Nov 2024 20:47:59 +0100 Subject: [PATCH 31/39] update popularities usage --- content/popularities.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/popularities.ts b/content/popularities.ts index 158dceece619..c19d11dba115 100644 --- a/content/popularities.ts +++ b/content/popularities.ts @@ -7,7 +7,11 @@ export function getPopularities() { if (!popularities.size) { // This is the file that's *not* checked into git. const filePath = new URL("../popularities.json", import.meta.url); - Object.entries(JSON.parse(fs.readFileSync(filePath, "utf-8"))).forEach( + const json = JSON.parse(fs.readFileSync(filePath, "utf-8")); + if (!("popularities" in json)) { + throw Error("run: yarn tool popularities --refresh"); + } + Object.entries(json.popularities).forEach( ([url, value]: [string, unknown]) => { popularities.set(url, value as number); } From 94863aab68097717f19e6033050ef607794e79f6 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Mon, 25 Nov 2024 20:49:51 +0100 Subject: [PATCH 32/39] update rari and fix generic content --- .github/workflows/stage-build.yml | 2 +- .github/workflows/test-build.yml | 2 +- package.json | 2 +- yarn.lock | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/stage-build.yml b/.github/workflows/stage-build.yml index 6155e0456cac..8b2b84b3d714 100644 --- a/.github/workflows/stage-build.yml +++ b/.github/workflows/stage-build.yml @@ -224,7 +224,7 @@ jobs: # rari BUILD_OUT_ROOT: "client/build" - GENERIC_PAGES_ROOT: "copy" + GENERIC_CONTENT_ROOT: "copy" LIVE_SAMPLES_BASE_URL: https://live.mdnyalp.dev INTERACTIVE_EXAMPLES_BASE_URL: https://interactive-examples.mdn.allizom.net ADDITIONAL_LOCALES_FOR_GENERICS_AND_SPAS: de diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 37c93ad3a07d..e7d275fffcad 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -134,7 +134,7 @@ jobs: # rari BUILD_OUT_ROOT: "client/build" - GENERIC_PAGES_ROOT: "copy" + GENERIC_CONTENT_ROOT: "copy" LIVE_SAMPLES_BASE_URL: https://live.test.mdnyalp.dev INTERACTIVE_EXAMPLES_BASE_URL: https://interactive-examples.mdn.allizom.net ADDITIONAL_LOCALES_FOR_GENERICS_AND_SPAS: de diff --git a/package.json b/package.json index 57bed7fa3866..07cd0803c1b7 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", "@mdn/browser-compat-data": "^5.6.18", - "@mdn/rari": "^0.0.23", + "@mdn/rari": "^0.0.24", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.40.0", "@stripe/stripe-js": "^4.10.0", diff --git a/yarn.lock b/yarn.lock index 9eef116d2204..f1ef3c628943 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2208,10 +2208,10 @@ resolved "https://registry.yarnpkg.com/@mdn/minimalist/-/minimalist-2.0.4.tgz#6488ab0cb65b059446dcd9bf542246b81febe241" integrity sha512-jocePw/fsGcBxO67D+iWQLZ0TQjwNVonaME2BFN98QIm/e1kTY1/k2s4fOqH5MMa3QYURxa098bI4sChn6s/7Q== -"@mdn/rari@^0.0.23": - version "0.0.23" - resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.23.tgz#53ac12e7d6edc8ef366cfe96b720d13294ae4962" - integrity sha512-0imXeMayMkYtR0kwsXOr/9082MGgo4/HBzVCd4QqL2Ts0XZkjIible6ZokbsZ6VjM2t/CFnUk6Vc39eoF2bKGg== +"@mdn/rari@^0.0.24": + version "0.0.24" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.24.tgz#174b7bb36efea1c579be7b4cdf83c7b3ca5cfa00" + integrity sha512-eusZzOuM0xZUkLGtMU3BqKJqqlHHYndKzO7A20KcYeK02sTkLYYdRx/2i/QRSlM96orrYMDOIYOsdhnxYCzZ3A== dependencies: extract-zip "^2.0.1" https-proxy-agent "^7.0.2" From 42f705559cdb45cd322e33dde953f25b1937ec13 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Tue, 26 Nov 2024 11:25:01 +0100 Subject: [PATCH 33/39] fix package --- server/cli.ts | 1 - server/filename.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/server/cli.ts b/server/cli.ts index 18e14c4df563..8d0ac2ced935 100644 --- a/server/cli.ts +++ b/server/cli.ts @@ -8,7 +8,6 @@ const { commands, result } = concurrently( command: `node ${filename}`, name: "server", env: { - NODE_OPTIONS: "--no-warnings=ExperimentalWarning --loader ts-node/esm", RARI: true, }, prefixColor: "red", diff --git a/server/filename.ts b/server/filename.ts index 801d44cd366f..abc56988399e 100644 --- a/server/filename.ts +++ b/server/filename.ts @@ -1,2 +1,2 @@ import { fileURLToPath } from "node:url"; -export const filename = fileURLToPath(import.meta.resolve("./index.ts")); +export const filename = fileURLToPath(import.meta.resolve("./index.js")); From 4e73f09c8f25032ed8d1b3ac88e368d2e8623926 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Tue, 26 Nov 2024 11:34:17 +0100 Subject: [PATCH 34/39] shebang --- server/cli.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/cli.ts b/server/cli.ts index 8d0ac2ced935..799e0b04d1ab 100644 --- a/server/cli.ts +++ b/server/cli.ts @@ -1,3 +1,4 @@ +#!/usr/bin/env node import { concurrently } from "concurrently"; import { rariBin } from "@mdn/rari"; import { filename } from "./filename.js"; From 5ee5b49c97e98cd042a62c662159d4d7fefa5f84 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Wed, 27 Nov 2024 14:58:21 +0100 Subject: [PATCH 35/39] update rari --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 81ffe31d87b5..ff9e10b7b9f0 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@lit/react": "^1.0.6", "@mdn/bcd-utils-api": "^0.0.7", "@mdn/browser-compat-data": "^5.6.19", - "@mdn/rari": "^0.0.24", + "@mdn/rari": "^0.0.25", "@mozilla/glean": "5.0.3", "@sentry/node": "^8.40.0", "@stripe/stripe-js": "^4.10.0", diff --git a/yarn.lock b/yarn.lock index b7fc3dd3102a..160460794e8f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2208,10 +2208,10 @@ resolved "https://registry.yarnpkg.com/@mdn/minimalist/-/minimalist-2.0.4.tgz#6488ab0cb65b059446dcd9bf542246b81febe241" integrity sha512-jocePw/fsGcBxO67D+iWQLZ0TQjwNVonaME2BFN98QIm/e1kTY1/k2s4fOqH5MMa3QYURxa098bI4sChn6s/7Q== -"@mdn/rari@^0.0.24": - version "0.0.24" - resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.24.tgz#174b7bb36efea1c579be7b4cdf83c7b3ca5cfa00" - integrity sha512-eusZzOuM0xZUkLGtMU3BqKJqqlHHYndKzO7A20KcYeK02sTkLYYdRx/2i/QRSlM96orrYMDOIYOsdhnxYCzZ3A== +"@mdn/rari@^0.0.25": + version "0.0.25" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.25.tgz#719b6a72eb8239dca48b6bf090f1f38490380be7" + integrity sha512-5r1P9CAGLC93O6hZgc2fdO0Z4B/uI8PbAworRRlMthPlXUjyiyfIdzijwGCkr8JN5H6950oCLfjwJAEd4NGUPQ== dependencies: extract-zip "^2.0.1" https-proxy-agent "^7.0.2" @@ -12408,7 +12408,7 @@ prettier-plugin-packagejson@^2.5.6: sort-package-json "2.12.0" synckit "0.9.2" -prettier@^3.4.1: +prettier@^3.2.5, prettier@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.1.tgz#e211d451d6452db0a291672ca9154bc8c2579f7b" integrity sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg== From 237bd95cd526e9a72ea176e9b09015f3f5615103 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Wed, 27 Nov 2024 15:47:52 +0100 Subject: [PATCH 36/39] clean up --- server/index.ts | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/server/index.ts b/server/index.ts index 47ded6338925..173438455462 100644 --- a/server/index.ts +++ b/server/index.ts @@ -57,8 +57,7 @@ import { import { findCurriculumPageBySlug } from "../build/curriculum.js"; import { handleRunner } from "../libs/play/index.js"; -// eslint-disable-next-line @typescript-eslint/no-unused-vars -async function fetch_from_rari(path: string, res = null) { +async function fetch_from_rari(path: string) { const external_url = `${EXTERNAL_DEV_SERVER}${path}`; console.log(`using ${external_url}`); // eslint-disable-next-line n/no-unsupported-features/node-builtins @@ -130,9 +129,13 @@ async function send404(res: express.Response) { .status(404) .sendFile(path.join(STATIC_ROOT, "en-us", "_spas", "404.html")); } else { - const index = await fetch_from_rari("/en-US/404"); - res.header("Content-Security-Policy", CSP_VALUE); - return res.send(renderHTML(index)); + try { + const index = await fetch_from_rari("/en-US/404"); + res.header("Content-Security-Policy", CSP_VALUE); + return res.send(renderHTML(index)); + } catch (error) { + return res.status(500).json(JSON.stringify(error.toString())); + } } } @@ -279,9 +282,13 @@ if (!RARI) { } else { app.use("/:locale/search-index.json", async (req, res) => { const { locale } = req.params; - const json = await fetch_from_rari(`/${locale}/search-index.json`, res); - res.setHeader("Access-Control-Allow-Origin", "*"); - return res.json(json); + try { + const json = await fetch_from_rari(`/${locale}/search-index.json`); + res.setHeader("Access-Control-Allow-Origin", "*"); + return res.json(json); + } catch (error) { + return res.status(500).json(JSON.stringify(error.toString())); + } }); } @@ -339,7 +346,7 @@ if (CURRICULUM_ROOT) { data = await findCurriculumPageBySlug(slug); } else { try { - data = await fetch_from_rari(req.path, res); + data = await fetch_from_rari(req.path); } catch (error) { return res.status(500).json(JSON.stringify(error.toString())); } @@ -367,7 +374,7 @@ if (BLOG_ROOT) { return res.json({ hyData: { posts } }); } else { try { - const index = await fetch_from_rari(req.path, res); + const index = await fetch_from_rari(req.path); return res.json(index); } catch (error) { return res.status(500).json(JSON.stringify(error.toString())); @@ -397,7 +404,7 @@ if (BLOG_ROOT) { return res.json(data); } else { try { - const index = await fetch_from_rari(req.path, res); + const index = await fetch_from_rari(req.path); return res.json(index); } catch (error) { return res.status(500).json(JSON.stringify(error.toString())); @@ -504,7 +511,7 @@ if (RARI) { ], async (req, res) => { try { - const index = await fetch_from_rari(req.path, res); + const index = await fetch_from_rari(req.path); if (req.path.endsWith(".json")) { return res.json(index); } From 0ba3634eab9d4d1b67353c36443239de12c1bac8 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Wed, 27 Nov 2024 16:56:40 +0100 Subject: [PATCH 37/39] implicit popularities --- .github/workflows/stage-build.yml | 3 +-- .github/workflows/test-build.yml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/stage-build.yml b/.github/workflows/stage-build.yml index 8b2b84b3d714..e46f50d29432 100644 --- a/.github/workflows/stage-build.yml +++ b/.github/workflows/stage-build.yml @@ -310,9 +310,8 @@ jobs: yarn tool build-robots-txt yarn rari content sync-translated-content - - yarn rari popularities yarn rari git-history + yarn rari build --issues client/build/issues.json --templ-stats # SSR all pages diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index e7d275fffcad..21fe49f08a9f 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -201,9 +201,8 @@ jobs: yarn tool build-robots-txt yarn rari content sync-translated-content - - yarn rari popularities yarn rari git-history + yarn rari build --issues client/build/issues.json --templ-stats # SSR all pages From 84cfec5d7a39856a34385635e9ee534ab8675b18 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Thu, 28 Nov 2024 09:23:45 +0100 Subject: [PATCH 38/39] add community route --- server/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/index.ts b/server/index.ts index 173438455462..f9d94e6282a3 100644 --- a/server/index.ts +++ b/server/index.ts @@ -503,6 +503,8 @@ if (contentProxy) { if (RARI) { app.get( [ + "/en-US/about", + "/en-US/about/index.json", "/en-US/community", "/en-US/community/index.json", "/en-US/plus/docs/*", From 7ed465338cb8c4fa3030133eaea2936ab1eb6b3a Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Thu, 28 Nov 2024 15:34:31 +0100 Subject: [PATCH 39/39] fix config.json --- copy/config.json | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/copy/config.json b/copy/config.json index 3de6f570a471..6438b35bbbc1 100644 --- a/copy/config.json +++ b/copy/config.json @@ -15,27 +15,15 @@ "spas": { "about": { "slug": "about", - "pageTitle": "About MDN", - "pageDescription": null, - "trailingSlash": false, - "enUsOnly": false, - "data": { "onlyFollow": false, "noIndexing": false } + "pageTitle": "About MDN" }, "advertising": { "slug": "advertising", - "pageTitle": "Advertise with us", - "pageDescription": null, - "trailingSlash": false, - "enUsOnly": false, - "data": { "onlyFollow": false, "noIndexing": false } + "pageTitle": "Advertise with us" }, "plus": { "slug": "plus", - "pageTitle": "MDN Plus", - "pageDescription": null, - "trailingSlash": false, - "enUsOnly": false, - "data": { "onlyFollow": false, "noIndexing": false } + "pageTitle": "MDN Plus" } } }