From 5babdf64cb8f006078310158027932c72089ac9c Mon Sep 17 00:00:00 2001 From: Teffen Ellis <592134+GirlBossRush@users.noreply.github.com> Date: Thu, 18 Dec 2025 21:01:47 +0100 Subject: [PATCH] website/docs: Fix labels, Pre-Release detection (#18945) * Fix import path. * Show unlisted entries if release. * Fix sidebar rendering. * Fix positioning of pre-release note. Tidy phrasing. * Clarify pre-release vs draft. --- website/docs/docusaurus.config.esm.mjs | 2 +- website/docs/releases/2025/v2025.12.md | 8 +-- .../VersionPicker/VersionDropdown.tsx | 4 +- website/docusaurus-theme/releases/common.mjs | 1 + website/docusaurus-theme/releases/node.mjs | 13 +++- .../ContentVisibility/Unlisted/index.tsx | 60 ------------------- .../DocItem/Content/PreReleaseAdmonition.tsx | 53 ++++++++++++++++ .../theme/DocItem/Content/index.tsx | 5 ++ .../theme/DocSidebarItems/index.tsx | 24 +++++++- .../@docusaurus/plugin-content-docs.d.ts | 1 + 10 files changed, 97 insertions(+), 74 deletions(-) delete mode 100644 website/docusaurus-theme/theme/ContentVisibility/Unlisted/index.tsx create mode 100644 website/docusaurus-theme/theme/DocItem/Content/PreReleaseAdmonition.tsx diff --git a/website/docs/docusaurus.config.esm.mjs b/website/docs/docusaurus.config.esm.mjs index b8c0668f5b..bc50afccf9 100644 --- a/website/docs/docusaurus.config.esm.mjs +++ b/website/docs/docusaurus.config.esm.mjs @@ -2,7 +2,7 @@ * @file Docusaurus Documentation config. * * @import { UserThemeConfig, UserThemeConfigExtra } from "@goauthentik/docusaurus-config"; - * @import { AKReleasesPluginOptions } from "@goauthentik/docusaurus-theme/releases/plugin" + * @import { AKReleasesPluginOptions } from "@goauthentik/docusaurus-theme/releases/common" * @import { AKRedirectsPluginOptions } from "@goauthentik/docusaurus-theme/redirects/plugin" * @import { Options as RedirectsPluginOptions } from "@docusaurus/plugin-client-redirects"; */ diff --git a/website/docs/releases/2025/v2025.12.md b/website/docs/releases/2025/v2025.12.md index ac2618fe46..55476328c7 100644 --- a/website/docs/releases/2025/v2025.12.md +++ b/website/docs/releases/2025/v2025.12.md @@ -1,15 +1,9 @@ --- title: Release 2025.12 slug: "/releases/2025.12" -unlisted: true +beta: true --- -:::info -2025.12 has not been released yet! We're publishing these release notes as a preview of what's to come, and for our awesome beta testers trying out release candidates. - -To try out the release candidate, replace your Docker image tag with the latest release candidate number, such as xxxx.x.0-rc1. You can find the latest one in [the latest releases on GitHub](https://github.com/goauthentik/authentik/releases). If you don't find any, it means we haven't released one yet. -::: - ## Highlights - **Endpoint Devices**: :ak-enterprise Endpoint Devices is a new featureset for Windows, macOS, and Linux devices that enables SSH authentication, local device login, sudo authorization and more, all with authentik credentials. diff --git a/website/docusaurus-theme/components/VersionPicker/VersionDropdown.tsx b/website/docusaurus-theme/components/VersionPicker/VersionDropdown.tsx index 21e40728cb..85a963355f 100644 --- a/website/docusaurus-theme/components/VersionPicker/VersionDropdown.tsx +++ b/website/docusaurus-theme/components/VersionPicker/VersionDropdown.tsx @@ -78,11 +78,11 @@ export const VersionDropdown = memo((props) => { let label = semVer; const frontmatter = frontMatterRecord[semVer]; - if (frontmatter?.unlisted || frontmatter?.draft) { + if (frontmatter?.draft) { return null; } - if (idx === 0) { + if (idx === 0 && !frontmatter?.beta) { label += " (Current Release)"; } diff --git a/website/docusaurus-theme/releases/common.mjs b/website/docusaurus-theme/releases/common.mjs index eebd2ca1d0..348c87b474 100644 --- a/website/docusaurus-theme/releases/common.mjs +++ b/website/docusaurus-theme/releases/common.mjs @@ -9,6 +9,7 @@ /** * @typedef {object} AKReleaseFrontMatter + * @property {boolean} [beta] Whether the release is a beta. * @property {boolean} [draft] Whether the release is a draft. * @property {boolean} [unlisted] Whether the release is unlisted. */ diff --git a/website/docusaurus-theme/releases/node.mjs b/website/docusaurus-theme/releases/node.mjs index a46ad580a3..ff29240144 100644 --- a/website/docusaurus-theme/releases/node.mjs +++ b/website/docusaurus-theme/releases/node.mjs @@ -58,6 +58,10 @@ export function collectReleaseFiles(releasesParentDirectory) { const { frontMatter } = parseFileContentFrontMatter(fileContent); latestRelease.frontMatter = frontMatter; + + if (latestRelease.frontMatter.beta) { + latestRelease.name += " (Release Candidate)"; + } } return releaseFiles; @@ -73,7 +77,14 @@ export function createReleaseSidebarEntries(releaseFiles) { /** * @type {SidebarItemConfig[]} */ - let sidebarEntries = releaseFiles.map((fileEntry) => fileEntry.path); + let sidebarEntries = releaseFiles.map((fileEntry) => { + return { + type: "doc", + id: fileEntry.path, + label: fileEntry.name, + key: `release-${fileEntry.name}`, + }; + }); if (releaseFiles.length > SUPPORTED_RELEASE_COUNT) { // Then we add the rest of the releases as a category. diff --git a/website/docusaurus-theme/theme/ContentVisibility/Unlisted/index.tsx b/website/docusaurus-theme/theme/ContentVisibility/Unlisted/index.tsx deleted file mode 100644 index 350d096ba5..0000000000 --- a/website/docusaurus-theme/theme/ContentVisibility/Unlisted/index.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { useDoc } from "@docusaurus/plugin-content-docs/client"; -import { - ThemeClassNames, - UnlistedBannerMessage, - UnlistedBannerTitle, - UnlistedMetadata, -} from "@docusaurus/theme-common"; -import Translate from "@docusaurus/Translate"; -import Admonition from "@theme/Admonition"; -import type { Props } from "@theme/ContentVisibility/Unlisted"; -import clsx from "clsx"; -import React, { type ReactNode } from "react"; - -function UnlistedBanner({ className }: Props) { - const context = useDoc(); - - if (context.metadata.id?.startsWith("releases")) { - return ( - - Pre-Release Documentation - - } - className={clsx(className, ThemeClassNames.common.unlistedBanner)} - > - - This documentation is for an upcoming version of authentik. It may be incomplete - or subject to changes before the final release. - - - ); - } - - return ( - } - className={clsx(className, ThemeClassNames.common.unlistedBanner)} - > - - - ); -} - -export default function Unlisted(props: Props): ReactNode { - return ( - <> - - - - ); -} diff --git a/website/docusaurus-theme/theme/DocItem/Content/PreReleaseAdmonition.tsx b/website/docusaurus-theme/theme/DocItem/Content/PreReleaseAdmonition.tsx new file mode 100644 index 0000000000..aec29a9470 --- /dev/null +++ b/website/docusaurus-theme/theme/DocItem/Content/PreReleaseAdmonition.tsx @@ -0,0 +1,53 @@ +import Link from "@docusaurus/Link"; +import { ThemeClassNames } from "@docusaurus/theme-common"; +import Translate from "@docusaurus/Translate"; +import Admonition from "@theme/Admonition"; +import ExternalLinkIcon from "@theme/Icon/ExternalLink"; +import React from "react"; + +export const PreReleaseAdmonition: React.FC = () => { + return ( + +

+ + + GitHub releases + + + + ), + }} + > + {`We’re publishing these release notes as a preview of what's to come. To try a release candidate, find the latest RC version on {releasesLink}, then update your Docker image tag accordingly.`} + +

+ +

+ + + Read more about beta testing + + +

+
+ ); +}; diff --git a/website/docusaurus-theme/theme/DocItem/Content/index.tsx b/website/docusaurus-theme/theme/DocItem/Content/index.tsx index dd10f39fb7..4982e10947 100644 --- a/website/docusaurus-theme/theme/DocItem/Content/index.tsx +++ b/website/docusaurus-theme/theme/DocItem/Content/index.tsx @@ -12,6 +12,7 @@ import { SupportBadge } from "#components/SupportBadge.tsx"; import { VersionBadge } from "#components/VersionBadge.tsx"; import { useSyntheticTitle } from "#hooks/title.ts"; +import { PreReleaseAdmonition } from "#theme/DocItem/Content/PreReleaseAdmonition.tsx"; import { useDoc } from "@docusaurus/plugin-content-docs/client"; import { ThemeClassNames } from "@docusaurus/theme-common"; @@ -87,6 +88,8 @@ const DocItemContent: React.FC = ({ children }) => { authentik_preview, } = frontMatter; + const preReleaseDoc = frontMatter.beta && metadata.id.startsWith("releases"); + useBadgeLinterEffect(); const badges: JSX.Element[] = []; @@ -129,6 +132,8 @@ const DocItemContent: React.FC = ({ children }) => { ) : null} + {preReleaseDoc ? : null} + {children} ); diff --git a/website/docusaurus-theme/theme/DocSidebarItems/index.tsx b/website/docusaurus-theme/theme/DocSidebarItems/index.tsx index 663bb4800b..8701e63c54 100644 --- a/website/docusaurus-theme/theme/DocSidebarItems/index.tsx +++ b/website/docusaurus-theme/theme/DocSidebarItems/index.tsx @@ -1,20 +1,38 @@ -/// import "./styles.css"; import { isGlossaryItem } from "../utils/glossaryUtils"; import { VersionPicker } from "#components/VersionPicker/index.tsx"; +import type { PropSidebarItem } from "@docusaurus/plugin-content-docs"; import { DocSidebarItemsExpandedStateProvider, - useVisibleSidebarItems, + isVisibleSidebarItem, } from "@docusaurus/plugin-content-docs/client"; import DocSidebarItem from "@theme/DocSidebarItem"; import type { Props as DocSidebarItemsProps } from "@theme/DocSidebarItems"; -import { JSX, memo } from "react"; +import { JSX, memo, useMemo } from "react"; + +function isReleaseNotesItem(item: PropSidebarItem): boolean { + return !!(item.type === "link" && item.docId?.startsWith("releases")); +} + +function useVisibleSidebarItems( + items: readonly PropSidebarItem[], + activePath: string, +): PropSidebarItem[] { + return useMemo( + () => + items.filter((item) => { + return isVisibleSidebarItem(item, activePath) || isReleaseNotesItem(item); + }), + [items, activePath], + ); +} const DocSidebarItems = ({ items, ...props }: DocSidebarItemsProps): JSX.Element => { const visibleItems = useVisibleSidebarItems(items, props.activePath); + const includeVersionPicker = props.level === 1 && !props.activePath.startsWith("/integrations"); return ( diff --git a/website/docusaurus-theme/types/@docusaurus/plugin-content-docs.d.ts b/website/docusaurus-theme/types/@docusaurus/plugin-content-docs.d.ts index fccacde03a..84973b15d5 100644 --- a/website/docusaurus-theme/types/@docusaurus/plugin-content-docs.d.ts +++ b/website/docusaurus-theme/types/@docusaurus/plugin-content-docs.d.ts @@ -22,6 +22,7 @@ declare module "@docusaurus/plugin-content-docs/client" { * @monkeypatch */ export interface DocFrontMatter extends BaseDocFrontMatter { + beta?: boolean; support_level?: string; authentik_version?: string; authentik_preview: boolean;