website/.gitlab-ci.yml

152 lines
3.2 KiB
YAML
Raw Permalink Normal View History

2022-06-10 16:45:04 +01:00
stages:
- build
- test
- deploy
2022-06-10 16:45:04 +01:00
static:
2023-08-19 13:40:20 +01:00
image: node:20-slim
2022-06-10 16:45:04 +01:00
stage: build
cache:
2022-06-10 16:56:07 +01:00
key: npm-$CI_COMMIT_REF_SLUG
2022-06-10 16:45:04 +01:00
paths:
2022-06-10 16:56:07 +01:00
- "$CI_PROJECT_DIR/.npm-cache"
2023-07-16 14:47:27 +01:00
before_script:
- apt update && apt install --yes curl
2022-06-10 16:45:04 +01:00
script:
2022-06-10 16:56:07 +01:00
- npm ci --cache .npm-cache --prefer-offline
2022-06-10 16:45:04 +01:00
- npm run build
artifacts:
name: '$CI_JOB_ID-node_modules'
paths:
- ./node_modules
- ./static/build
expire_in: 2 hours
2022-06-10 16:45:04 +01:00
pip:
image: python:3.12-slim
2022-06-10 16:45:04 +01:00
stage: build
2022-06-10 16:56:07 +01:00
variables:
PIP_CACHE_DIR: $CI_PROJECT_DIR/.pip-cache
cache:
key: pip-$CI_COMMIT_REF_SLUG
2022-06-10 16:56:07 +01:00
paths:
- "$CI_PROJECT_DIR/.pip-cache"
before_script:
- apt-get update --yes
2022-08-28 17:49:21 +01:00
- apt-get install --yes build-essential libpq-dev git
2022-06-10 16:45:04 +01:00
script:
- python -m venv env
- source env/bin/activate
2022-11-03 13:59:09 +00:00
- pip install -r dev-requirements.txt
2022-06-10 16:45:04 +01:00
artifacts:
name: 'venv-$CI_JOB_ID'
2022-06-10 16:45:04 +01:00
paths:
- ./env/
expire_in: 2 hours
2022-06-10 16:45:04 +01:00
.python_test_template:
image: python:3.12-slim
2022-06-10 16:45:04 +01:00
stage: test
dependencies:
- pip
2022-06-10 16:45:04 +01:00
before_script:
- source env/bin/activate
2022-06-10 16:56:25 +01:00
variables:
SECRET_KEY: super-secret
test_python:
extends: .python_test_template
2022-07-28 20:41:30 +01:00
services:
2022-09-09 17:16:05 +01:00
- postgres:14-alpine
2022-07-28 20:41:30 +01:00
variables:
POSTGRES_HOST_AUTH_METHOD: trust
2022-07-28 20:41:30 +01:00
DATABASE_URL: postgres://postgres@postgres/postgres
TEST: "true"
script:
- apt-get update && apt-get install --yes git libpq-dev
- ./manage.py collectstatic --noinput --clear
2022-08-17 19:09:07 +01:00
- coverage run ./manage.py test
- coverage report
- coverage xml
coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage.xml
dependencies:
- pip
- static
django_checks:
extends: .python_test_template
2023-07-16 15:02:40 +01:00
dependencies:
- pip
- static
script:
- apt-get update && apt-get install --yes libpq-dev
2023-07-16 15:11:31 +01:00
- ./manage.py collectstatic --noinput --clear
- ./manage.py check
- ./manage.py makemigrations --check --noinput
2022-06-12 15:17:28 +01:00
black:
extends: .python_test_template
script:
- black --check .
2023-07-15 15:10:05 +01:00
ruff:
extends: .python_test_template
script:
2023-07-15 15:10:05 +01:00
- ruff check .
mypy:
extends: .python_test_template
2022-06-12 15:17:28 +01:00
script:
- mypy .
2022-06-12 19:35:06 +01:00
2022-10-05 14:17:00 +01:00
djlint:
extends: .python_test_template
2022-08-03 20:22:02 +01:00
script:
2022-10-05 14:17:00 +01:00
- djlint website/ --lint --check
2022-08-03 20:22:02 +01:00
2022-09-06 08:39:17 +01:00
gunicorn_check:
extends: .python_test_template
script:
- apt-get update && apt-get install --yes libpq-dev
2022-09-06 08:39:17 +01:00
- gunicorn --check-config --config etc/gunicorn.conf.py
2022-08-03 20:55:09 +01:00
npm_lint:
2023-08-19 13:40:20 +01:00
image: node:20-slim
stage: test
dependencies:
- static
2022-06-12 19:35:06 +01:00
script:
- npm run lint
crontab:
image: alpine
stage: test
dependencies: []
before_script:
- apk add --no-cache supercronic
script:
- supercronic -test etc/crontab
container:
image: docker:stable
services:
- docker:dind
variables:
DEV_IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
PROD_IMAGE_TAG: $CI_REGISTRY_IMAGE:latest
DOCKER_BUILDKIT: 1
dependencies: []
stage: deploy
only:
- master
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- docker build --target production -t $DEV_IMAGE_TAG -t $PROD_IMAGE_TAG .
- docker push $CI_REGISTRY_IMAGE