From 1cdab9835fe63e86bbd64fe55c32623dbe676ba8 Mon Sep 17 00:00:00 2001 From: Innei Date: Sun, 23 Nov 2025 20:46:49 +0800 Subject: [PATCH] feat: update GitHub Actions workflow and reorganize route imports - Added a step to the GitHub Actions workflow in `core-image.yml` to trigger a Dokploy deployment via a webhook. - Reorganized route imports in `routes.ts` to improve clarity and maintainability, adding new routes for storage providers and SaaS documentation. Signed-off-by: Innei --- .github/workflows/core-image.yml | 4 + apps/docs/src/routes.ts | 302 +++++++++++++++---------------- 2 files changed, 155 insertions(+), 151 deletions(-) diff --git a/.github/workflows/core-image.yml b/.github/workflows/core-image.yml index c447482d..dfdf1e4a 100644 --- a/.github/workflows/core-image.yml +++ b/.github/workflows/core-image.yml @@ -51,3 +51,7 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + + - name: Trigger Dokploy deploy + run: | + curl -X POST "${{ secrets.DOKPLOY_WEBHOOK_URL }}" diff --git a/apps/docs/src/routes.ts b/apps/docs/src/routes.ts index fcce4df1..8d4b61e1 100644 --- a/apps/docs/src/routes.ts +++ b/apps/docs/src/routes.ts @@ -41,301 +41,301 @@ export const routes: RouteConfig[] = [ component: Route0, title: 'Overview', meta: { - "title": "Overview", - "description": "Deploy a photo gallery in minutes—no database required.", - "createdAt": "2025-07-20T22:35:03+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "1" - } + title: 'Overview', + description: 'Deploy a photo gallery in minutes—no database required.', + createdAt: '2025-07-20T22:35:03+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '1', + }, }, { path: '/builder/cli', component: Route1, title: 'CLI & Run Modes', meta: { - "title": "CLI & Run Modes", - "description": "Per-run flags, concurrency behavior, and cluster vs worker execution.", - "createdAt": "2025-11-23T19:00:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "2" - } + title: 'CLI & Run Modes', + description: 'Per-run flags, concurrency behavior, and cluster vs worker execution.', + createdAt: '2025-11-23T19:00:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '2', + }, }, { path: '/getting-started/quick-start', component: Route2, title: 'Quick Start', meta: { - "title": "Quick Start", - "description": "Get your gallery running in about 5 minutes.", - "createdAt": "2025-11-14T22:20:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "2" - } + title: 'Quick Start', + description: 'Get your gallery running in about 5 minutes.', + createdAt: '2025-11-14T22:20:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '2', + }, }, { path: '/architecture', component: Route3, title: 'Architecture', meta: { - "title": "Architecture", - "description": "Understand how Afilmory works—static vs. SSR deployment modes.", - "createdAt": "2025-11-14T22:25:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "3" - } + title: 'Architecture', + description: 'Understand how Afilmory works—static vs. SSR deployment modes.', + createdAt: '2025-11-14T22:25:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '3', + }, }, { path: '/builder/config', component: Route4, title: 'Configuration', meta: { - "title": "Configuration", - "description": "How to declare storage, system defaults, and plugins in builder.config.ts.", - "createdAt": "2025-11-23T19:00:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "3" - } + title: 'Configuration', + description: 'How to declare storage, system defaults, and plugins in builder.config.ts.', + createdAt: '2025-11-23T19:00:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '3', + }, }, { path: '/builder/pipeline', component: Route5, title: 'Processing Flow', meta: { - "title": "Processing Flow", - "description": "End-to-end pipeline, ordering, and incremental rules backed by the code.", - "createdAt": "2025-11-23T19:00:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "4" - } + title: 'Processing Flow', + description: 'End-to-end pipeline, ordering, and incremental rules backed by the code.', + createdAt: '2025-11-23T19:00:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '4', + }, }, { path: '/builder/plugins', component: Route6, title: 'Plugins', meta: { - "title": "Plugins", - "description": "Lifecycle hooks, authoring a custom plugin, and built-in plugins.", - "createdAt": "2025-11-23T19:00:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "5" - } + title: 'Plugins', + description: 'Lifecycle hooks, authoring a custom plugin, and built-in plugins.', + createdAt: '2025-11-23T19:00:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '5', + }, }, { path: '/builder/built-ins', component: Route7, title: 'Built-in Plugins', meta: { - "title": "Built-in Plugins", - "description": "Ready-to-use plugins shipped with the builder and how to configure them.", - "createdAt": "2025-11-23T19:35:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "6" - } + title: 'Built-in Plugins', + description: 'Ready-to-use plugins shipped with the builder and how to configure them.', + createdAt: '2025-11-23T19:35:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '6', + }, }, { path: '/storage/providers', component: Route8, title: 'Storage Providers', meta: { - "title": "Storage Providers", - "description": "Choose a storage provider for your photo collection.", - "createdAt": "2025-11-14T22:40:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "30" - } + title: 'Storage Providers', + description: 'Choose a storage provider for your photo collection.', + createdAt: '2025-11-14T22:40:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '30', + }, }, { path: '/storage/providers/s3', component: Route9, title: 'S3 / S3-Compatible', meta: { - "title": "S3 / S3-Compatible", - "description": "Configure S3 or S3-compatible storage for your photo collection.", - "createdAt": "2025-11-14T22:10:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "32" - } + title: 'S3 / S3-Compatible', + description: 'Configure S3 or S3-compatible storage for your photo collection.', + createdAt: '2025-11-14T22:10:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '32', + }, }, { path: '/storage/providers/b2', component: Route10, title: 'B2 (Backblaze B2)', meta: { - "title": "B2 (Backblaze B2)", - "description": "Configure Backblaze B2 storage for cost-effective cloud storage.", - "createdAt": "2025-11-14T22:10:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "33" - } + title: 'B2 (Backblaze B2)', + description: 'Configure Backblaze B2 storage for cost-effective cloud storage.', + createdAt: '2025-11-14T22:10:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '33', + }, }, { path: '/storage/providers/github', component: Route11, title: 'GitHub Storage', meta: { - "title": "GitHub Storage", - "description": "Use a GitHub repository as photo storage for simple deployments.", - "createdAt": "2025-11-14T22:10:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "34" - } + title: 'GitHub Storage', + description: 'Use a GitHub repository as photo storage for simple deployments.', + createdAt: '2025-11-14T22:10:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '34', + }, }, { path: '/storage/providers/local', component: Route12, title: 'Local Storage', meta: { - "title": "Local Storage", - "description": "Use local file system paths for development and self-hosting.", - "createdAt": "2025-11-14T22:10:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "35" - } + title: 'Local Storage', + description: 'Use local file system paths for development and self-hosting.', + createdAt: '2025-11-14T22:10:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '35', + }, }, { path: '/saas/architecture', component: Route13, title: 'SaaS Architecture', meta: { - "title": "SaaS Architecture", - "description": "Tenant model, domain routing, OAuth flow, and data injection paths.", - "createdAt": "2025-11-23T20:20:00+08:00", - "lastModified": "2025-11-23T20:44:02+08:00", - "order": "36" - } + title: 'SaaS Architecture', + description: 'Tenant model, domain routing, OAuth flow, and data injection paths.', + createdAt: '2025-11-23T20:20:00+08:00', + lastModified: '2025-11-23T20:44:02+08:00', + order: '36', + }, }, { path: '/storage/providers/eagle', component: Route14, title: 'Eagle Storage', meta: { - "title": "Eagle Storage", - "description": "Publish directly from an Eagle 4 library with filtering support.", - "createdAt": "2025-11-14T22:10:00+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "36" - } + title: 'Eagle Storage', + description: 'Publish directly from an Eagle 4 library with filtering support.', + createdAt: '2025-11-14T22:10:00+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '36', + }, }, { path: '/saas/deployment', component: Route15, title: 'SaaS Deployment', meta: { - "title": "SaaS Deployment", - "description": "Deploy the multi-tenant stack (core API + OAuth gateway) with subdomains and custom domains.", - "createdAt": "2025-11-23T19:50:00+08:00", - "lastModified": "2025-11-23T20:44:02+08:00", - "order": "37" - } + title: 'SaaS Deployment', + description: 'Deploy the multi-tenant stack (core API + OAuth gateway) with subdomains and custom domains.', + createdAt: '2025-11-23T19:50:00+08:00', + lastModified: '2025-11-23T20:44:02+08:00', + order: '37', + }, }, { path: '/builder', component: Route16, title: 'Builder', meta: { - "title": "Builder", - "description": "Overview of the photo pipeline and how to choose the right entrypoint for your run.", - "createdAt": "2025-11-14T22:10:00+08:00", - "lastModified": "2025-11-23T20:44:02+08:00", - "order": "40" - } + title: 'Builder', + description: 'Overview of the photo pipeline and how to choose the right entrypoint for your run.', + createdAt: '2025-11-14T22:10:00+08:00', + lastModified: '2025-11-23T20:44:02+08:00', + order: '40', + }, }, { path: '/deployment', component: Route17, title: 'Deployment', meta: { - "title": "Deployment", - "description": "Deploy your gallery to static hosting, SSR platforms, or Docker.", - "createdAt": "2025-07-20T22:35:03+08:00", - "lastModified": "2025-11-23T20:44:02+08:00", - "order": "50" - } + title: 'Deployment', + description: 'Deploy your gallery to static hosting, SSR platforms, or Docker.', + createdAt: '2025-07-20T22:35:03+08:00', + lastModified: '2025-11-23T20:44:02+08:00', + order: '50', + }, }, { path: '/deployment/docker', component: Route18, title: 'Docker', meta: { - "title": "Docker", - "description": "Deploy Afilmory using Docker for consistent, containerized deployments.", - "createdAt": "2025-07-20T22:35:03+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "51" - } + title: 'Docker', + description: 'Deploy Afilmory using Docker for consistent, containerized deployments.', + createdAt: '2025-07-20T22:35:03+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '51', + }, }, { path: '/deployment/github-pages', component: Route19, title: 'GitHub Pages', meta: { - "title": "GitHub Pages", - "description": "Deploy your gallery to GitHub Pages for free static hosting.", - "createdAt": "2025-07-20T22:35:03+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "52" - } + title: 'GitHub Pages', + description: 'Deploy your gallery to GitHub Pages for free static hosting.', + createdAt: '2025-07-20T22:35:03+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '52', + }, }, { path: '/deployment/cloudflare-pages', component: Route20, title: 'Cloudflare Pages', meta: { - "title": "Cloudflare Pages", - "description": "Deploy your gallery to Cloudflare Pages for fast global CDN distribution.", - "createdAt": "2025-07-20T22:35:03+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "53" - } + title: 'Cloudflare Pages', + description: 'Deploy your gallery to Cloudflare Pages for fast global CDN distribution.', + createdAt: '2025-07-20T22:35:03+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '53', + }, }, { path: '/deployment/vercel', component: Route21, title: 'Vercel', meta: { - "title": "Vercel", - "description": "Deploy your gallery to Vercel with server-side rendering support.", - "createdAt": "2025-07-20T22:35:03+08:00", - "lastModified": "2025-11-23T19:40:52+08:00", - "order": "54" - } + title: 'Vercel', + description: 'Deploy your gallery to Vercel with server-side rendering support.', + createdAt: '2025-07-20T22:35:03+08:00', + lastModified: '2025-11-23T19:40:52+08:00', + order: '54', + }, }, { path: '/saas', component: Route22, title: 'SaaS Mode', meta: { - "title": "SaaS Mode", - "description": "Why run Afilmory as a multi-tenant SaaS, what it can do, and where to start.", - "createdAt": "2025-11-23T20:20:00+08:00", - "lastModified": "2025-11-23T20:44:02+08:00", - "order": "60" - } + title: 'SaaS Mode', + description: 'Why run Afilmory as a multi-tenant SaaS, what it can do, and where to start.', + createdAt: '2025-11-23T20:20:00+08:00', + lastModified: '2025-11-23T20:44:02+08:00', + order: '60', + }, }, { path: '/saas/cms', component: Route23, title: 'CMS & Live Updates', meta: { - "title": "CMS & Live Updates", - "description": "How SaaS mode lets users change photos and metadata and see updates instantly without rebuilding.", - "createdAt": "2025-11-23T20:26:00+08:00", - "lastModified": "2025-11-23T20:44:02+08:00", - "order": "61" - } + title: 'CMS & Live Updates', + description: 'How SaaS mode lets users change photos and metadata and see updates instantly without rebuilding.', + createdAt: '2025-11-23T20:26:00+08:00', + lastModified: '2025-11-23T20:44:02+08:00', + order: '61', + }, }, { path: '/docs-site', component: Route24, title: 'Docs Site', meta: { - "title": "Docs Site", - "description": "Docs site introduction and contribution guide", - "createdAt": "2025-09-11T17:05:55+08:00", - "lastModified": "2025-11-23T20:22:24+08:00", - "order": "90" - } - } + title: 'Docs Site', + description: 'Docs site introduction and contribution guide', + createdAt: '2025-09-11T17:05:55+08:00', + lastModified: '2025-11-23T20:22:24+08:00', + order: '90', + }, + }, ] export default routes