mirror of
https://github.com/Dokploy/website.git
synced 2026-06-15 20:25:25 +02:00
chore: upgrade Next.js and related dependencies to version 16.0.7
- Updated Next.js and @next/third-parties dependencies in package.json files across apps/docs and apps/website. - Adjusted pnpm-lock.yaml to reflect the new versions and ensure compatibility. - Enhanced the website's sitemap by adding new URLs for pricing and changelog. - Introduced a new API route for fetching GitHub releases, improving the changelog page functionality. - Updated the changelog page to dynamically display release information fetched from the new API. - Enhanced the footer and header components to include links to the changelog and pricing pages.
This commit is contained in:
@@ -12,7 +12,7 @@
|
|||||||
"typecheck": "tsc --noEmit"
|
"typecheck": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"next": "15.0.3",
|
"next": "16.0.7",
|
||||||
"fumadocs-ui": "14.3.1",
|
"fumadocs-ui": "14.3.1",
|
||||||
"fumadocs-core": "14.3.1",
|
"fumadocs-core": "14.3.1",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
"lucide-react": "^0.456.0",
|
"lucide-react": "^0.456.0",
|
||||||
"fumadocs-openapi": "5.5.9",
|
"fumadocs-openapi": "5.5.9",
|
||||||
"shiki": "1.22.2",
|
"shiki": "1.22.2",
|
||||||
"@next/third-parties": "15.4.5"
|
"@next/third-parties": "16.0.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"tsx": "^4.19.2",
|
"tsx": "^4.19.2",
|
||||||
|
|||||||
72
apps/website/app/api/releases/route.ts
Normal file
72
apps/website/app/api/releases/route.ts
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
import { NextResponse } from 'next/server'
|
||||||
|
|
||||||
|
export const runtime = 'edge'
|
||||||
|
export const revalidate = 3600 // Revalidate every hour
|
||||||
|
|
||||||
|
interface GitHubRelease {
|
||||||
|
tag_name: string
|
||||||
|
name: string
|
||||||
|
published_at: string
|
||||||
|
body: string
|
||||||
|
html_url: string
|
||||||
|
prerelease: boolean
|
||||||
|
draft: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ParsedRelease {
|
||||||
|
version: string
|
||||||
|
date: string
|
||||||
|
title: string
|
||||||
|
body: string
|
||||||
|
url: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function GET() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(
|
||||||
|
'https://api.github.com/repos/Dokploy/dokploy/releases?per_page=100',
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/vnd.github.v3+json',
|
||||||
|
'User-Agent': 'Dokploy-Website',
|
||||||
|
},
|
||||||
|
next: {
|
||||||
|
revalidate: 3600,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`GitHub API responded with ${response.status}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
const releases: GitHubRelease[] = await response.json()
|
||||||
|
|
||||||
|
// Filter out drafts and prereleases, and format the releases
|
||||||
|
const parsedReleases: ParsedRelease[] = releases
|
||||||
|
.filter((release) => !release.draft && !release.prerelease)
|
||||||
|
.map((release) => ({
|
||||||
|
version: release.tag_name,
|
||||||
|
date: new Date(release.published_at).toLocaleDateString(
|
||||||
|
'en-US',
|
||||||
|
{
|
||||||
|
year: 'numeric',
|
||||||
|
month: 'short',
|
||||||
|
day: 'numeric',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
title: release.name || release.tag_name,
|
||||||
|
body: release.body,
|
||||||
|
url: release.html_url,
|
||||||
|
}))
|
||||||
|
|
||||||
|
return NextResponse.json(parsedReleases)
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching releases:', error)
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: 'Failed to fetch releases' },
|
||||||
|
{ status: 500 },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -16,6 +16,18 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
|||||||
changeFrequency: 'monthly',
|
changeFrequency: 'monthly',
|
||||||
priority: 0.8,
|
priority: 0.8,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
url: 'https://dokploy.com/pricing',
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: 'monthly',
|
||||||
|
priority: 0.9,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: 'https://dokploy.com/changelog',
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: 'weekly',
|
||||||
|
priority: 0.9,
|
||||||
|
},
|
||||||
...posts.map((post) => ({
|
...posts.map((post) => ({
|
||||||
url: `https://dokploy.com/blog/${post.slug}`,
|
url: `https://dokploy.com/blog/${post.slug}`,
|
||||||
lastModified: new Date(post.published_at),
|
lastModified: new Date(post.published_at),
|
||||||
|
|||||||
@@ -37,18 +37,21 @@ export function Footer() {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<nav className="mt-10 text-sm" aria-label="quick links">
|
<nav className="mt-10 text-sm" aria-label="quick links">
|
||||||
<div className="-my-1 flex flex-wrap justify-center gap-6">
|
<div className="-my-1 flex flex-wrap justify-center gap-6">
|
||||||
<NavLink href="/#features">Features</NavLink>
|
<NavLink href="/#features">Features</NavLink>
|
||||||
<NavLink href="/#faqs">FAQ</NavLink>
|
<NavLink href="/pricing">Pricing</NavLink>
|
||||||
<NavLink
|
<NavLink href="/#faqs">FAQ</NavLink>
|
||||||
href="https://docs.dokploy.com/docs/core"
|
<NavLink
|
||||||
target="_blank"
|
href="https://docs.dokploy.com/docs/core"
|
||||||
>
|
target="_blank"
|
||||||
Docs
|
>
|
||||||
</NavLink>
|
Docs
|
||||||
</div>
|
</NavLink>
|
||||||
</nav>
|
<NavLink href="/blog">Blog</NavLink>
|
||||||
|
<NavLink href="/changelog">Changelog</NavLink>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col items-center border-t border-slate-400/10 py-10 sm:flex-row-reverse sm:justify-between">
|
<div className="flex flex-col items-center border-t border-slate-400/10 py-10 sm:flex-row-reverse sm:justify-between">
|
||||||
<div className="flex items-center gap-x-6">
|
<div className="flex items-center gap-x-6">
|
||||||
|
|||||||
@@ -121,16 +121,17 @@ function MobileNavigation() {
|
|||||||
as="div"
|
as="div"
|
||||||
className="absolute inset-x-0 top-full mt-4 flex origin-top flex-col rounded-2xl border border-border bg-background p-4 text-lg tracking-tight text-primary shadow-xl ring-1 ring-border/5"
|
className="absolute inset-x-0 top-full mt-4 flex origin-top flex-col rounded-2xl border border-border bg-background p-4 text-lg tracking-tight text-primary shadow-xl ring-1 ring-border/5"
|
||||||
>
|
>
|
||||||
<MobileNavLink href="/#pricing">Pricing</MobileNavLink>
|
<MobileNavLink href="/#pricing">Pricing</MobileNavLink>
|
||||||
<MobileNavLink href="/#faqs">FAQ</MobileNavLink>
|
<MobileNavLink href="/#faqs">FAQ</MobileNavLink>
|
||||||
<MobileNavLink
|
<MobileNavLink
|
||||||
href="https://docs.dokploy.com/docs/core"
|
href="https://docs.dokploy.com/docs/core"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>
|
>
|
||||||
Docs
|
Docs
|
||||||
</MobileNavLink>
|
</MobileNavLink>
|
||||||
<MobileNavLink href="/blog">Blog</MobileNavLink>
|
<MobileNavLink href="/blog">Blog</MobileNavLink>
|
||||||
<MobileNavLink href="/contact">Contact</MobileNavLink>
|
<MobileNavLink href="/changelog">Changelog</MobileNavLink>
|
||||||
|
<MobileNavLink href="/contact">Contact</MobileNavLink>
|
||||||
<MobileNavLink
|
<MobileNavLink
|
||||||
href="https://docs.dokploy.com/docs/core"
|
href="https://docs.dokploy.com/docs/core"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
@@ -164,17 +165,18 @@ export function Header() {
|
|||||||
<Link href="/" aria-label="Home">
|
<Link href="/" aria-label="Home">
|
||||||
<Logo className="h-10 w-auto" />
|
<Logo className="h-10 w-auto" />
|
||||||
</Link>
|
</Link>
|
||||||
<div className="hidden md:flex md:gap-x-6">
|
<div className="hidden md:flex md:gap-x-6">
|
||||||
<NavLink href="/#pricing">Pricing</NavLink>
|
<NavLink href="/#pricing">Pricing</NavLink>
|
||||||
<NavLink href="/#faqs">FAQ</NavLink>
|
<NavLink href="/#faqs">FAQ</NavLink>
|
||||||
<NavLink
|
<NavLink
|
||||||
href="https://docs.dokploy.com/docs/core"
|
href="https://docs.dokploy.com/docs/core"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>
|
>
|
||||||
Docs
|
Docs
|
||||||
</NavLink>
|
</NavLink>
|
||||||
<NavLink href="/blog">Blog</NavLink>
|
<NavLink href="/blog">Blog</NavLink>
|
||||||
</div>
|
<NavLink href="/changelog">Changelog</NavLink>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-x-4 md:gap-x-5">
|
<div className="flex items-center gap-x-4 md:gap-x-5">
|
||||||
<GithubStars className="max-md:hidden" />
|
<GithubStars className="max-md:hidden" />
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
},
|
},
|
||||||
"browserslist": "defaults, not ie <= 11",
|
"browserslist": "defaults, not ie <= 11",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@next/third-parties": "15.4.5",
|
"@next/third-parties": "16.0.7",
|
||||||
"hast-util-to-jsx-runtime": "2.3.5",
|
"hast-util-to-jsx-runtime": "2.3.5",
|
||||||
"@headlessui/react": "^2.2.0",
|
"@headlessui/react": "^2.2.0",
|
||||||
"@headlessui/tailwindcss": "^0.2.0",
|
"@headlessui/tailwindcss": "^0.2.0",
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
"clsx": "^2.1.0",
|
"clsx": "^2.1.0",
|
||||||
"framer-motion": "^11.3.19",
|
"framer-motion": "^11.3.19",
|
||||||
"lucide-react": "0.364.0",
|
"lucide-react": "0.364.0",
|
||||||
"next": "15.4.5",
|
"next": "16.0.7",
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
"react-ga4": "^2.1.0",
|
"react-ga4": "^2.1.0",
|
||||||
|
|||||||
@@ -1,28 +1,42 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "es6",
|
"target": "es6",
|
||||||
"lib": ["dom", "dom.iterable", "esnext"],
|
"lib": [
|
||||||
"allowJs": true,
|
"dom",
|
||||||
"skipLibCheck": true,
|
"dom.iterable",
|
||||||
"strict": true,
|
"esnext"
|
||||||
"forceConsistentCasingInFileNames": true,
|
],
|
||||||
"noEmit": true,
|
"allowJs": true,
|
||||||
"esModuleInterop": true,
|
"skipLibCheck": true,
|
||||||
"module": "esnext",
|
"strict": true,
|
||||||
"moduleResolution": "bundler",
|
"forceConsistentCasingInFileNames": true,
|
||||||
"resolveJsonModule": true,
|
"noEmit": true,
|
||||||
"isolatedModules": true,
|
"esModuleInterop": true,
|
||||||
"jsx": "preserve",
|
"module": "esnext",
|
||||||
"incremental": true,
|
"moduleResolution": "bundler",
|
||||||
"plugins": [
|
"resolveJsonModule": true,
|
||||||
{
|
"isolatedModules": true,
|
||||||
"name": "next"
|
"jsx": "react-jsx",
|
||||||
}
|
"incremental": true,
|
||||||
],
|
"plugins": [
|
||||||
"paths": {
|
{
|
||||||
"@/*": ["./*"]
|
"name": "next"
|
||||||
}
|
}
|
||||||
},
|
],
|
||||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
"paths": {
|
||||||
"exclude": ["node_modules"]
|
"@/*": [
|
||||||
|
"./*"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"next-env.d.ts",
|
||||||
|
"**/*.ts",
|
||||||
|
"**/*.tsx",
|
||||||
|
".next/types/**/*.ts",
|
||||||
|
".next/dev/types/**/*.ts"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
574
pnpm-lock.yaml
generated
574
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user