From 27327bb390c30648fc5e26235eafabbe51aa8330 Mon Sep 17 00:00:00 2001 From: David Konigsberg <72822263+davidkonigsberg@users.noreply.github.com> Date: Mon, 18 Aug 2025 07:52:15 -0400 Subject: [PATCH 1/6] add link-checking CI moving over from the fern repo. Planning to schedule for weekly runs and send alerts to myself to resolve issues. --- .github/workflows/check-links.yml | 82 +++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 .github/workflows/check-links.yml diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml new file mode 100644 index 000000000..7cf46dd82 --- /dev/null +++ b/.github/workflows/check-links.yml @@ -0,0 +1,82 @@ +name: Check Links + +on: + # TODO: Enable scheduled scanning once standing issues have been resolved + #schedule: + #- cron: "0 0 * * *" + workflow_dispatch: +jobs: + check-links: + name: Check links + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + site: + - name: Fern Docs + url: "buildwithfern.com/learn" + steps: + - name: Install link checker + run: pip install linkchecker + - name: Create config + run: echo -e "[csv]\nseparator=,\n[filtering]\nignore=\n\texample.com\n\tus.i.posthog.com\n\tc.vialoops.com/CL0\n[output]\nignoreerrors=\n ^http ^403 Forbidden" > lcconfig + - name: Check ${{ matrix.site.name }} Links + run: | + set +e + cat lcconfig + linkchecker https://${{ matrix.site.url }} --check-extern --no-status --no-warnings --config lcconfig -F csv/utf-8/link_report.csv + + if [ $? -ne 0 ]; then + echo "Bad links found. Please see report." + else + echo "Check completed. No issues found." + exit 0 + fi + + echo "Scan done, generating summary" + + started=false + shouldfail=false + while read p; do + # skip comments (top and bottom) + if [[ $p == \#* ]]; then + continue + fi + # make sure first line after comments is skipped + if [[ "$started" = false ]]; then + started=true + continue + fi + + IFS=',' read -r -a array <<< "$p" + + ret=$(curl -I -s "${array[0]}" -o /dev/null -w "%{http_code}\n") + if [[ $ret == 200 ]]; then + echo "Site now seems to be working, we should continue here" + continue + else + echo "There is still an issue with ${array[0]}" + fi + + shouldfail=true + + if [[ ${array[10]} == '' ]]; then + echo "::error::URL: ${array[0]} on page: ${array[1]} is returning a ${array[3]}" + else + echo "::error::URL: ${array[0]} linked from '${array[10]}' on page: ${array[1]} is returning a ${array[3]}" + fi + + done < link_report.csv + + if [[ "$shouldfail" = false ]]; then + exit 0 + fi + + exit 1 + + - name: Upload report + if: failure() + uses: actions/upload-artifact@v4 + with: + name: Report - ${{ matrix.site.name }} + path: link_report.csv \ No newline at end of file From 694fe67c969fffc579fb6d812ed8027b27d80a36 Mon Sep 17 00:00:00 2001 From: David Konigsberg <72822263+davidkonigsberg@users.noreply.github.com> Date: Mon, 18 Aug 2025 07:54:09 -0400 Subject: [PATCH 2/6] add trigger so it will run for testing --- .github/workflows/check-links.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml index 7cf46dd82..e4511e5b7 100644 --- a/.github/workflows/check-links.yml +++ b/.github/workflows/check-links.yml @@ -1,9 +1,12 @@ name: Check Links on: - # TODO: Enable scheduled scanning once standing issues have been resolved - #schedule: - #- cron: "0 0 * * *" + push: + branches: + - dak/ci/link-checking + # Run monday mornings + schedule: + - cron: '0 12 * * MON' workflow_dispatch: jobs: check-links: From 541964c1b5fb0420b8b0dfd0e424809738b28994 Mon Sep 17 00:00:00 2001 From: David Konigsberg <72822263+davidkonigsberg@users.noreply.github.com> Date: Mon, 18 Aug 2025 08:35:48 -0400 Subject: [PATCH 3/6] remove test trigger --- .github/workflows/check-links.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml index e4511e5b7..ac64b4b0c 100644 --- a/.github/workflows/check-links.yml +++ b/.github/workflows/check-links.yml @@ -1,9 +1,6 @@ name: Check Links on: - push: - branches: - - dak/ci/link-checking # Run monday mornings schedule: - cron: '0 12 * * MON' From e5a85bd9e8a01b62887a56c6408a904b331f6110 Mon Sep 17 00:00:00 2001 From: David Konigsberg <72822263+davidkonigsberg@users.noreply.github.com> Date: Mon, 18 Aug 2025 08:49:25 -0400 Subject: [PATCH 4/6] fix bad links --- fern/docs.yml | 2 +- .../ask-fern/pages/getting-started/what-is-ask-fern.mdx | 2 +- fern/products/docs/pages/enterprise/self-hosted.mdx | 2 +- fern/products/docs/pages/getting-started/overview.mdx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fern/docs.yml b/fern/docs.yml index c60737b63..31f587424 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -549,7 +549,7 @@ redirects: destination: https://buildwithfern.com/customers permanent: true - source: /learn/ask-fern/citations - destination: /learn/ask-fern/configuration/citations + destination: /learn/ask-fern/features/citations permanent: true - source: /learn/ask-fern/custom-prompting destination: /learn/ask-fern/configuration/custom-prompting diff --git a/fern/products/ask-fern/pages/getting-started/what-is-ask-fern.mdx b/fern/products/ask-fern/pages/getting-started/what-is-ask-fern.mdx index 48044234d..30fad6056 100644 --- a/fern/products/ask-fern/pages/getting-started/what-is-ask-fern.mdx +++ b/fern/products/ask-fern/pages/getting-started/what-is-ask-fern.mdx @@ -33,7 +33,7 @@ Fern AI Search indexes your documentation and provides an interface for your use Point users to the exact source of the answer. diff --git a/fern/products/docs/pages/enterprise/self-hosted.mdx b/fern/products/docs/pages/enterprise/self-hosted.mdx index 3caa867e3..5cc27ab54 100644 --- a/fern/products/docs/pages/enterprise/self-hosted.mdx +++ b/fern/products/docs/pages/enterprise/self-hosted.mdx @@ -21,7 +21,7 @@ Unless you have specific requirements that prevent using Fern's default hosting, Self-hosted deployments include core Fern documentation website features like auto-generated API references, interactive documentation, SDK code snippets, search, and customizable branding. -However, features requiring external connections aren't supported, including [Ask Fern](/ask-fern/getting-started/what-is-ask-fern) (AI chat), [analytics](/integrations/overview), [live API key population](/docs/authentication/api-key-injection), and [SSO integrations](/docs/authentication/sso). +However, features requiring external connections aren't supported, including [Ask Fern](/ask-fern/getting-started/what-is-ask-fern) (AI chat), [analytics](/docs/integrations/overview), [live API key population](/docs/authentication/api-key-injection), and [SSO integrations](/docs/authentication/sso). **PDF export** and **offline AI chat functionality** are in development for self-hosted deployments. [Email us](mailto:support@buildwithfern.com) if you're interested in these features. diff --git a/fern/products/docs/pages/getting-started/overview.mdx b/fern/products/docs/pages/getting-started/overview.mdx index 375e077d6..58ff1c2eb 100644 --- a/fern/products/docs/pages/getting-started/overview.mdx +++ b/fern/products/docs/pages/getting-started/overview.mdx @@ -31,7 +31,7 @@ subtitle: A website builder for beautiful agent and developer-friendly docs. - +
Configure with ease From afc82e38f181123b044322c8a2fbb540ab3a5454 Mon Sep 17 00:00:00 2001 From: David Konigsberg <72822263+davidkonigsberg@users.noreply.github.com> Date: Mon, 18 Aug 2025 09:20:19 -0400 Subject: [PATCH 5/6] fix more bad links --- fern/docs.yml | 2 +- .../products/api-def/openapi-pages/extensions/overview.md | 8 ++++---- fern/products/docs/pages/changelog/2025-05-23.mdx | 2 +- .../component-library/custom-components/custom-css-js.mdx | 2 +- fern/products/docs/pages/navigation/versions.mdx | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/fern/docs.yml b/fern/docs.yml index 31f587424..00ce19acd 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -325,7 +325,7 @@ redirects: destination: https://buildwithfern.com/customers permanent: true - source: /learn/docs/getting-started/global-configuration - destination: /learn/docs/customization/what-is-docs-yml + destination: /learn/docs/configuration/what-is-docs-yml permanent: true - source: /learn/docs/getting-started/development destination: /learn/docs/preview-publish/previewing-changes-locally diff --git a/fern/products/api-def/openapi-pages/extensions/overview.md b/fern/products/api-def/openapi-pages/extensions/overview.md index 93e741f89..fe3030b38 100644 --- a/fern/products/api-def/openapi-pages/extensions/overview.md +++ b/fern/products/api-def/openapi-pages/extensions/overview.md @@ -14,10 +14,10 @@ The table below shows all available extensions and links to detailed documentati | [`x-fern-audiences`](./audiences) | Filter endpoints, schemas, and properties by audience | | [`x-fern-availability`](./availability) | Mark availability status (beta, generally-available, deprecated) | | [`x-fern-base-path`](./base-path) | Set base path prepended to all endpoints | -| [`x-fern-enum`](./enums) | Add descriptions and custom names to enum values | -| [`x-fern-examples`](./examples) | Associate request and response examples | +| [`x-fern-enum`](./enum-descriptions-and-names) | Add descriptions and custom names to enum values | +| [`x-fern-examples`](./request-response-examples) | Associate request and response examples | | [`x-fern-global-headers`](./global-headers) | Configure headers used across all endpoints | -| [`x-fern-ignore`](./ignore) | Skip reading specific endpoints or schemas | +| [`x-fern-ignore`](./ignoring-elements) | Skip reading specific endpoints or schemas | | [`x-fern-sdk-method-name`](./method-names) | Customize SDK method names | | [`x-fern-sdk-group-name`](./method-names) | Organize methods into SDK groups | | [`x-fern-parameter-name`](./parameter-names) | Customize parameter variable names | @@ -33,4 +33,4 @@ The table below shows all available extensions and links to detailed documentati ### FastAPI -FastAPI allows you to add extensions directly in your route decorators and models. See our [FastAPI integration guide](/api-definition/openapi/frameworks/fastapi) for detailed examples. +FastAPI allows you to add extensions directly in your route decorators and models. See our [FastAPI integration guide](/learn/api-definitions/openapi/frameworks/fastapi) for detailed examples. diff --git a/fern/products/docs/pages/changelog/2025-05-23.mdx b/fern/products/docs/pages/changelog/2025-05-23.mdx index c0cf20752..81e8211a2 100644 --- a/fern/products/docs/pages/changelog/2025-05-23.mdx +++ b/fern/products/docs/pages/changelog/2025-05-23.mdx @@ -2,4 +2,4 @@ We've added a `max-toc-depth` frontmatter option to control the depth of the table of contents. Use this to limit the heading ranks included in the table of contents. -You can read more about this feature in the [frontmatter documentation](/learn/docs/content/frontmatter#max-depth). \ No newline at end of file +You can read more about this feature in the [frontmatter documentation](/learn/docs/configuration/page-level-settings#max-depth). \ No newline at end of file diff --git a/fern/products/docs/pages/component-library/custom-components/custom-css-js.mdx b/fern/products/docs/pages/component-library/custom-components/custom-css-js.mdx index 396b15191..dacb29adb 100644 --- a/fern/products/docs/pages/component-library/custom-components/custom-css-js.mdx +++ b/fern/products/docs/pages/component-library/custom-components/custom-css-js.mdx @@ -56,7 +56,7 @@ css: For customizing the background, logo, font, and layout of your Docs via Fern's built-in styling, -check out the [Global Configuration](/learn/docs/getting-started/global-configuration). +check out the [Global Configuration](/learn/docs/configuration/what-is-docs-yml). ### Common use cases diff --git a/fern/products/docs/pages/navigation/versions.mdx b/fern/products/docs/pages/navigation/versions.mdx index 1ecf958de..d4ad83915 100644 --- a/fern/products/docs/pages/navigation/versions.mdx +++ b/fern/products/docs/pages/navigation/versions.mdx @@ -78,7 +78,7 @@ tabs: -You can also have multiple products, some versioned and some unversioned. For more information on setting up multiple products, follow our [product switching docs](/docs/navigation/products). +You can also have multiple products, some versioned and some unversioned. For more information on setting up multiple products, follow our [product switching docs](/docs/configuration/products). From 8a5f3e741f2d108ea026e12c27eb23ee16aadd75 Mon Sep 17 00:00:00 2001 From: David Konigsberg <72822263+davidkonigsberg@users.noreply.github.com> Date: Mon, 18 Aug 2025 09:26:45 -0400 Subject: [PATCH 6/6] fix even more links --- fern/docs.yml | 2 +- fern/products/docs/pages/customization/frontmatter.mdx | 2 +- fern/products/docs/pages/customization/global-configuration.mdx | 2 +- fern/products/docs/pages/customization/what-is-docs-yml.mdx | 2 +- fern/products/docs/pages/getting-started/project-structure.mdx | 2 +- fern/products/docs/pages/navigation/overview.mdx | 2 +- fern/products/docs/pages/navigation/products.mdx | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/fern/docs.yml b/fern/docs.yml index 00ce19acd..b97784f87 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -378,7 +378,7 @@ redirects: destination: /learn/docs/customization/custom-css-js permanent: true - source: /learn/docs/building-and-customizing-your-docs/custom-domain - destination: /learn/docs/getting-started/setting-up-your-domain + destination: /learn/docs/preview-publish/setting-up-your-domain permanent: true - source: /learn/docs/building-and-customizing-your-docs/rbac destination: /learn/docs/authentication/rbac diff --git a/fern/products/docs/pages/customization/frontmatter.mdx b/fern/products/docs/pages/customization/frontmatter.mdx index 3279c8f40..928e356f4 100644 --- a/fern/products/docs/pages/customization/frontmatter.mdx +++ b/fern/products/docs/pages/customization/frontmatter.mdx @@ -245,7 +245,7 @@ Currently, relative paths are _not_ supported for this field. ## SEO metadata -Looking to set metadata across the entire site? [Use the metadata field in the `docs.yml` file](/learn/docs/customization/what-is-docs-yml#metadata-configuration). +Looking to set metadata across the entire site? [Use the metadata field in the `docs.yml` file](/learn/docs/configuration/what-is-docs-yml#metadata-configuration). When configuring SEO metadata, ensure your titles and descriptions are unique, descriptive, and relevant to the page content. Keep descriptions between 150-160 characters for optimal display in search results. diff --git a/fern/products/docs/pages/customization/global-configuration.mdx b/fern/products/docs/pages/customization/global-configuration.mdx index cb803a6a9..4fa90cd2e 100644 --- a/fern/products/docs/pages/customization/global-configuration.mdx +++ b/fern/products/docs/pages/customization/global-configuration.mdx @@ -122,7 +122,7 @@ instances: - The custom domain where your documentation is hosted. Learn more about [setting up a custom domain](/learn/docs/building-your-docs/custom-domain). + The custom domain where your documentation is hosted. Learn more about [setting up a custom domain](/learn/docs/preview-publish/setting-up-your-domain). diff --git a/fern/products/docs/pages/customization/what-is-docs-yml.mdx b/fern/products/docs/pages/customization/what-is-docs-yml.mdx index 945a33a2a..3b7ea5cbb 100644 --- a/fern/products/docs/pages/customization/what-is-docs-yml.mdx +++ b/fern/products/docs/pages/customization/what-is-docs-yml.mdx @@ -122,7 +122,7 @@ instances: - The custom domain where your documentation is hosted. Learn more about [setting up a custom domain](/learn/docs/building-your-docs/custom-domain). + The custom domain where your documentation is hosted. Learn more about [setting up a custom domain](/learn/docs/preview-publish/setting-up-your-domain). diff --git a/fern/products/docs/pages/getting-started/project-structure.mdx b/fern/products/docs/pages/getting-started/project-structure.mdx index b13373f1f..c8873cde8 100644 --- a/fern/products/docs/pages/getting-started/project-structure.mdx +++ b/fern/products/docs/pages/getting-started/project-structure.mdx @@ -68,7 +68,7 @@ The `assets` folder contains any images or videos used in your documentation. Yo The `docs.yml` file is the heart of your Fern documentation site. This configuration file controls your documentation's navigation structure, visual design, site functionality, and hosting settings. -For complete configuration options, see the [docs.yml reference](/docs/customization/what-is-docs-yml). +For complete configuration options, see the [docs.yml reference](/docs/configuration/what-is-docs-yml). ```yml diff --git a/fern/products/docs/pages/navigation/overview.mdx b/fern/products/docs/pages/navigation/overview.mdx index 2a6f71de1..5567d4594 100644 --- a/fern/products/docs/pages/navigation/overview.mdx +++ b/fern/products/docs/pages/navigation/overview.mdx @@ -240,7 +240,7 @@ Here's an example of what the Tabs implementation looks like: Tabs displayed in the sidebar (default) -Tabs display in the left sidebar by default. To display them horizontally, set `tabs-placement` to `header` in your [layout configuration](/docs/customization/what-is-docs-yml#layout-configuration). +Tabs display in the left sidebar by default. To display them horizontally, set `tabs-placement` to `header` in your [layout configuration](/docs/configuration/what-is-docs-yml#layout-configuration). ```yaml diff --git a/fern/products/docs/pages/navigation/products.mdx b/fern/products/docs/pages/navigation/products.mdx index 0e043d11a..bd574f257 100644 --- a/fern/products/docs/pages/navigation/products.mdx +++ b/fern/products/docs/pages/navigation/products.mdx @@ -164,7 +164,7 @@ products: ``` -For more information on setting up versioned products, follow our [versioning docs](/docs/navigation/versions). +For more information on setting up versioned products, follow our [versioning docs](/docs/configuration/versions).