variables: PYPI_USER: SECURE PYPI_PASS: SECURE DOCKER_USER: SECURE DOCKER_PASS: SECURE DOCKER_DRIVER: overlay2 services: - docker:dind before_script: - FRACTALIS_VERSION=$(grep version setup.py | grep -o "[0-9]\.[0-9]\.[0-9]") - DOCKER_IMAGE_TAG="fractalis:$FRACTALIS_VERSION" - SDIST=dist/fractalis-$FRACTALIS_VERSION.tar.gz stages: - build_sdist - build_image - test - release build:sdist: stage: build_sdist image: python:3.6-alpine script: - python3 setup.py sdist artifacts: paths: - $SDIST build:image: stage: build_image image: docker:latest tags: - privileged script: - docker build -t $DOCKER_IMAGE_TAG -f docker/Dockerfile --build-arg SDIST=$SDIST . - docker save $DOCKER_IMAGE_TAG -o image.tar dependencies: - build:sdist artifacts: paths: - image.tar test: stage: test image: docker:latest tags: - privileged services: - redis:3.2-alpine - rabbitmq:3.7-alpine script: - docker load -i image.tar - > docker run DOCKER_IMAGE_TAG -e REDIS_HOST=redis -e RABBITMQ_HOST=rabbitmq sh -c "celery worker -D -A fractalis:celery && pip3 install -r requirements.txt && flake8 && pytest tests" dependencies: - build:image release:pypi: stage: release image: python:3.6-alpine script: - pip3 install twine - twine upload $SDIST -u $PYPI_USER -p $PYPI_PASS dependencies: - build:sdist only: - tags release:docker: stage: release image: docker:latest tags: - privileged script: - docker load -i image.tar - docker login -u $DOCKER_USER -p $DOCKER_PASS - docker push $DOCKER_IMAGE_TAG dependencies: - build:image only: - tags