# Dockerfile.tools — on-demand ops-image för db-migreringar och seed mot prod. # Körs INTE som långkörande tjänst (profile: tools i compose). Anropas via: # docker compose -f --profile tools run --rm app-tools tsx packages/database/src/migrate.ts # docker compose -f --profile tools run --rm app-tools tsx packages/database/src/seed/run.ts # # Seed är idempotent (onConflictDoUpdate/DoNothing) och rör ALDRIG users-tabellen. # TRUNCATE i seed är dubbelgrindad (kräver --test OCH databasnamn som slutar på _test), # så en körning utan --test mot prod-databasen "cibello" kan aldrig radera data. FROM node:22-alpine WORKDIR /build # tsx globalt (root-devberoende i monorepot) så vi slipper full workspace-install. RUN corepack enable && npm install -g tsx@4 # Endast det @app/database behöver: root-config + packages/ (inga apps/ krävs). COPY package.json pnpm-workspace.yaml pnpm-lock.yaml .npmrc ./ COPY tsconfig.base.json turbo.json ./ COPY brand.config.json ./ COPY packages ./packages # migrate.ts läser migreringsfilerna (meta/_journal.json + .sql) härifrån COPY infrastructure/migrations ./infrastructure/migrations # Installera @app/database + dess beroende-closure (drizzle-orm, pg, nutrition-engine, # analytics, shared-types). Faller tillbaka till icke-frozen om lockfile-koll klagar # på att apps/* saknas i den partiella utcheckningen. RUN pnpm install --frozen-lockfile --filter @app/database... \ || pnpm install --no-frozen-lockfile --filter @app/database... # Ingen tjänst — körs med explicit kommando. CMD ["node","-e","console.log('app-tools: ange kommando, t.ex. tsx packages/database/src/seed/run.ts')"]