diff --git a/.github/workflows/links.yaml b/.github/workflows/links.yaml index af73c642ffb..c631a72cd7b 100644 --- a/.github/workflows/links.yaml +++ b/.github/workflows/links.yaml @@ -57,7 +57,7 @@ jobs: npm run -s _is:clean || { echo echo 'ERROR: generated files changed; regenerate locally and commit:' - echo ' .lycheecache -> npm run check:links' + echo ' link-cache.jsonc -> npm run fix:link-cache' echo ' package-lock, hugoautogen -> npm run update:docsy:pack' echo exit 1 diff --git a/.gitignore b/.gitignore index fc97599016c..3e24101d541 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ resources/ node_modules/ .hugo_build.lock packages/hugoautogen/hugo_packagemeta.json + +# Lychee link-check cache: derived from link-cache.jsonc by lychee-norm-cache +.lycheecache diff --git a/.lycheecache b/.lycheecache deleted file mode 100644 index e4d3794fa82..00000000000 --- a/.lycheecache +++ /dev/null @@ -1,89 +0,0 @@ -https://creativecommons.org/licenses/by/4.0,200,1782763743 -https://docsy.dev/,200,1782763743 -https://docsy.dev/docs/,200,1782763743 -https://docsy.dev/docs/best-practices/organizing-content/,200,1782763743 -https://example.docsy.dev/,200,1782763743 -https://example.docsy.dev/_print/,200,1782763744 -https://example.docsy.dev/_print/blog/,200,1782763745 -https://example.docsy.dev/_print/blog/news/,200,1782763745 -https://example.docsy.dev/_print/blog/releases/,200,1782763746 -https://example.docsy.dev/_print/community/,200,1782763746 -https://example.docsy.dev/_print/docs/,200,1782763745 -https://example.docsy.dev/_print/docs/getting-started/,200,1782763745 -https://example.docsy.dev/_print/docs/reference/,200,1782763745 -https://example.docsy.dev/_print/docs/tasks/,200,1782763745 -https://example.docsy.dev/_print/docs/tasks/ponycopters/,200,1782763745 -https://example.docsy.dev/_print/docs/tutorials/,200,1782763745 -https://example.docsy.dev/blog/,200,1782763743 -https://example.docsy.dev/blog/news/,200,1782763743 -https://example.docsy.dev/blog/releases/,200,1782763744 -https://example.docsy.dev/community/,200,1782763743 -https://example.docsy.dev/docs/,200,1782926753 -https://example.docsy.dev/docs/getting-started/,200,1782763743 -https://example.docsy.dev/docs/reference/,200,1782763744 -https://example.docsy.dev/docs/tasks/,200,1782763744 -https://example.docsy.dev/docs/tasks/ponycopters/,200,1782763744 -https://example.docsy.dev/docs/tutorials/,200,1782763743 -https://example.docsy.dev/fa/,200,1782763745 -https://example.docsy.dev/fa/_print/,200,1782763746 -https://example.docsy.dev/fa/_print/blog/,200,1782763746 -https://example.docsy.dev/fa/_print/blog/news/,200,1782763746 -https://example.docsy.dev/fa/_print/blog/releases/,200,1782763746 -https://example.docsy.dev/fa/_print/community/,200,1782763746 -https://example.docsy.dev/fa/_print/docs/,200,1782763746 -https://example.docsy.dev/fa/blog/,200,1782763746 -https://example.docsy.dev/fa/blog/news/,200,1782763746 -https://example.docsy.dev/fa/blog/releases/,200,1782763746 -https://example.docsy.dev/fa/community/,200,1782763746 -https://example.docsy.dev/fa/docs/,200,1782763746 -https://example.docsy.dev/no/,200,1782763743 -https://example.docsy.dev/no/_print/,200,1782763744 -https://example.docsy.dev/no/_print/docs/,200,1782763744 -https://example.docsy.dev/no/_print/docs/big-data/,200,1782763746 -https://example.docsy.dev/no/_print/docs/big-data/examples/,200,1782763745 -https://example.docsy.dev/no/_print/docs/big-data/tutorials/,200,1782763745 -https://example.docsy.dev/no/_print/docs/cloud-computing/,200,1782763744 -https://example.docsy.dev/no/_print/docs/cloud-computing/examples/,200,1782763745 -https://example.docsy.dev/no/_print/docs/cloud-computing/tutorials/,200,1782763746 -https://example.docsy.dev/no/_print/docs/content-management/,200,1782763746 -https://example.docsy.dev/no/_print/docs/content-management/tutorials/,200,1782763745 -https://example.docsy.dev/no/_print/docs/cross-platform/,200,1782763745 -https://example.docsy.dev/no/_print/docs/cross-platform/examples/,200,1782763745 -https://example.docsy.dev/no/_print/docs/cross-platform/tutorials/,200,1782763746 -https://example.docsy.dev/no/_print/docs/reference/,200,1782763746 -https://example.docsy.dev/no/_print/docs/reference/examples/,200,1782763745 -https://example.docsy.dev/no/docs/,200,1782763745 -https://example.docsy.dev/no/docs/big-data/,200,1782763744 -https://example.docsy.dev/no/docs/big-data/examples/,200,1782763744 -https://example.docsy.dev/no/docs/big-data/tutorials/,200,1782763744 -https://example.docsy.dev/no/docs/cloud-computing/,200,1782763744 -https://example.docsy.dev/no/docs/cloud-computing/examples/,200,1782763744 -https://example.docsy.dev/no/docs/cloud-computing/tutorials/,200,1782763744 -https://example.docsy.dev/no/docs/content-management/,200,1782763744 -https://example.docsy.dev/no/docs/content-management/tutorials/,200,1782763744 -https://example.docsy.dev/no/docs/cross-platform/,200,1782763743 -https://example.docsy.dev/no/docs/cross-platform/examples/,200,1782763744 -https://example.docsy.dev/no/docs/cross-platform/tutorials/,200,1782763744 -https://example.docsy.dev/no/docs/reference/,200,1782763744 -https://example.docsy.dev/no/docs/reference/examples/,200,1782763745 -https://github.com/,200,1782766677 -https://github.com/chalin,200,1782766677 -https://github.com/google/docsy,200,1782766676 -https://github.com/google/docsy-example,200,1782766676 -https://github.com/google/docsy-example/issues,200,1782766676 -https://github.com/google/docsy-example/pulls,200,1782766676 -https://github.com/google/docsy/releases/v0.16.0,200,1785357023 -https://github.com/google/docsy/releases/v0.17.0,200,1788122269 -https://github.com/google/docsy/tree/main/docsy.dev,200,1782766676 -https://github.com/kubeflow/website/blob/master/README.md,200,1782766676 -https://gohugo.io/,200,1782763743 -https://gohugo.io/documentation/,200,1782763743 -https://guides.github.com/activities/hello-world/,200,1782766676 -https://help.github.com/articles/about-pull-requests/,200,1782766676 -https://policies.google.com/privacy,200,1782763743 -https://swagger.io/tools/swagger-ui/,200,1782763743 -https://www.docsy.dev/docs/,200,1782763743 -https://www.docsy.dev/docs/content/adding-content/#adding-static-content,200,1782763743 -https://www.docsy.dev/docs/content/shortcodes/#swaggerui,200,1782763743 -https://www.netlify.com/,200,1782763743 -https://x.com/docsydocs,200,1782763743 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 44b35d6bd7a..1d71f08752f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -114,6 +114,19 @@ npm run local -- serve The `local` prefix runs the script against the sibling Docsy, and the server watches it, so theme edits hot-reload. +### Link checking + +For the link cache (the committed `link-cache.jsonc`, its fields, and the +refresh, prune, and seed recipes), see Docsy's [Link checking and the link +cache][]. What differs here: + +- The cache and `lychee.toml` are at the repo root, and CI runs the check in + `.github/workflows/links.yaml`. +- No refresh workflow: a lapsed seed keeps serving until you prune by hand. Run + `npm run link-cache -- -p 0` (drops only lapsed entries; `-p N` also drops the + N oldest without `expires`), then `npm run fix:link-cache` to re-verify those + URLs, and commit the cache. + [alternate dashboard]: https://app.netlify.com/sites/goldydocs/deploys [contribution guidelines]: https://main--docsydocs.netlify.app/docs/contributing/ @@ -121,6 +134,7 @@ watches it, so theme edits hot-reload. [deploys]: https://app.netlify.com/sites/docsy-example/deploys [Docsy]: https://github.com/docsy/docsy [Hugo workspace]: https://gohugo.io/configuration/module/#top-level-settings +[Link checking and the link cache]: https://main--docsydocs.netlify.app/project/about/maintainer-notes/#link-checking-and-the-link-cache [Lockfile and generated manifest]: #lockfile-and-generated-manifest [main ruleset]: https://github.com/docsy/docsy-example/rules/23697395 [Merge requirements]: https://main--docsydocs.netlify.app/project/about/maintainer-notes/#merge-requirements diff --git a/link-cache.jsonc b/link-cache.jsonc new file mode 100644 index 00000000000..c98908566a7 --- /dev/null +++ b/link-cache.jsonc @@ -0,0 +1,447 @@ +{ + "https://creativecommons.org/licenses/by/4.0": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://docsy.dev/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://docsy.dev/docs/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://docsy.dev/docs/best-practices/organizing-content/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://example.docsy.dev/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://example.docsy.dev/_print/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/_print/blog/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/_print/blog/news/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/_print/blog/releases/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/_print/community/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/_print/docs/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/_print/docs/getting-started/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/_print/docs/reference/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/_print/docs/tasks/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/_print/docs/tasks/ponycopters/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/_print/docs/tutorials/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/blog/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://example.docsy.dev/blog/news/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://example.docsy.dev/blog/releases/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/community/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://example.docsy.dev/docs/": { + "result": 200, + "when": "2026-07-01T17:25:53Z", + "via": "lychee", + }, + "https://example.docsy.dev/docs/getting-started/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://example.docsy.dev/docs/reference/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/docs/tasks/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/docs/tasks/ponycopters/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/docs/tutorials/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/_print/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/_print/blog/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/_print/blog/news/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/_print/blog/releases/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/_print/community/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/_print/docs/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/blog/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/blog/news/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/blog/releases/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/community/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/fa/docs/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/big-data/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/big-data/examples/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/big-data/tutorials/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/cloud-computing/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/cloud-computing/examples/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/cloud-computing/tutorials/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/content-management/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/content-management/tutorials/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/cross-platform/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/cross-platform/examples/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/cross-platform/tutorials/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/reference/": { + "result": 200, + "when": "2026-06-29T20:09:06Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/_print/docs/reference/examples/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/big-data/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/big-data/examples/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/big-data/tutorials/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/cloud-computing/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/cloud-computing/examples/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/cloud-computing/tutorials/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/content-management/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/content-management/tutorials/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/cross-platform/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/cross-platform/examples/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/cross-platform/tutorials/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/reference/": { + "result": 200, + "when": "2026-06-29T20:09:04Z", + "via": "lychee", + }, + "https://example.docsy.dev/no/docs/reference/examples/": { + "result": 200, + "when": "2026-06-29T20:09:05Z", + "via": "lychee", + }, + "https://github.com/": { + "result": 200, + "when": "2026-06-29T20:57:57Z", + "via": "lychee", + }, + "https://github.com/chalin": { + "result": 200, + "when": "2026-06-29T20:57:57Z", + "via": "lychee", + }, + "https://github.com/google/docsy": { + "result": 200, + "when": "2026-06-29T20:57:56Z", + "via": "lychee", + }, + "https://github.com/google/docsy-example": { + "result": 200, + "when": "2026-06-29T20:57:56Z", + "via": "lychee", + }, + "https://github.com/google/docsy-example/issues": { + "result": 200, + "when": "2026-06-29T20:57:56Z", + "via": "lychee", + }, + "https://github.com/google/docsy-example/pulls": { + "result": 200, + "when": "2026-06-29T20:57:56Z", + "via": "lychee", + }, + "https://github.com/google/docsy/releases/v0.16.0": { + "result": 200, + "when": "2026-07-29T20:30:23Z", + "via": "lychee", + }, + "https://github.com/google/docsy/releases/v0.17.0": { + "result": 200, + "when": "2026-08-30T20:37:49Z", + "via": "lychee", + }, + "https://github.com/google/docsy/tree/main/docsy.dev": { + "result": 200, + "when": "2026-06-29T20:57:56Z", + "via": "lychee", + }, + "https://github.com/kubeflow/website/blob/master/README.md": { + "result": 200, + "when": "2026-06-29T20:57:56Z", + "via": "lychee", + }, + "https://gohugo.io/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://gohugo.io/documentation/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://guides.github.com/activities/hello-world/": { + "result": 200, + "when": "2026-06-29T20:57:56Z", + "via": "lychee", + }, + "https://help.github.com/articles/about-pull-requests/": { + "result": 200, + "when": "2026-06-29T20:57:56Z", + "via": "lychee", + }, + "https://policies.google.com/privacy": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://swagger.io/tools/swagger-ui/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://www.docsy.dev/docs/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://www.docsy.dev/docs/content/adding-content/#adding-static-content": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://www.docsy.dev/docs/content/shortcodes/#swaggerui": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://www.netlify.com/": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, + "https://x.com/docsydocs": { + "result": 200, + "when": "2026-06-29T20:09:03Z", + "via": "lychee", + }, +} diff --git a/package-lock.json b/package-lock.json index 3275b8ffc51..f908dd943d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "autoprefixer": "10.5.4", "cross-env": "10.1.0", "hugo-extended": "0.164.0", - "link-cache": "0.3.0", + "link-cache": "0.6.0", "postcss-cli": "11.0.1", "rtlcss": "4.3.0", "sass-embedded": "1.103.1" @@ -972,14 +972,15 @@ } }, "node_modules/link-cache": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/link-cache/-/link-cache-0.3.0.tgz", - "integrity": "sha512-JhIryBEtbmrNxeI4TPL4EaXB+7JYn9dMZ6P7fXL87Zo8lZN7QWEntE8ZB017poJCSJ3h7ku3LISlVwHOIJyNVg==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/link-cache/-/link-cache-0.6.0.tgz", + "integrity": "sha512-npaJusaVCwrHcGZgo+AjbiVVwBDpPjysmWby7owJiQsD/Co85pBv87vPIKHhQxGs1fGwbFI+j5GLkNn/65rC9w==", "dev": true, "license": "Apache-2.0", "bin": { + "link-cache": "link-cache/index.mjs", "lychee-norm-cache": "check/index.mjs", - "refcache": "refcache/index.mjs" + "refcache": "link-cache/refcache.mjs" }, "engines": { "node": ">=24" diff --git a/package.json b/package.json index 0870f28f2e4..210a49f15b1 100644 --- a/package.json +++ b/package.json @@ -30,14 +30,16 @@ "build:production": "npm run _hugo -- --minify", "build": "npm run _build -- ", "check:links:internal": "npm run build && npm run _check:links -- --offline", - "check:links": "npm run build && npm run _check:links", + "check:links": "npm run build && npm run _check:links --", "ci:prepare": "npm run _get:docsy && hugo mod graph && hugo mod tidy", "ci:test": "npm run ci:prepare && npm run fix:format && npm run test && npm run _diff:check", "clean": "rm -Rf public/* resources", "fix:format:diff": "npm run fix:format", "fix:format": "npm run _check:format -- --write", + "fix:link-cache": "npm run check:links --", "fix": "npm run fix:format", "install:safe": "npm ci --ignore-scripts", + "link-cache": "link-cache", "local": "npm run _local -- npm run", "make:public": "git init -b main public", "seq": "bash -c 'for cmd in \"$@\"; do npm run $cmd || exit 1; done' - ", @@ -57,7 +59,7 @@ "autoprefixer": "10.5.4", "cross-env": "10.1.0", "hugo-extended": "0.164.0", - "link-cache": "0.3.0", + "link-cache": "0.6.0", "postcss-cli": "11.0.1", "rtlcss": "4.3.0", "sass-embedded": "1.103.1"