Testing og deployment
7. Testing og deployment
Vi har ikke automated unit-tests endnu (deliberate trade-off i v1 for at ship hurtigere). Quality-loop'et er: typecheck + manuel smoke-test + GitHub Actions deploy.
Typecheck
Før hver commit:
npx tsc --noEmit
Exit 0 = clean. Hvis det fejler, fix før commit. TypeScript fanger ~70% af klasser-of-fejl der ellers ville være runtime-bugs.
Husk: typecheck er ikke compileskridt — npm run dev bruger ts-loader der ikke giver samme dybe checks. Kør tsc --noEmit separat.
Manuel smoke-test
Før PR/push:
- Start dev-server (
npm run dev) - Start Azurite (hvis ikke allerede)
- Gå igennem golden path for din ændring:
- Login
- Create record
- Edit record
- View public page
- Delete (med safety-confirm)
- Tjek regression — gå til andre features der bruger samme kode-paths. Brød du noget?
- For UI: tjek både desktop og mobile (browser dev-tools responsive-mode)
Dokumentér hvad du testede i PR-beskrivelsen, så reviewers ved hvad der ER og IKKE ER verificeret.
CI/CD via GitHub Actions
.github/workflows/deploy.yml triggerer på push til master:
name: Deploy to Azure Container Apps
on:
push:
branches: [master]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
- run: npm ci
- run: npx tsc --noEmit
- run: npm run build
- name: Build & push Docker
run: |
docker build -t ${{ env.ACR }}/tesseracms:${{ github.sha }} .
docker push ${{ env.ACR }}/tesseracms:${{ github.sha }}
- uses: azure/login@v2
with:
client-id: ${{ vars.AZ_CLIENT_ID }}
tenant-id: ${{ vars.AZ_TENANT_ID }}
subscription-id: ${{ vars.AZ_SUBSCRIPTION_ID }}
- run: az containerapp update --name tesseracms --resource-group rg-palle-portfolio --image ...
Typisk varighed: 3-4 min. Tjek status på Actions-fanen.
Prod env-vars
Lever på Container App's Containers → Environment variables-blade. Set via Azure Portal eller az CLI.
Kritiske vars:
AZURE_STORAGE_CONNECTION_STRING— peger mod prod-storageAZURE_STORAGE_ACCOUNT_NAME— kort-navnGRAPH_TENANT_ID,GRAPH_CLIENT_ID,GRAPH_CLIENT_SECRET— for user-invite-flowetACS_CONNECTION_STRING,ACS_SENDER_ADDRESS— for transactional mail
Når du tilføjer en ny env-var i koden:
- Tilføj
process.env.XXXreference - Tilføj til
.env.examplemed dummy-value - Sæt prod-værdi i Azure Portal
- Sæt lokal-værdi i
.env.local - Document i
docs/aca-setup-runbook.mdhvis kritisk
Storage-migration mod prod
Når en migration-script skal køre mod prod:
- Test først mod Azurite med
--localflag - Test med
--dry-runmod prod for at se hvad det vil gøre - Tag backup af affected tenants først via
/admin/backups - Kør for real:
npx tsx scripts/migrate-xxx.ts(default = prod hvis script bruger.env.production.local) - Verificér i Storage Explorer at data ser rigtig ud
- Smoke-test affected pages på prod
Roll-back
Hvis et deploy går galt og siten er broken:
- GitHub → Actions → forrige successful run
- Re-run all jobs
- ~3 min senere er forrige image deployed igen
Storage-roll-back er sværere — vi har ingen point-in-time-recovery i Azure Tables. Hvis en migration korrupted data, må vi restore fra backup-ZIP.
Performance-test
Ingen formal performance-suite. Ad-hoc:
- Browser dev-tools → Performance tab → record page-load
- Lighthouse CLI:
npx lighthouse https://<url>for Core Web Vitals - Container App Metrics for CPU/memory under load
For seriøst performance-arbejde: følg TASK-137 (Performance + Core Web Vitals tracking).