ci: complete pipeline standardization

This commit is contained in:
2026-02-10 22:20:06 +01:00
parent 17bbb2f0e0
commit e50cdade6c
4 changed files with 181 additions and 1061 deletions

33
.gitea/workflows/ci.yml Normal file
View File

@@ -0,0 +1,33 @@
name: CI - Quality Assurance
on:
pull_request:
jobs:
qa:
name: 🧪 QA
runs-on: docker
container:
image: catthehacker/ubuntu:act-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Setup pnpm
uses: pnpm/action-setup@v3
with:
version: 10
- name: 🔐 Registry Auth
run: |
echo "@mintel:registry=https://${{ vars.REGISTRY_HOST || 'npm.infra.mintel.me' }}" > .npmrc
echo "//${{ vars.REGISTRY_HOST || 'npm.infra.mintel.me' }}/:_authToken=${{ secrets.REGISTRY_PASS }}" >> .npmrc
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: 🧪 Parallel Checks
run: |
pnpm lint &
pnpm build &
wait

View File

@@ -1,46 +1,49 @@
# Start from the pre-built Nextjs Base image # Stage 1: Builder
FROM registry.infra.mintel.me/mintel/nextjs:latest AS builder FROM registry.infra.mintel.me/mintel/nextjs:latest AS builder
WORKDIR /app WORKDIR /app
# Ensure we are in a clean, standalone environment # Clean the workspace in case the base image is dirty
RUN rm -rf packages apps pnpm-workspace.yaml 2>/dev/null || true RUN rm -rf ./*
# Build-time environment variables for Next.js # Arguments for build-time configuration
ARG NEXT_PUBLIC_BASE_URL ARG NEXT_PUBLIC_BASE_URL
ARG UMAMI_API_ENDPOINT
ARG NEXT_PUBLIC_TARGET ARG NEXT_PUBLIC_TARGET
ARG DIRECTUS_URL ARG DIRECTUS_URL
ARG UMAMI_API_ENDPOINT
ARG NEXT_PUBLIC_UMAMI_WEBSITE_ID ARG NEXT_PUBLIC_UMAMI_WEBSITE_ID
ARG NPM_TOKEN ARG NPM_TOKEN
# Environment variables for Next.js build
ENV NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL ENV NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL
ENV UMAMI_API_ENDPOINT=$UMAMI_API_ENDPOINT
ENV NEXT_PUBLIC_TARGET=$NEXT_PUBLIC_TARGET ENV NEXT_PUBLIC_TARGET=$NEXT_PUBLIC_TARGET
ENV DIRECTUS_URL=$DIRECTUS_URL ENV DIRECTUS_URL=$DIRECTUS_URL
ENV UMAMI_API_ENDPOINT=$UMAMI_API_ENDPOINT
ENV NEXT_PUBLIC_UMAMI_WEBSITE_ID=$NEXT_PUBLIC_UMAMI_WEBSITE_ID ENV NEXT_PUBLIC_UMAMI_WEBSITE_ID=$NEXT_PUBLIC_UMAMI_WEBSITE_ID
ENV NPM_TOKEN=$NPM_TOKEN
ENV SENTRY_SUPPRESS_TURBOPACK_WARNING=1
ENV SKIP_RUNTIME_ENV_VALIDATION=true ENV SKIP_RUNTIME_ENV_VALIDATION=true
ENV CI=true
# Enable corepack # Enable pnpm
RUN corepack enable RUN corepack enable
# Copy package files # Copy lockfile and manifest for dependency installation caching
COPY package.json pnpm-lock.yaml* .npmrc ./ COPY pnpm-lock.yaml package.json .npmrc* ./
# Install dependencies # Install dependencies with cache mount
RUN pnpm install --no-frozen-lockfile RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
--mount=type=secret,id=NPM_TOKEN \
export NPM_TOKEN=$(cat /run/secrets/NPM_TOKEN 2>/dev/null || echo $NPM_TOKEN) && \
pnpm install --frozen-lockfile
# Copy local files # Copy source code
COPY . . COPY . .
# Build the specific application # Build application
RUN pnpm build RUN pnpm build
# Production runner image # Stage 2: Runner
FROM registry.infra.mintel.me/mintel/runtime:latest AS runner FROM registry.infra.mintel.me/mintel/runtime:latest AS runner
# Production environment configuration WORKDIR /app
ENV HOSTNAME="0.0.0.0" ENV HOSTNAME="0.0.0.0"
ENV PORT=3000 ENV PORT=3000
ENV NODE_ENV=production ENV NODE_ENV=production
@@ -49,9 +52,6 @@ ENV NODE_ENV=production
COPY --from=builder --chown=nextjs:nodejs /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
# Ensure the cache directory specifically is writeable (Mintel Standard #16)
# We copy a small directory or just create it via COPY to avoid RUN chown permission issues
COPY --from=builder --chown=nextjs:nodejs /app/.next/cache ./.next/cache COPY --from=builder --chown=nextjs:nodejs /app/.next/cache ./.next/cache
USER nextjs USER nextjs

View File

@@ -25,8 +25,8 @@
"license": "ISC", "license": "ISC",
"description": "", "description": "",
"dependencies": { "dependencies": {
"@mintel/next-config": "^1.1.13", "@mintel/next-config": "^1.6.0",
"@mintel/next-utils": "^1.1.13", "@mintel/next-utils": "^1.6.0",
"@sentry/nextjs": "^10.38.0", "@sentry/nextjs": "^10.38.0",
"framer-motion": "^12.29.2", "framer-motion": "^12.29.2",
"lucide-react": "^0.562.0", "lucide-react": "^0.562.0",
@@ -42,10 +42,10 @@
"@commitlint/cli": "^20.4.0", "@commitlint/cli": "^20.4.0",
"@commitlint/config-conventional": "^20.4.0", "@commitlint/config-conventional": "^20.4.0",
"@directus/sdk": "^21.0.0", "@directus/sdk": "^21.0.0",
"@mintel/cli": "^1.1.13", "@mintel/cli": "^1.6.0",
"@mintel/eslint-config": "^1.1.13", "@mintel/eslint-config": "^1.6.0",
"@mintel/husky-config": "^1.1.13", "@mintel/husky-config": "^1.6.0",
"@mintel/tsconfig": "^1.1.13", "@mintel/tsconfig": "^1.6.0",
"@tailwindcss/postcss": "^4.1.18", "@tailwindcss/postcss": "^4.1.18",
"@testing-library/jest-dom": "^6.9.1", "@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2", "@testing-library/react": "^16.3.2",

1155
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff