From 0c63dbd27e752085c8fd9ebb6806cfb5a4de1a2b Mon Sep 17 00:00:00 2001 From: Devin Lai Date: Mon, 15 Jun 2026 18:30:25 +0800 Subject: [PATCH] website: fix build failure when popular issues data is absent The GitHubIssues component imports static/data/popular-issues.json at build time. That file is generated by `npm run fetch-popular-issues` (which needs a GitHub token) and is gitignored, so on a fresh checkout `npm run build` and `npm start` fail with "Cannot find module '@site/static/data/popular-issues.json'". Add a prestart/prebuild step that writes an empty fallback when the file is missing, so the documented local workflow works out of the box. Existing data is never overwritten, leaving CI behavior unchanged. --- website/package.json | 2 ++ website/scripts/ensure-popular-issues.mjs | 32 +++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 website/scripts/ensure-popular-issues.mjs diff --git a/website/package.json b/website/package.json index a05caa50..493f96c9 100644 --- a/website/package.json +++ b/website/package.json @@ -4,7 +4,9 @@ "private": true, "scripts": { "docusaurus": "docusaurus", + "prestart": "node scripts/ensure-popular-issues.mjs", "start": "docusaurus start", + "prebuild": "node scripts/ensure-popular-issues.mjs", "build": "docusaurus build", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", diff --git a/website/scripts/ensure-popular-issues.mjs b/website/scripts/ensure-popular-issues.mjs new file mode 100644 index 00000000..f71f3bc3 --- /dev/null +++ b/website/scripts/ensure-popular-issues.mjs @@ -0,0 +1,32 @@ +// Copyright 2025 Enactic, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Ensure static/data/popular-issues.json exists. +// +// The GitHubIssues component imports this file at build time, so the bundle +// fails to compile when it is missing. The file is generated by +// `npm run fetch-popular-issues` (used in CI), but that requires a GitHub +// token, so it is not available on a fresh checkout. This writes an empty +// fallback when the file is absent, letting `start` and `build` run without +// it. Existing data is never overwritten. + +import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; +import { dirname } from 'node:path'; + +const target = 'static/data/popular-issues.json'; + +if (!existsSync(target)) { + mkdirSync(dirname(target), { recursive: true }); + writeFileSync(target, '[]\n'); +}