From 13a484ce5940c60d0c83d1fab344eebb8ede4059 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Tue, 3 Mar 2026 12:54:43 +0100 Subject: [PATCH] fix(ci): use explicit registry token instead of GITHUB_TOKEN for docker login --- .gitea/workflows/deploy.yml | 4 +- apps/web/package.json | 4 +- apps/web/payload.config.ts | 34 +++--- .../src/payload/collections/CrmAccounts.ts | 34 ++++++ pnpm-lock.yaml | 110 ++++++++++++++++++ 5 files changed, 166 insertions(+), 20 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index ee3d1a9..691f2e1 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -200,7 +200,7 @@ jobs: - name: 🐳 Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: 🔐 Registry Login - run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login git.infra.mintel.me -u "${{ github.actor }}" --password-stdin + run: echo "${{ secrets.REGISTRY_PASS }}" | docker login git.infra.mintel.me -u "${{ secrets.REGISTRY_USER }}" --password-stdin - name: 🏗️ Build and Push uses: docker/build-push-action@v5 with: @@ -381,7 +381,7 @@ jobs: set -e docker network create '${{ needs.prepare.outputs.project_name }}-internal' || true docker volume create 'mintel-me_payload-db-data' || true - echo '${{ secrets.GITHUB_TOKEN }}' | docker login git.infra.mintel.me -u '${{ github.actor }}' --password-stdin + echo '${{ secrets.REGISTRY_PASS }}' | docker login git.infra.mintel.me -u '${{ secrets.REGISTRY_USER }}' --password-stdin cd $SITE_DIR docker compose -p '${{ needs.prepare.outputs.project_name }}' --env-file '$ENV_FILE' pull docker compose -p '${{ needs.prepare.outputs.project_name }}' --env-file '$ENV_FILE' up -d --remove-orphans diff --git a/apps/web/package.json b/apps/web/package.json index 956fc89..2c68e31 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -39,7 +39,7 @@ "@mintel/content-engine": "link:../../../at-mintel/packages/content-engine", "@mintel/estimation-engine": "link:../../../at-mintel/packages/estimation-engine", "@mintel/meme-generator": "link:../../../at-mintel/packages/meme-generator", - "@mintel/payload-ai": "^1.9.7", + "@mintel/payload-ai": "^1.9.10", "@mintel/pdf": "link:../../../at-mintel/packages/pdf-library", "@mintel/thumbnail-generator": "link:../../../at-mintel/packages/thumbnail-generator", "@next/mdx": "^16.1.6", @@ -103,6 +103,7 @@ "webpack": "^5.96.1", "website-scraper": "^6.0.0", "website-scraper-puppeteer": "^2.0.0", + "xlsx": "^0.18.5", "zod": "3.22.3" }, "devDependencies": { @@ -130,6 +131,7 @@ "eslint-plugin-react-hooks": "^7.0.1", "mime-types": "^3.0.2", "postcss": "^8.4.49", + "require-extensions": "^0.0.4", "tsx": "^4.21.0", "typescript": "5.9.3", "typescript-eslint": "^8.54.0" diff --git a/apps/web/payload.config.ts b/apps/web/payload.config.ts index f997992..28d65da 100644 --- a/apps/web/payload.config.ts +++ b/apps/web/payload.config.ts @@ -48,7 +48,7 @@ export default buildConfig({ CrmInteractions, Projects, ], - globals: [AiSettings as any], + globals: [/* AiSettings as any */], email: nodemailerAdapter({ defaultFromAddress: process.env.MAIL_FROM || "info@mintel.me", defaultFromName: "Mintel.me", @@ -84,24 +84,24 @@ export default buildConfig({ plugins: [ ...(process.env.S3_ENDPOINT ? [ - s3Storage({ - collections: { - media: { - prefix: `${process.env.S3_PREFIX || "mintel-me"}/media`, - }, + s3Storage({ + collections: { + media: { + prefix: `${process.env.S3_PREFIX || "mintel-me"}/media`, }, - bucket: process.env.S3_BUCKET || "", - config: { - credentials: { - accessKeyId: process.env.S3_ACCESS_KEY || "", - secretAccessKey: process.env.S3_SECRET_KEY || "", - }, - region: process.env.S3_REGION || "fsn1", - endpoint: process.env.S3_ENDPOINT, - forcePathStyle: true, + }, + bucket: process.env.S3_BUCKET || "", + config: { + credentials: { + accessKeyId: process.env.S3_ACCESS_KEY || "", + secretAccessKey: process.env.S3_SECRET_KEY || "", }, - }), - ] + region: process.env.S3_REGION || "fsn1", + endpoint: process.env.S3_ENDPOINT, + forcePathStyle: true, + }, + }), + ] : []), ], endpoints: [ diff --git a/apps/web/src/payload/collections/CrmAccounts.ts b/apps/web/src/payload/collections/CrmAccounts.ts index 7d91457..63af4e7 100644 --- a/apps/web/src/payload/collections/CrmAccounts.ts +++ b/apps/web/src/payload/collections/CrmAccounts.ts @@ -93,6 +93,40 @@ export const CrmAccounts: CollectionConfig = { }, ], }, + { + type: "row", + fields: [ + { + name: "industry", + type: "text", + admin: { + width: "50%", + description: "Industry or category of this account (e.g. Messebauer, Handwerk).", + }, + }, + { + name: "websiteStatus", + type: "select", + options: [ + { label: "🟢 Good", value: "gut" }, + { label: "🟡 OK / Average", value: "ok" }, + { label: "🔴 Bad / Old", value: "schlecht" }, + { label: "❓ Unknown", value: "unknown" }, + ], + admin: { + width: "50%", + description: "Quality assessment of their current website.", + }, + }, + ], + }, + { + name: "notes", + type: "textarea", + admin: { + description: "Internal notes and research findings for this account.", + }, + }, { name: "assignedTo", type: "relationship", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1fabde7..441483a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -312,6 +312,9 @@ importers: website-scraper-puppeteer: specifier: ^2.0.0 version: 2.0.0(typescript@5.9.3)(website-scraper@6.0.0) + xlsx: + specifier: ^0.18.5 + version: 0.18.5 zod: specifier: 3.22.3 version: 3.22.3 @@ -388,6 +391,9 @@ importers: postcss: specifier: ^8.4.49 version: 8.5.6 + require-extensions: + specifier: ^0.0.4 + version: 0.0.4 tsx: specifier: ^4.21.0 version: 4.21.0 @@ -6318,6 +6324,13 @@ packages: engines: { node: ">=0.4.0" } hasBin: true + adler-32@1.3.1: + resolution: + { + integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==, + } + engines: { node: ">=0.8" } + adm-zip@0.5.16: resolution: { @@ -7015,6 +7028,13 @@ packages: integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==, } + cfb@1.2.2: + resolution: + { + integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==, + } + engines: { node: ">=0.8" } + chalk@1.1.3: resolution: { @@ -7282,6 +7302,13 @@ packages: } engines: { node: ">=0.10.0" } + codepage@1.15.0: + resolution: + { + integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==, + } + engines: { node: ">=0.8" } + collapse-white-space@2.1.0: resolution: { @@ -7554,6 +7581,14 @@ packages: puppeteer: optional: true + crc-32@1.2.2: + resolution: + { + integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==, + } + engines: { node: ">=0.8" } + hasBin: true + croner@9.1.0: resolution: { @@ -9398,6 +9433,13 @@ packages: } engines: { node: ">= 0.6" } + frac@1.1.2: + resolution: + { + integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==, + } + engines: { node: ">=0.8" } + fraction.js@4.3.7: resolution: { @@ -13563,6 +13605,12 @@ packages: } engines: { node: ">=0.10.0" } + require-extensions@0.0.4: + resolution: + { + integrity: sha512-HO/OZ6m6LxbeIibggEeEYwlHK1I/h7ZXtO5qPeJA1iFhIMMTbsAcGge5hf6zAtxeWh/aUobJVcNJnmtYlEi4vg==, + } + require-from-string@2.0.2: resolution: { @@ -14211,6 +14259,13 @@ packages: } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + ssf@0.11.2: + resolution: + { + integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==, + } + engines: { node: ">=0.8" } + stable-hash@0.0.5: resolution: { @@ -15606,6 +15661,13 @@ packages: engines: { node: ">= 8" } hasBin: true + wmf@1.0.2: + resolution: + { + integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==, + } + engines: { node: ">=0.8" } + word-wrap@1.2.5: resolution: { @@ -15613,6 +15675,13 @@ packages: } engines: { node: ">=0.10.0" } + word@0.3.0: + resolution: + { + integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==, + } + engines: { node: ">=0.8" } + wrap-ansi@6.2.0: resolution: { @@ -15705,6 +15774,14 @@ packages: } engines: { node: ">=8" } + xlsx@0.18.5: + resolution: + { + integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==, + } + engines: { node: ">=0.8" } + hasBin: true + xml-name-validator@5.0.0: resolution: { @@ -20479,6 +20556,8 @@ snapshots: acorn@8.15.0: {} + adler-32@1.3.1: {} + adm-zip@0.5.16: {} agent-base@6.0.2: @@ -20898,6 +20977,11 @@ snapshots: ccount@2.0.1: {} + cfb@1.2.2: + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + chalk@1.1.3: dependencies: ansi-styles: 2.2.1 @@ -21084,6 +21168,8 @@ snapshots: cluster-key-slot@1.1.2: {} + codepage@1.15.0: {} + collapse-white-space@2.1.0: {} color-convert@1.9.3: @@ -21254,6 +21340,8 @@ snapshots: - supports-color - utf-8-validate + crc-32@1.2.2: {} + croner@9.1.0: {} cross-spawn@7.0.6: @@ -22614,6 +22702,8 @@ snapshots: forwarded@0.2.0: {} + frac@1.1.2: {} + fraction.js@4.3.7: {} fraction.js@5.3.4: {} @@ -25530,6 +25620,8 @@ snapshots: require-directory@2.1.1: {} + require-extensions@0.0.4: {} + require-from-string@2.0.2: {} require-in-the-middle@8.0.1: @@ -25970,6 +26062,10 @@ snapshots: srcset@5.0.3: {} + ssf@0.11.2: + dependencies: + frac: 1.1.2 + stable-hash@0.0.5: {} stacktrace-parser@0.1.11: @@ -27000,8 +27096,12 @@ snapshots: dependencies: isexe: 2.0.0 + wmf@1.0.2: {} + word-wrap@1.2.5: {} + word@0.3.0: {} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -27043,6 +27143,16 @@ snapshots: xdg-basedir@4.0.0: {} + xlsx@0.18.5: + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + xml-name-validator@5.0.0: {} xmlchars@2.2.0: {}