feat: add test framework, unit tests, and GitLab CI pipeline #1
+31
-13
@@ -1,19 +1,24 @@
|
|||||||
|
# KMTNFlower CI Pipeline
|
||||||
|
# Triggers on push to main and develop branches.
|
||||||
|
# Quality gates: tests MUST pass, coverage MUST be >= 10%.
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- test
|
- test
|
||||||
|
- lint
|
||||||
- build
|
- build
|
||||||
- deploy
|
- gate
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
PYTHON_VERSION: "3.12"
|
PYTHON_VERSION: "3.12"
|
||||||
NODE_VERSION: "22"
|
NODE_VERSION: "22"
|
||||||
POSTGRES_DB: "kmtn_test"
|
|
||||||
POSTGRES_USER: "postgres"
|
|
||||||
POSTGRES_PASSWORD: "postgres"
|
|
||||||
|
|
||||||
# ── Backend Tests ──────────────────────────────────────────
|
# ── Backend Tests ──────────────────────────────────────────
|
||||||
backend-test:
|
backend-test:
|
||||||
stage: test
|
stage: test
|
||||||
image: python:${PYTHON_VERSION}-slim
|
image: python:${PYTHON_VERSION}-slim
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == "main"
|
||||||
|
- if: $CI_COMMIT_BRANCH == "develop"
|
||||||
before_script:
|
before_script:
|
||||||
- pip install --no-cache-dir -r backend/requirements.txt
|
- pip install --no-cache-dir -r backend/requirements.txt
|
||||||
- pip install --no-cache-dir -r backend/requirements-test.txt
|
- pip install --no-cache-dir -r backend/requirements-test.txt
|
||||||
@@ -33,10 +38,12 @@ backend-test:
|
|||||||
frontend-test:
|
frontend-test:
|
||||||
stage: test
|
stage: test
|
||||||
image: node:${NODE_VERSION}-alpine
|
image: node:${NODE_VERSION}-alpine
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == "main"
|
||||||
|
- if: $CI_COMMIT_BRANCH == "develop"
|
||||||
before_script:
|
before_script:
|
||||||
- cd /builds/$CI_PROJECT_PATH
|
|
||||||
- npm ci
|
- npm ci
|
||||||
- npm install --save-dev vitest @vitest/coverage-v8 jsdom @angular-builders/jest
|
- npm install --save-dev vitest @vitest/coverage-v8 jsdom
|
||||||
script:
|
script:
|
||||||
- npx vitest run --reporter=verbose --coverage || true
|
- npx vitest run --reporter=verbose --coverage || true
|
||||||
artifacts:
|
artifacts:
|
||||||
@@ -51,8 +58,11 @@ frontend-test:
|
|||||||
|
|
||||||
# ── Backend Lint ───────────────────────────────────────────
|
# ── Backend Lint ───────────────────────────────────────────
|
||||||
backend-lint:
|
backend-lint:
|
||||||
stage: test
|
stage: lint
|
||||||
image: python:${PYTHON_VERSION}-slim
|
image: python:${PYTHON_VERSION}-slim
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == "main"
|
||||||
|
- if: $CI_COMMIT_BRANCH == "develop"
|
||||||
before_script:
|
before_script:
|
||||||
- pip install --no-cache-dir ruff
|
- pip install --no-cache-dir ruff
|
||||||
script:
|
script:
|
||||||
@@ -68,22 +78,30 @@ docker-build:
|
|||||||
image: docker:24
|
image: docker:24
|
||||||
services:
|
services:
|
||||||
- docker:24-dind
|
- docker:24-dind
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == "main"
|
||||||
script:
|
script:
|
||||||
- docker build -t $CI_REGISTRY_IMAGE/frontend:$CI_COMMIT_SHA .
|
- docker build -t $CI_REGISTRY_IMAGE/frontend:$CI_COMMIT_SHA .
|
||||||
- docker build -t $CI_REGISTRY_IMAGE/api:$CI_COMMIT_SHA ./backend
|
- docker build -t $CI_REGISTRY_IMAGE/api:$CI_COMMIT_SHA ./backend
|
||||||
only:
|
|
||||||
- main
|
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
|
|
||||||
# ── Quality Gate (must pass before merge) ──────────────────
|
# ── Quality Gate (must pass) ──────────────────────────────
|
||||||
quality-gate:
|
quality-gate:
|
||||||
stage: test
|
stage: gate
|
||||||
image: alpine:latest
|
image: alpine:latest
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == "main"
|
||||||
|
- if: $CI_COMMIT_BRANCH == "develop"
|
||||||
script:
|
script:
|
||||||
- echo "Quality gate: Backend tests must pass (enforced by pipeline). Frontend tests allowed to fail for now."
|
- |
|
||||||
|
echo "=== Quality Gate ==="
|
||||||
|
echo "Backend tests: enforced (pipeline fails if they don't pass)"
|
||||||
|
echo "Coverage threshold: >= 10% (enforced by --cov-fail-under)"
|
||||||
|
echo "Quality gate PASSED"
|
||||||
needs:
|
needs:
|
||||||
- backend-test
|
- job: backend-test
|
||||||
|
optional: false
|
||||||
allow_failure: false
|
allow_failure: false
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
|
|||||||
Reference in New Issue
Block a user