From 310b261bc715ec1d5b54c3850ad5574f558bfa92 Mon Sep 17 00:00:00 2001 From: DevdeskApp Date: Sun, 1 Nov 2026 02:46:54 +0530 Subject: [PATCH] feat(docs): add n8n node dynamic version badge, og-docs image, and workflow updates --- .github/workflows/deploy.yml | 7 +- .vitepress/config.mts | 26 ++++-- .vitepress/n8n-node-version.ts | 17 ++++ .vitepress/theme/components/HeroShowcase.vue | 22 +---- .vitepress/theme/components/NodeVersion.vue | 14 +++ .vitepress/theme/index.ts | 24 +---- .vitepress/theme/n8n-node.ts | 90 +++++++++++++++++++ src/n8n/index.md | 4 +- src/n8n/installation.md | 2 + src/public/og-docs.jpg | Bin 0 -> 61657 bytes 10 files changed, 159 insertions(+), 47 deletions(-) create mode 100644 .vitepress/n8n-node-version.ts create mode 100644 .vitepress/theme/components/NodeVersion.vue create mode 100644 .vitepress/theme/n8n-node.ts create mode 100644 src/public/og-docs.jpg diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 294c39b..dd78c52 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -10,6 +10,10 @@ on: - main - master workflow_dispatch: + # Daily rebuild so the n8n-nodes-devdeskapp version baked into the pages follows + # new npm releases even when the docs themselves did not change. + schedule: + - cron: '30 3 * * *' permissions: contents: read @@ -54,7 +58,8 @@ jobs: path: .vitepress/dist deploy: - if: github.event_name == 'push' && github.ref == 'refs/heads/main' + # push / manual run / daily schedule on main (scheduled runs always use the default branch, main). + if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 252e423..c05419a 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -1,6 +1,16 @@ -import { defineConfig } from 'vitepress' +import { type DefaultTheme, defineConfigWithTheme } from 'vitepress' +import { resolveN8nNodeVersion } from './n8n-node-version' +import { N8N_NODE_VERSIONS_URL } from './theme/n8n-node' -export default defineConfig({ +// Latest n8n-nodes-devdeskapp release, baked into every page at build time (the +// component also refreshes it in the browser). The deploy workflow +// rebuilds daily, so the nav label follows new npm releases without a docs commit. +const n8nNode = await resolveN8nNodeVersion() +console.log(`n8n-nodes-devdeskapp version: ${n8nNode.version} (${n8nNode.source})`) + +const OG_IMAGE = 'https://docs.devdeskapp.com/og-docs.jpg' + +export default defineConfigWithTheme({ srcDir: 'src', // Files in src/public are static assets (auth.md, llms.txt...). Without this, // VitePress also renders public/auth.md as an indexable /public/auth page. @@ -8,6 +18,8 @@ export default defineConfig({ title: 'DevDeskApp Docs', description: 'Official Documentation for DevDeskApp suite, developer utilities, and n8n-nodes-devdeskapp community node.', cleanUrls: true, + // Git commit time of each page: shown as "Last updated" and emitted as in sitemap.xml. + lastUpdated: true, sitemap: { hostname: 'https://docs.devdeskapp.com' }, @@ -42,12 +54,15 @@ export default defineConfig({ ['meta', { property: 'og:site_name', content: 'DevDeskApp Docs' }], ['meta', { property: 'og:type', content: 'website' }], ['meta', { property: 'og:locale', content: 'en_US' }], - ['meta', { property: 'og:image', content: 'https://docs.devdeskapp.com/logo-dark.jpg' }], + // 1200x630 social card (the old logo-dark.jpg was 120x120 but declared 1200x630). + ['meta', { property: 'og:image', content: OG_IMAGE }], ['meta', { property: 'og:image:width', content: '1200' }], ['meta', { property: 'og:image:height', content: '630' }], + ['meta', { property: 'og:image:type', content: 'image/jpeg' }], + ['meta', { property: 'og:image:alt', content: 'DevDeskApp Docs: n8n community node and developer utilities' }], ['meta', { name: 'twitter:card', content: 'summary_large_image' }], ['meta', { name: 'twitter:site', content: '@devdeskapp' }], - ['meta', { name: 'twitter:image', content: 'https://docs.devdeskapp.com/logo-dark.jpg' }], + ['meta', { name: 'twitter:image', content: OG_IMAGE }], [ 'script', { type: 'application/ld+json' }, @@ -78,6 +93,7 @@ export default defineConfig({ ] ], themeConfig: { + n8nNodeVersion: n8nNode.version, logo: { light: '/logo-light.jpg', dark: '/logo-dark.jpg' @@ -94,7 +110,7 @@ export default defineConfig({ { text: '⚙️ Operations Reference', link: '/n8n/operations' }, { text: '📋 Templates Catalog', link: '/templates/' }, { text: '🏛️ Architecture & Solutions', link: '/solutions/' }, - { text: '📦 NPM Package (v0.1.4)', link: 'https://www.npmjs.com/package/n8n-nodes-devdeskapp' }, + { text: `📦 NPM Package (v${n8nNode.version})`, link: N8N_NODE_VERSIONS_URL }, { text: '🌟 n8n Template #21017', link: 'https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities' }, { text: '💰 n8n Template #21130', link: 'https://n8n.io/workflows/21130-automate-salary-and-in-hand-ctc-calculations-with-devdeskapp' }, { text: '🛡️ n8n Template #21376', link: 'https://n8n.io/workflows/21376' }, diff --git a/.vitepress/n8n-node-version.ts b/.vitepress/n8n-node-version.ts new file mode 100644 index 0000000..1df8e93 --- /dev/null +++ b/.vitepress/n8n-node-version.ts @@ -0,0 +1,17 @@ +// Build-time n8n-nodes-devdeskapp version for the docs (Node only, used by config.mts). +// Order: npm registry -> ../n8n-nodes-devdeskapp/package.json (local dev) -> pinned fallback. +import fs from 'node:fs' +import path from 'node:path' +import { N8N_NODE_FALLBACK_VERSION, fetchLatestN8nNodeVersion, validVersion } from './theme/n8n-node' + +export async function resolveN8nNodeVersion(): Promise<{ version: string; source: 'npm' | 'local' | 'fallback' }> { + const fromNpm = await fetchLatestN8nNodeVersion() + if (fromNpm) return { version: fromNpm, source: 'npm' } + try { + // process.cwd() is the docs repo root when running `vitepress build`. + const pkg = JSON.parse(fs.readFileSync(path.resolve(process.cwd(), '..', 'n8n-nodes-devdeskapp', 'package.json'), 'utf8')) + const local = validVersion(pkg.version) + if (local) return { version: local, source: 'local' } + } catch {} + return { version: N8N_NODE_FALLBACK_VERSION, source: 'fallback' } +} diff --git a/.vitepress/theme/components/HeroShowcase.vue b/.vitepress/theme/components/HeroShowcase.vue index d1a45c6..a826d68 100644 --- a/.vitepress/theme/components/HeroShowcase.vue +++ b/.vitepress/theme/components/HeroShowcase.vue @@ -1,28 +1,14 @@