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.');
+ }
+}