From 6f4875e227be923a5015f996ed16f10beda1adc7 Mon Sep 17 00:00:00 2001 From: Dimitrie Hoekstra Date: Wed, 12 Aug 2026 18:10:45 +0200 Subject: [PATCH 1/2] perf: cache the nuxt-og-image font download in build_website FlowFuse/website's own test.yml cached two directories under a github.run_id key, so every run wrote a fresh entry. Measured on website main, the entry is 2.5MB, restores in 1s, and 53 of them were live. Build the forge took 1359s with it against 1394s without, so the render directory was buying nothing. This keeps only the font download, keyed on the lockfile that pins the module, so an unchanged lockfile hits exactly and saves nothing back. --- .github/workflows/build_website.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/build_website.yml b/.github/workflows/build_website.yml index 8841b75..b0bdb48 100644 --- a/.github/workflows/build_website.yml +++ b/.github/workflows/build_website.yml @@ -119,6 +119,15 @@ jobs: - name: Install Dependencies run: npm install working-directory: 'website' + # nuxt-og-image fetches its satori font on first render, and that download is the only + # thing the og-image cache directory holds at any size. Keyed on the lockfile that + # pins the module, so an unchanged lockfile hits exactly and writes nothing back. + - name: Cache the nuxt-og-image font download + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + path: website/nuxt/node_modules/.cache/nuxt/.nuxt/cache/og-image + key: og-image-font-${{ runner.os }}-${{ hashFiles('website/package-lock.json') }} + restore-keys: og-image-font-${{ runner.os }}- - name: Run unit tests if: inputs.run_unit_tests run: npm test From 4a5735bd199e94a922a98799b59ed9e0293b52ed Mon Sep 17 00:00:00 2001 From: Dimitrie Hoekstra Date: Thu, 13 Aug 2026 10:18:24 +0200 Subject: [PATCH 2/2] fix: skip the link check when build_website processes images --- .github/workflows/build_website.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/build_website.yml b/.github/workflows/build_website.yml index b0bdb48..78e4d22 100644 --- a/.github/workflows/build_website.yml +++ b/.github/workflows/build_website.yml @@ -137,7 +137,14 @@ jobs: - name: Build the forge run: npm run ${{ inputs.deploy_preview && 'build:nuxt' || 'build:nuxt:skip-images' }} working-directory: 'website' + # A preview processes images, and Nuxt Image then points every at + # /.netlify/images, which Netlify only answers at runtime. That path is absent from the + # static tree hyperlink walks, so every image reads as a broken link. hyperlink 0.3.2 + # cannot be told to ignore a path, so the check runs on the builds that keep real file + # paths. The caller that previews is a documentation pull request, and + # FlowFuse/flowfuse checks its own documentation links in a separate job. - name: Check links + if: ${{ !inputs.deploy_preview }} uses: untitaker/hyperlink@9375bc4063712ad490d5eb3d54df0b6aade15e54 # 0.3.2 with: args: website/nuxt/dist/ --check-anchors --sources website/src