image: python:3.10-slim stages: - build - test static: image: node:alpine stage: build cache: key: npm-$CI_COMMIT_REF_SLUG paths: - "$CI_PROJECT_DIR/.npm-cache" 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-slim 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 dev-requirements.txt artifacts: name: 'pip-$CI_JOB_ID' paths: - ./env/ expire_in: 30 mins .python_test_template: &python_test_template stage: test dependencies: - pip - collect_static before_script: - source env/bin/activate variables: SECRET_KEY: super-secret collect_static: <<: *python_test_template stage: build dependencies: - pip - static script: - ./manage.py collectstatic --noinput -v2 --clear artifacts: name: 'static-$CI_JOB_ID' paths: - ./collected-static/ expire_in: 30 mins test_python: <<: *python_test_template script: - ./manage.py check - ./manage.py makemigrations --check --noinput - ./manage.py test django_checks: <<: *python_test_template script: - ./manage.py check - ./manage.py makemigrations --check --noinput