stock-bot/apps/wcag-ada/.gitlab-ci.yml
2025-06-28 11:11:34 -04:00

181 lines
No EOL
4.9 KiB
YAML

stages:
- build
- test
- deploy
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
REGISTRY: $CI_REGISTRY
API_IMAGE: $CI_REGISTRY_IMAGE/api
WORKER_IMAGE: $CI_REGISTRY_IMAGE/worker
DASHBOARD_IMAGE: $CI_REGISTRY_IMAGE/dashboard
# Cache node_modules between jobs
.node_cache: &node_cache
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
- apps/wcag-ada/*/node_modules/
- .bun/
# Docker login before each job
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
# Build stage
build:api:
stage: build
image: docker:24-dind
services:
- docker:24-dind
script:
- docker build -f apps/wcag-ada/api/Dockerfile -t $API_IMAGE:$CI_COMMIT_SHA .
- docker tag $API_IMAGE:$CI_COMMIT_SHA $API_IMAGE:latest
- docker push $API_IMAGE:$CI_COMMIT_SHA
- docker push $API_IMAGE:latest
only:
- main
- develop
- merge_requests
tags:
- docker
build:worker:
stage: build
image: docker:24-dind
services:
- docker:24-dind
script:
- docker build -f apps/wcag-ada/worker/Dockerfile -t $WORKER_IMAGE:$CI_COMMIT_SHA .
- docker tag $WORKER_IMAGE:$CI_COMMIT_SHA $WORKER_IMAGE:latest
- docker push $WORKER_IMAGE:$CI_COMMIT_SHA
- docker push $WORKER_IMAGE:latest
only:
- main
- develop
- merge_requests
tags:
- docker
build:dashboard:
stage: build
image: docker:24-dind
services:
- docker:24-dind
script:
- docker build -f apps/wcag-ada/dashboard/Dockerfile -t $DASHBOARD_IMAGE:$CI_COMMIT_SHA .
- docker tag $DASHBOARD_IMAGE:$CI_COMMIT_SHA $DASHBOARD_IMAGE:latest
- docker push $DASHBOARD_IMAGE:$CI_COMMIT_SHA
- docker push $DASHBOARD_IMAGE:latest
only:
- main
- develop
- merge_requests
tags:
- docker
# Test stage
test:unit:
stage: test
image: oven/bun:1-alpine
<<: *node_cache
before_script:
- cd apps/wcag-ada
- bun install
script:
- bun test
only:
- merge_requests
tags:
- docker
test:lint:
stage: test
image: oven/bun:1-alpine
<<: *node_cache
before_script:
- cd apps/wcag-ada
- bun install
script:
- bun run lint
only:
- merge_requests
tags:
- docker
test:typecheck:
stage: test
image: oven/bun:1-alpine
<<: *node_cache
before_script:
- cd apps/wcag-ada
- bun install
script:
- bun run typecheck
only:
- merge_requests
tags:
- docker
# Deploy to staging
deploy:staging:
stage: deploy
image: bitnami/kubectl:latest
before_script:
- kubectl config set-cluster k8s --server="$KUBE_URL" --insecure-skip-tls-verify=true
- kubectl config set-credentials gitlab --token="$KUBE_TOKEN"
- kubectl config set-context default --cluster=k8s --user=gitlab
- kubectl config use-context default
script:
- kubectl apply -f apps/wcag-ada/k8s/namespace.yaml
- kubectl apply -f apps/wcag-ada/k8s/configmap.yaml
- kubectl apply -f apps/wcag-ada/k8s/secrets.yaml
- kubectl apply -f apps/wcag-ada/k8s/postgres.yaml
- kubectl apply -f apps/wcag-ada/k8s/redis.yaml
- |
kubectl set image deployment/wcag-ada-api api=$API_IMAGE:$CI_COMMIT_SHA -n wcag-ada
kubectl set image deployment/wcag-ada-worker worker=$WORKER_IMAGE:$CI_COMMIT_SHA -n wcag-ada
kubectl set image deployment/wcag-ada-dashboard dashboard=$DASHBOARD_IMAGE:$CI_COMMIT_SHA -n wcag-ada
- kubectl rollout status deployment/wcag-ada-api -n wcag-ada
- kubectl rollout status deployment/wcag-ada-worker -n wcag-ada
- kubectl rollout status deployment/wcag-ada-dashboard -n wcag-ada
environment:
name: staging
url: https://staging.wcag-ada.example.com
only:
- develop
tags:
- docker
# Deploy to production
deploy:production:
stage: deploy
image: bitnami/kubectl:latest
before_script:
- kubectl config set-cluster k8s --server="$KUBE_URL_PROD" --insecure-skip-tls-verify=true
- kubectl config set-credentials gitlab --token="$KUBE_TOKEN_PROD"
- kubectl config set-context default --cluster=k8s --user=gitlab
- kubectl config use-context default
script:
- kubectl apply -f apps/wcag-ada/k8s/namespace.yaml
- kubectl apply -f apps/wcag-ada/k8s/configmap.yaml
- kubectl apply -f apps/wcag-ada/k8s/secrets.yaml
- kubectl apply -f apps/wcag-ada/k8s/postgres.yaml
- kubectl apply -f apps/wcag-ada/k8s/redis.yaml
- |
kubectl set image deployment/wcag-ada-api api=$API_IMAGE:$CI_COMMIT_SHA -n wcag-ada
kubectl set image deployment/wcag-ada-worker worker=$WORKER_IMAGE:$CI_COMMIT_SHA -n wcag-ada
kubectl set image deployment/wcag-ada-dashboard dashboard=$DASHBOARD_IMAGE:$CI_COMMIT_SHA -n wcag-ada
- kubectl rollout status deployment/wcag-ada-api -n wcag-ada
- kubectl rollout status deployment/wcag-ada-worker -n wcag-ada
- kubectl rollout status deployment/wcag-ada-dashboard -n wcag-ada
environment:
name: production
url: https://wcag-ada.example.com
only:
- main
when: manual
tags:
- docker