stages: - build - test static: image: node:alpine stage: build cache: key: npm-$CI_COMMIT_REF_SLUG paths: - "$CI_PROJECT_DIR/.npm-cache" before_script: - apk add --no-cache bash script: - npm ci --cache .npm-cache --prefer-offline - npm run build artifacts: name: '$CI_JOB_ID-node_modules' paths: - ./node_modules - ./static/build expire_in: 30 mins pip: image: python:3.10 stage: build variables: PIP_CACHE_DIR: $CI_PROJECT_DIR/.pip-cache cache: key: pip-$CI_COMMIT_REF_SLUG paths: - "$CI_PROJECT_DIR/.pip-cache" script: - python -m venv env - source env/bin/activate - pip install -r requirements/dev.txt artifacts: name: 'pip-$CI_JOB_ID' paths: - ./env/ expire_in: 30 mins container: image: docker:stable services: - docker:dind variables: IMAGE_TAG: $CI_REGISTRY_IMAGE:latest DOCKER_BUILDKIT: 1 dependencies: [] stage: test before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: - docker build -t website --target production -t $IMAGE_TAG . - docker push $IMAGE_TAG .python_test_template: &python_test_template image: python:3.10 stage: test dependencies: - pip before_script: - source env/bin/activate variables: SECRET_KEY: super-secret test_python: services: - postgres:13-alpine variables: DATABASE_URL: postgres://postgres@postgres/postgres script: - ./manage.py collectstatic --noinput --clear - 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 <<: *python_test_template dependencies: - pip - static django_checks: <<: *python_test_template script: - ./manage.py check - ./manage.py makemigrations --check --noinput black: <<: *python_test_template script: - black --check . isort: <<: *python_test_template script: - isort --check . flake8: <<: *python_test_template script: - flake8 mypy: <<: *python_test_template script: - mypy . curlylint: <<: *python_test_template script: - curlylint . djhtml: <<: *python_test_template script: - git ls-files '*.html' | xargs djhtml --check --tabwidth 2 npm_lint: image: node:alpine stage: test dependencies: - static script: - npm run lint pip_tools: <<: *python_test_template script: - ./scripts/compile-requirements.sh - git diff - git diff-index --quiet HEAD -- crontab: image: alpine stage: test dependencies: [] before_script: - apk add --no-cache supercronic script: - supercronic -test etc/crontab