From 9566e17f9003434cd70bd7abc7996829c3174627 Mon Sep 17 00:00:00 2001 From: Jordy Hoogeveen Date: Fri, 4 Sep 2026 12:24:22 +0200 Subject: [PATCH] Azure DevOps pipeline verwijderd Wordt niet gebruikt. azure-pipelines.yml is weg, en de verwijzingen ernaar in README.md, BEHEER.md (sectie CI/CD), Changelog.md en .dockerignore zijn opgeruimd. De testsuite draait onveranderd lokaal via test.ps1 / test.sh. Co-Authored-By: Claude Opus 5 (1M context) --- .dockerignore | 1 - BEHEER.md | 15 ---- Changelog.md | 4 +- README.md | 4 +- azure-pipelines.yml | 203 -------------------------------------------- 5 files changed, 2 insertions(+), 225 deletions(-) delete mode 100644 azure-pipelines.yml diff --git a/.dockerignore b/.dockerignore index 9e31b63..cde8378 100644 --- a/.dockerignore +++ b/.dockerignore @@ -15,4 +15,3 @@ release.ps1 release.sh test.ps1 test.sh -azure-pipelines.yml diff --git a/BEHEER.md b/BEHEER.md index 6e4b2fa..46c28b1 100644 --- a/BEHEER.md +++ b/BEHEER.md @@ -97,21 +97,6 @@ tag op een Raspberry Pi en op een x86-server werkt. --- -## CI/CD (Azure DevOps) - -`azure-pipelines.yml` doet in drie stages hetzelfde als de lokale scripts: - -| Stage | Wat | -|---|---| -| `Test` | `docker build --target test` + `docker run` → backend-tests | -| `Build` | productie-image bouwen en smoketesten tegen een postgres-container | -| `Publish` | multi-arch image (amd64 + arm64) pushen naar de registry | - -`Publish` loopt alleen op `main`/`master` of een tag. Vul vóór het eerste gebruik -de variabele `dockerRegistryServiceConnection` in met de naam van je Docker -Registry service connection in Azure DevOps. - ---- ## Docker ```bash diff --git a/Changelog.md b/Changelog.md index 7bf1b4e..a938093 100644 --- a/Changelog.md +++ b/Changelog.md @@ -41,14 +41,12 @@ API-routes, SPA-fallback, cache-headers en security-headers - `test.ps1` / `test.sh`: backend-tests, productiebuild en smoketest op de echte 2-container stack -- `azure-pipelines.yml`: CI/CD met stages Test → Build (incl. smoketest) → - Publish (multi-arch push, alleen op main/master of een tag) - `.env.example`, `.dockerignore` en `.gitignore` - `STATIC_DIR` als omgevingsvariabele (map met de frontend-build) - Dependency-check als eerste stap van de testsuite: `docker/check-updates.mjs` vergelijkt beide `package.json`'s met het npm-register, met bewuste uitzonderingen in `docker/update-exceptions.json` (`-Strict` om te falen, - `-SkipDeps` om over te slaan). Draait ook informatief in de pipeline + `-SkipDeps` om over te slaan) - ESLint flat configs (`frontend/eslint.config.js`, `backend/eslint.config.js`) — `npm run lint` werkte voorheen niet, er was geen configuratie - Lockfiles voor beide packages (`backend/package-lock.json` was er niet) diff --git a/README.md b/README.md index e206d50..d0ebb2b 100644 --- a/README.md +++ b/README.md @@ -138,7 +138,6 @@ vibefinance/ ├── .dockerignore ├── docker-compose.yml # Productie: app + postgres ├── docker-compose.dev.yml # Dev: app (API + Vite) + postgres -├── azure-pipelines.yml # CI/CD: test → build+smoketest → publish ├── .env.example # Kopieer naar .env en vul in ├── package.json # Versienummer — single source of truth ├── dev.ps1 / dev.sh # Dev script (bouwen, starten, logs, pushen) @@ -269,12 +268,11 @@ Het schema wordt bij het starten van de app aangemaakt/bijgewerkt via | Laag | Wat | Commando | |---|---|---| +| Dependencies | Staan `package.json`'s op de laatste versies | `.\test.ps1 -Unit` | | Backend | API-routes, SPA-fallback, cache- en security-headers | `.\test.ps1 -Unit` | | Build | Vite-build + productie-image | `.\test.ps1 -NoSmoke` | | Integratie | Smoketest op de echte app + postgres stack | `.\test.ps1` | -In CI draaien dezelfde stappen via `azure-pipelines.yml`. - --- ## 🛠️ Beheer diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index 69bc53a..0000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,203 +0,0 @@ -# ╔══════════════════════════════════════════════════════════════════════════╗ -# ║ VibeFinance CI/CD — 2-container opzet ║ -# ║ ║ -# ║ Eén app-image (Express API + gebouwde Vite-frontend) + postgres. ║ -# ║ ║ -# ║ Stages: ║ -# ║ Test backend-tests (Dockerfile target 'test') ║ -# ║ Build productie-image bouwen + smoketest op de echte stack ║ -# ║ Publish multi-arch image (amd64 + arm64) naar de registry pushen ║ -# ║ ║ -# ║ Vereist in Azure DevOps: ║ -# ║ - Service connection (type: Docker Registry) naar de registry; vul ║ -# ║ de naam in bij variabele dockerRegistryServiceConnection ║ -# ║ - Agent met Docker en buildx (ubuntu-latest heeft dit) ║ -# ╚══════════════════════════════════════════════════════════════════════════╝ - -trigger: - branches: - include: - - main - - master - - feature/* - tags: - include: - - "*" - -pr: - branches: - include: - - main - - master - -variables: - # ── Aanpassen per omgeving ────────────────────────────────────────────── - dockerRegistryServiceConnection: "vibefinance-registry" - registryHost: "vibehoogie.duckdns.org/vibe" - imageName: "vibefinance-app" - # ── Afgeleid ──────────────────────────────────────────────────────────── - imageRepo: "$(registryHost)/$(imageName)" - -pool: - vmImage: ubuntu-latest - -stages: - - # ── Stage 1: tests ────────────────────────────────────────────────────── - - stage: Test - displayName: Tests - jobs: - - job: BackendTests - displayName: Backend-tests (node --test) - steps: - - checkout: self - fetchDepth: 1 - - # Informatief: meldt dependencies die niet op de laatste versie staan. - # Bewuste uitzonderingen staan in docker/update-exceptions.json. - - script: | - set -euo pipefail - node docker/check-updates.mjs - displayName: Dependency-check (informatief) - continueOnError: true - - - script: | - set -euo pipefail - docker build --target test -t vibefinance/app:test . - docker run --rm vibefinance/app:test - displayName: npm test (in Docker, zonder database) - - # ── Stage 2: image bouwen en smoketesten ──────────────────────────────── - - stage: Build - displayName: Build en smoketest - dependsOn: Test - jobs: - - job: BuildImage - displayName: Productie-image + smoketest - steps: - - checkout: self - fetchDepth: 1 - - - script: | - set -euo pipefail - APP_VERSION=$(node -p "require('./package.json').version") - echo "##vso[task.setvariable variable=appVersion]$APP_VERSION" - echo "Versie: $APP_VERSION" - displayName: Versienummer uit package.json - - - script: | - set -euo pipefail - docker build --target production \ - --build-arg APP_VERSION=$(appVersion) \ - --build-arg VITE_APP_VERSION=$(appVersion) \ - --build-arg VITE_API_URL=/api \ - -t vibefinance/app:ci . - displayName: Productie-image bouwen (incl. Vite-build) - - - script: | - set -euo pipefail - docker network create vibefinance-ci - - docker run -d --name ci-postgres --network vibefinance-ci \ - -e POSTGRES_DB=vibefinance \ - -e POSTGRES_USER=vibefinance \ - -e POSTGRES_PASSWORD=cipassword \ - postgres:18-alpine - - for i in $(seq 1 30); do - if docker exec ci-postgres pg_isready -U vibefinance >/dev/null 2>&1; then break; fi - sleep 2 - done - - docker run -d --name ci-app --network vibefinance-ci \ - -e NODE_ENV=production \ - -e JWT_SECRET=ci-secret \ - -e UPDATE_CHECK_URL= \ - -e DATABASE_URL=postgresql://vibefinance:cipassword@ci-postgres:5432/vibefinance \ - -p 3001:3001 \ - vibefinance/app:ci - - gezond=0 - for i in $(seq 1 30); do - if curl -fsS http://localhost:3001/api/health | grep -q ok; then gezond=1; break; fi - sleep 2 - done - if [ "$gezond" -ne 1 ]; then - echo "App werd niet gezond. Logs:" - docker logs ci-app - exit 1 - fi - echo "/api/health : ok" - - curl -fsS http://localhost:3001/ | grep -q root - echo "/ : index.html" - - curl -fsS http://localhost:3001/voortgang | grep -q root - echo "/voortgang : index.html (SPA-fallback)" - - code=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3001/api/bestaat-niet) - test "$code" = "404" - echo "/api/... : 404 JSON" - displayName: Smoketest op app + postgres - - - script: | - docker logs ci-app || true - docker rm -f ci-app ci-postgres || true - docker network rm vibefinance-ci || true - displayName: Opruimen - condition: always() - - # ── Stage 3: publiceren ───────────────────────────────────────────────── - # Alleen vanaf main/master of een tag; feature-branches en PRs stoppen na Build. - - stage: Publish - displayName: Publiceren naar registry - dependsOn: Build - condition: | - and(succeeded(), - or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), - eq(variables['Build.SourceBranch'], 'refs/heads/master'), - startsWith(variables['Build.SourceBranch'], 'refs/tags/'))) - jobs: - - job: PushImage - displayName: Multi-arch image pushen - steps: - - checkout: self - fetchDepth: 1 - - - script: | - set -euo pipefail - APP_VERSION=$(node -p "require('./package.json').version") - echo "##vso[task.setvariable variable=appVersion]$APP_VERSION" - displayName: Versienummer bepalen - - - task: Docker@2 - displayName: Inloggen op de registry - inputs: - command: login - containerRegistry: $(dockerRegistryServiceConnection) - - - script: | - set -euo pipefail - docker run --privileged --rm tonistiigi/binfmt --install arm64 - docker buildx create --name vibefinance --use - docker buildx inspect --bootstrap - displayName: buildx voor arm64 (Raspberry Pi) klaarzetten - - - script: | - set -euo pipefail - docker buildx build \ - --platform linux/amd64,linux/arm64 \ - --target production \ - --build-arg APP_VERSION=$(appVersion) \ - --build-arg VITE_APP_VERSION=$(appVersion) \ - --build-arg VITE_API_URL=/api \ - -t $(imageRepo):$(appVersion) \ - -t $(imageRepo):latest \ - --push . - displayName: Bouwen en pushen (amd64 + arm64) - - - script: | - echo "Gepubliceerd:" - echo " $(imageRepo):$(appVersion)" - echo " $(imageRepo):latest" - displayName: Samenvatting