From 8884e98784618f6b0a1ac87a67adf911e3993784 Mon Sep 17 00:00:00 2001 From: "huy.phan" Date: Fri, 17 Apr 2026 15:08:13 +0700 Subject: [PATCH 1/2] feat: get latest version spacedf docs --- src/app/_components/VersionLabel.jsx | 6 ++-- src/app/layout.jsx | 15 +++++++--- src/lib/version.ts | 45 ++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 src/lib/version.ts diff --git a/src/app/_components/VersionLabel.jsx b/src/app/_components/VersionLabel.jsx index 1d0322b..c43c24a 100644 --- a/src/app/_components/VersionLabel.jsx +++ b/src/app/_components/VersionLabel.jsx @@ -1,8 +1,8 @@ "use client" -export default function VersionLabel() { +export default function VersionLabel({ latestVersion }) { const handleClick = () => { - window.location.href = "/blog/v2026.02.13" + window.location.href = `/blog/${latestVersion?.version}` } return ( @@ -20,7 +20,7 @@ export default function VersionLabel() { }} title="View release notes" > - v2026.02.13 + {latestVersion?.version} ) } diff --git a/src/app/layout.jsx b/src/app/layout.jsx index 2cedc4f..44a6acb 100644 --- a/src/app/layout.jsx +++ b/src/app/layout.jsx @@ -4,6 +4,7 @@ import { Banner, Head } from "nextra/components" import { getPageMap } from "nextra/page-map" import VersionLabel from "./_components/VersionLabel" import ImageZoomProvider from "../components/ImageZoomProvider" +import { getLatestVersion } from "@/lib/version"; import "nextra-theme-docs/style.css" import "./globals.css" @@ -33,6 +34,12 @@ export const metadata = { } export default async function RootLayout({ children }) { + + const [pageMap, latestVersion] = await Promise.all([ + getPageMap(), + getLatestVersion(), + ]); + const navbar = ( - + } // SpaceDF discord server @@ -54,7 +61,7 @@ export default async function RootLayout({ children }) { projectLink="https://github.com/Space-DF/spacedf-docs" /> ) - const pageMap = await getPageMap() + return ( - 🚀 SpaceDF v2026.02.13 is now live!{" "} + 🚀 SpaceDF {latestVersion?.version} is now live!{" "} Read the release notes diff --git a/src/lib/version.ts b/src/lib/version.ts new file mode 100644 index 0000000..73c56b3 --- /dev/null +++ b/src/lib/version.ts @@ -0,0 +1,45 @@ +import fs from "fs" +import path from "path" +import matter from "gray-matter" + +type LatestVersion = { + slug: string + version: string + date?: string + title?: string + type?: string + author?: string + description?: string +} + +export const getLatestVersion = async (): Promise => { + const POSTS_DIR = path.join(process.cwd(), "src/app/blog/(post)") + + if (!fs.existsSync(POSTS_DIR)) return null + + const results: LatestVersion[] = [] + const folders = fs.readdirSync(POSTS_DIR) + + for (const folder of folders) { + const fullPath = path.join(POSTS_DIR, folder, "page.mdx") + if (!fs.existsSync(fullPath)) continue + + const raw = fs.readFileSync(fullPath, "utf-8") + if (!raw) continue + + const { data } = matter(raw) + + results.push({ + ...(data as Omit), + version: folder, + slug: `/blog/${folder}`, + }) + } + + const latest = + results.sort( + (a, b) => new Date(b.date ?? 0).getTime() - new Date(a.date ?? 0).getTime(), + )[0] ?? null + + return latest +} From 18f2499fe7536e9141d78293d6544de8a8083a39 Mon Sep 17 00:00:00 2001 From: Quynh-Nguyen Date: Fri, 17 Apr 2026 08:09:00 +0000 Subject: [PATCH 2/2] Trigger Build