version: 2 jobs: build: docker: - image: circleci/python:3.9-buster-node-browsers working_directory: ~/repo steps: - checkout - restore_cache: key: dependencies-{{ checksum "requirements/dev.txt"}}-{{ checksum "requirements/prod.txt" }} - run: name: Install dependencies command: | python3 -m venv venv . venv/bin/activate pip install -r requirements/dev.txt environment: CONDUIT_SECRET: 'something-really-secret' FLASK_APP: /home/circleci/repo/autoapp.py FLASK_DEBUG: 1 - save_cache: paths: - venv key: dependencies-{{ checksum "requirements/dev.txt"}}-{{ checksum "requirements/prod.txt" }} test: docker: - image: circleci/python:3.9-buster-node-browsers - image: circleci/postgres:9.6.2-alpine environment: POSTGRES_USER: postgres POSTGRES_DB: postgres POSTGRES_PASSWORD: root working_directory: ~/repo steps: - checkout - restore_cache: keys: -dependencies-{{ checksum "requirements/dev.txt"}}-{{ checksum "requirements/prod.txt" }} -dependencies - run: name: db upgrade command: | . venv/bin/activate sleep 1 flask db upgrade environment: CONDUIT_SECRET: 'something-really-secret' FLASK_APP: /home/circleci/repo/autoapp.py DATABASE_URL: postgresql://postgres:root@localhost:5432/postgres FLASK_DEBUG: 1 POSTGRES_USER: postgres POSTGRES_DB: postgres POSTGRES_PASSWORD: root POSTGRES_PORT: 5432 - run: name: db test command: | . venv/bin/activate flask db migrate flask test environment: CONDUIT_SECRET: 'something-really-secret' FLASK_APP: /home/circleci/repo/autoapp.py DATABASE_URL: postgresql://postgres:root@localhost:5432/postgres FLASK_DEBUG: 1 POSTGRES_USER: postgres POSTGRES_DB: postgres POSTGRES_PASSWORD: root POSTGRES_PORT: 5432 deploy-heroku: docker: - image : buildpack-deps:trusty steps: - checkout - run: name: Heroku deploy command: git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APP_NAME.git origin/main - run: name: Smoke test command: | if [[ "$HTTPCODE" -ne 200 ]]; then echo "heroku app not responding, failing deploy" \ exit 1 \ HTTPCODE=`curl -s -o /dev/null -w "%{http_code}" https://$HEROKU_APP_NAME.herokuapp.com/` fi docker-build-and-push: working_directory: /dockerapp docker: - image: docker:17.05.0-ce-git steps: - checkout - setup_remote_docker - run: name: build app image command: | docker build --cache-from=app -t app . - run: name: Publish app to docker hub command: | docker login -e $DOCKER_HUB_EMAIL -u $DOCKER_HUB_USER_ID -p $DOCKER_HUB_PWD docker tag app $DOCKER_HUB_USER_ID/devops-final-back:$CIRCLE_BUILD_NUM docker tag app $DOCKER_HUB_USER_ID/devops-final-back:1.0 docker push $DOCKER_HUB_USER_ID/devops-final-back:$CIRCLE_BUILD_NUM docker push $DOCKER_HUB_USER_ID/devops-final-back:1.0 workflows: version: 2 build-deploy: jobs: - build - test: requires: - build - deploy-heroku: requires: - build - docker-build-and-push: requires: - build