image: docker:latest stages: - test - build - push test: stage: test image: python:3.11-alpine script: - pip install -r requirements.txt - python -m unittest discover tests only: - main before_script: - apk add --no-cache docker-cli - | # Wait for Docker to be ready until docker info; do echo "Waiting for Docker to be ready..." sleep 5 done build: needs: - test stage: build script: - docker info - docker build -t $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG -t $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_SHORT_SHA . - docker tag $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG tag $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_SHORT_SHA $CI_REGISTRY/$CI_PROJECT_PATH:latest push: needs: - build stage: push script: - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY - docker push $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG - docker push $CI_REGISTRY/$CI_PROJECT_PATH:latest only: - main