From 3dcde28071b8e7a0ec008fc4890f78a900e53aac Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Tue, 24 Feb 2026 23:52:27 +0100 Subject: [PATCH] chore: move seeding to onInit and remove redundant seed script --- .gitea/workflows/deploy.yml | 3 -- next-env.d.ts | 2 +- payload.config.ts | 6 ++++ scripts/seed-payload.ts | 68 ------------------------------------- src/payload/seed.ts | 44 ++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 72 deletions(-) delete mode 100644 scripts/seed-payload.ts create mode 100644 src/payload/seed.ts diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 15767c8f..848dd28a 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -358,9 +358,6 @@ jobs: ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${{ needs.prepare.outputs.project_name }}' --env-file '$ENV_FILE' pull" ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${{ needs.prepare.outputs.project_name }}' --env-file '$ENV_FILE' up -d --remove-orphans" - # Automate DB Seeding (Migrations are handled via Payload autoMigrate) - ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${{ needs.prepare.outputs.project_name }}' --env-file '$ENV_FILE' exec -T klz-app pnpm run cms:seed" - ssh root@alpha.mintel.me "docker system prune -f --filter 'until=24h'" - name: ๐Ÿงน Post-Deploy Cleanup (Runner) diff --git a/next-env.d.ts b/next-env.d.ts index 9edff1c7..c4b7818f 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import "./.next/types/routes.d.ts"; +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/payload.config.ts b/payload.config.ts index 8cb88cdb..25b314e6 100644 --- a/payload.config.ts +++ b/payload.config.ts @@ -21,11 +21,17 @@ import { Posts } from './src/payload/collections/Posts'; import { FormSubmissions } from './src/payload/collections/FormSubmissions'; import { Products } from './src/payload/collections/Products'; import { Pages } from './src/payload/collections/Pages'; +import { seedDatabase } from './src/payload/seed'; const filename = fileURLToPath(import.meta.url); const dirname = path.dirname(filename); export default buildConfig({ + onInit: async (payload) => { + if (process.env.NODE_ENV === 'production') { + await seedDatabase(payload); + } + }, admin: { user: Users.slug, importMap: { diff --git a/scripts/seed-payload.ts b/scripts/seed-payload.ts deleted file mode 100644 index 6e49c855..00000000 --- a/scripts/seed-payload.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { getPayload } from 'payload'; -import configPromise from '../payload.config'; - -async function seed() { - console.log('๐ŸŒฑ Starting PayloadCMS seed process...'); - - try { - const payload = await getPayload({ config: configPromise }); - - // Check if any users exist - const { totalDocs } = await payload.find({ - collection: 'users', - limit: 1, - }); - - if (totalDocs === 0) { - console.log('๐Ÿ‘ค No users found. Creating default admin user...'); - await payload.create({ - collection: 'users', - data: { - email: 'admin@mintel.me', - password: 'klz-admin-setup', - firstName: 'KLZ', - lastName: 'Admin', - role: 'admin', - }, - }); - console.log('โœ… Default admin user created successfully.'); - } else { - console.log(`โ„น๏ธ Database already contains ${totalDocs} users. Skipping user creation.`); - } - - // Check if any products exist - const { totalDocs: totalProducts } = await payload.find({ - collection: 'products', - limit: 1, - }); - - if (totalProducts === 0) { - console.log('๐Ÿ“ฆ No products found. Creating smoke test product (NAY2Y)...'); - await payload.create({ - collection: 'products', - data: { - title: 'NAY2Y Smoke Test', - sku: 'SMOKE-TEST-001', - slug: 'nay2y', - description: 'A dummy product for CI/CD smoke testing and OG image verification.', - locale: 'de', - categories: [{ category: 'Power Cables' }], - _status: 'published', - }, - }); - console.log('โœ… Smoke test product created successfully.'); - } else { - console.log( - `โ„น๏ธ Database already contains ${totalProducts} products. Skipping product creation.`, - ); - } - - console.log('โœ… PayloadCMS seed completed successfully!'); - process.exit(0); - } catch (error) { - console.error('โŒ Failed to seed PayloadCMS database:', error); - process.exit(1); - } -} - -seed(); diff --git a/src/payload/seed.ts b/src/payload/seed.ts new file mode 100644 index 00000000..fa23a2e9 --- /dev/null +++ b/src/payload/seed.ts @@ -0,0 +1,44 @@ +import { Payload } from 'payload'; + +export async function seedDatabase(payload: Payload) { + // Check if any users exist + const { totalDocs: totalUsers } = await payload.find({ + collection: 'users', + limit: 1, + }); + + if (totalUsers === 0) { + payload.logger.info('๐Ÿ‘ค No users found. Creating default admin user...'); + await payload.create({ + collection: 'users', + data: { + email: 'admin@mintel.me', + password: 'klz-admin-setup', + }, + }); + payload.logger.info('โœ… Default admin user created successfully.'); + } + + // Check if any products exist + const { totalDocs: totalProducts } = await payload.find({ + collection: 'products', + limit: 1, + }); + + if (totalProducts === 0) { + payload.logger.info('๐Ÿ“ฆ No products found. Creating smoke test product (NAY2Y)...'); + await payload.create({ + collection: 'products', + data: { + title: 'NAY2Y Smoke Test', + sku: 'SMOKE-TEST-001', + slug: 'nay2y', + description: 'A dummy product for CI/CD smoke testing and OG image verification.', + locale: 'de', + categories: [{ category: 'Power Cables' }], + _status: 'published', + }, + }); + payload.logger.info('โœ… Smoke test product created successfully.'); + } +}