stages: - test - docker - deploy tests: stage: test image: registry.gitlab.com/hashbangfr/docker_archlinux:python variables: DJANGO_SETTINGS_MODULE: "la_chariotte.settings" DB_NAME: "postgres" DB_USER: "postgres" DB_PASSWORD: "mysecretpassword" DB_HOST: "postgres" DB_PORT: "5432" POSTGRES_HOST_AUTH_METHOD: "trust" services: - postgres:13 script: - export CACHE_PATH="/venvs/${CI_PROJECT_NAME}/$(date +week-%V-%Y)" - if [[ "$CI_COMMIT_BRANCH" == *"--no-cache"* ]] ; then export CACHE_PATH="/venvs/$CI_COMMIT_SHORT_SHA"; fi - echo "Creating virtual env..." - if [ ! -d $CACHE_PATH/venv ] ; then virtualenv --python=python3.11 $CACHE_PATH/venv ; fi - $CACHE_PATH/venv/bin/pip install --upgrade pip - echo "Virtual env created." - echo "Running tests..." - source $CACHE_PATH/venv/bin/activate - pip install -U -r requirements.txt - pip install -U -r dev-requirements.txt - pytest --create-db --cov --cov-report=xml - if [ "$CI_COMMIT_REF_NAME" = 'main' ] ; then exit 0 ; fi - if [ "$CI_COMMIT_REF_NAME" = 'develop' ] ; then git fetch origin main ; diff-cover coverage.xml --fail-under=90 --compare-branch origin/main && exit 0 ; fi - git fetch origin develop ; diff-cover coverage.xml --fail-under=90 --compare-branch origin/develop - echo "Tests done." build_docker_and_publish: stage: docker only: - main - develop image: docker:git tags: - dind services: - docker:dind script: - docker build --pull --no-cache -f Dockerfile -t $CI_REGISTRY/hashbangfr/la_chariotte:${CI_COMMIT_REF_NAME}-latest . - docker tag $CI_REGISTRY/hashbangfr/la_chariotte:${CI_COMMIT_REF_NAME}-latest $CI_REGISTRY/hashbangfr/la_chariotte:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA} - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker push $CI_REGISTRY/hashbangfr/la_chariotte:${CI_COMMIT_REF_NAME}-latest - docker push $CI_REGISTRY/hashbangfr/la_chariotte:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA} ansible: only: refs: - main - develop stage: deploy image: $CI_REGISTRY/hashbangfr/docker_archlinux:ansible tags: - ansible script: - cd /srv/ansible/ - ansible-playbook ./playbooks/hb_chariotte/play-${CI_COMMIT_REF_NAME}.yml --extra-vars="CI_COMMIT_SHORT_SHA=${CI_COMMIT_SHORT_SHA}"