Files
planflow/.github/workflows/ci.yml
T
MichaelandClaude Opus 5 a0524c56d7 Sortir la démonstration du chemin d'installation
Une instance neuve passait par le seed pour être utilisable. Or le seed installe
une fiction : « Maison Rivage », des salariés inventés, quatre semaines de
planning, des absences. Sur une instance de travail, ces noms se confondent avec
de vrais salariés dans l'annuaire et au registre du personnel.

Le trou qu'il bouchait était réel : après les migrations, une instance avait le
schéma et rien à quoi l'accrocher. Aucun type d'absence, donc aucune demande
saisissable. Aucune étiquette, donc aucun créneau nommé. Aucune convention, donc
un moteur de règles muet qui laisse passer une semaine de soixante heures sans
rien dire.

L'écran d'installation pose donc désormais les référentiels : les douze
étiquettes, cinq types d'absence, la convention d'amorce IDCC 1517 avec
l'origine de chacun de ses paramètres, les durées de conservation et les jours
fériés des deux prochaines années. Ce ne sont pas des exemples mais des minima,
tous modifiables ensuite depuis les réglages.

Trois choses restent délibérément absentes. Aucun dimanche du maire : la liste
vient d'un arrêté municipal, et en inventer rendrait opposable un quota que
personne n'a accordé. Aucun code Silae sur les types d'absence : la
correspondance appartient au dossier du client. Aucun salarié, aucun créneau,
aucune absence.

Le seed devient `prisma/seed-demo.ts`, réservé au harnais Playwright. `db:seed`
disparaît au profit de `db:seed:demo` : il n'y a plus rien à semer pour
démarrer, et un nom qui le dit vaut mieux qu'un commentaire qui l'explique.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 13:37:19 +02:00

92 lines
2.6 KiB
YAML

name: CI
on:
push:
branches: [main]
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
# Test-only values. Real secrets never live in CI configuration.
# Compte applicatif, **pas** le superutilisateur d'amorçage : un
# superutilisateur contourne la row-level security, et la suite passerait sans
# jamais éprouver la seconde couche d'isolation — présente en base, absente
# des faits.
DATABASE_URL: postgresql://planflow_app:planflow_app@localhost:5432/planflow_test
# Le harnais de tests fabrique des états que l'interface ne pose pas ; il lui
# faut une connexion qui traverse les comptes, comme un exploitant.
ADMIN_DATABASE_URL: postgresql://planflow:planflow@localhost:5432/planflow_test
ENCRYPTION_KEY: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
APP_URL: http://127.0.0.1:3100
jobs:
verify:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16-alpine
env:
POSTGRES_USER: planflow
POSTGRES_PASSWORD: planflow
POSTGRES_DB: planflow_test
ports: ['5432:5432']
options: >-
--health-cmd "pg_isready -U planflow"
--health-interval 5s
--health-timeout 5s
--health-retries 10
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- run: pnpm install --frozen-lockfile
- name: Créer le rôle applicatif, soumis à la RLS
run: |
PGPASSWORD=planflow psql -h localhost -U planflow -d planflow_test -v ON_ERROR_STOP=1 <<'SQL'
CREATE ROLE planflow_app LOGIN PASSWORD 'planflow_app'
NOSUPERUSER NOCREATEDB NOCREATEROLE NOBYPASSRLS;
ALTER DATABASE planflow_test OWNER TO planflow_app;
ALTER SCHEMA public OWNER TO planflow_app;
GRANT ALL ON SCHEMA public TO planflow_app;
SQL
- run: pnpm db:generate
- name: Appliquer les migrations
run: pnpm db:deploy
- name: Installer le jeu de démonstration (Playwright)
run: pnpm db:seed:demo
- run: pnpm typecheck
- run: pnpm lint
- run: pnpm test
- run: pnpm build
- name: Installer le navigateur Playwright
run: pnpm exec playwright install --with-deps chromium
- run: pnpm test:e2e
- uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-report
path: playwright-report/
retention-days: 7