version: 2 jobs: build: docker: - image: circleci/python:latest steps: - checkout - restore_cache: keys: - v3-dependencies-{{ checksum "requirements/dev.txt" }}-{{ checksum "requirements/prod.txt" }} - v3-dependencies- - run: name: Install Python deps in a venv command: | python3 -m venv venv . venv/bin/activate pip install -r requirements/dev.txt environment: CONDUIT_SECRET: 'something-really-secret' FLASK_APP: autoapp.py FLASK_DEBUG: 1 - save_cache: paths: - venv key: v3-dependencies-{{ checksum "requirements/dev.txt" }}-{{ checksum "requirements/prod.txt" }} test: docker: - image: circleci/python:latest - image: circleci/postgres:9.6.2-alpine environment: POSTGRES_USER: myUser POSTGRES_PASSWORD: somePwd POSTGRES_BD: mydb steps: - checkout - restore_cache: keys: - v3-dependencies-{{ checksum "requirements/dev.txt" }}-{{ checksum "requirements/prod.txt" }} - v3-dependencies- - run: name: wait for postgres command: dockerize -wait tcp://localhost:5432 -timeout 1m - run: name: flask upgrade command: | . venv/bin/activate sleep 1 flask db upgrade environment: CONDUIT_SECRET: 'something-really-secret' FLASK_APP: autoapp.py DATABASE_URL: postgresql://myUser:somePwd@localhost:5432/mydb FLASK_DEBUG: 1 POSTGRES_USER: myUser POSTGRES_DB: mydb POSTGRES_PASSWORD: somePwd POSTGRES_PORT: 5432 - run: name: flask test command: | . venv/bin/activate sleep 1 flask db migrate flask test environment: CONDUIT_SECRET: 'something-really-secret' FLASK_APP: autoapp.py DATABASE_URL: postgresql://myUser:somePwd@localhost:5432/mydb FLASK_DEBUG: 1 POSTGRES_USER: myUser POSTGRES_DB: mydb POSTGRES_PASSWORD: somePwd POSTGRES_PORT: 5432 - save_cache: paths: - venv key: v3-dependencies-{{ checksum "requirements/dev.txt" }}-{{ checksum "requirements/prod.txt" }} deploy: docker: - image: buildpack-deps:trusty steps: - checkout - run: name: heroku deploy command: | git push https://heroku:02467a97-3871-4afd-95ab-2b1a1c190165@git.heroku.com/warm-fortress-97103.git HEAD:main build_docker: environment: IMAGE_NAME: etiamayedze/tp_devops_final_backend docker: - image: circleci/buildpack-deps:stretch steps: - checkout - setup_remote_docker - run: docker image build --tag $IMAGE_NAME:app . - run: docker save -o image.tar $IMAGE_NAME - persist_to_workspace: root: . paths: - ./image.tar publish_image: docker: - image: circleci/buildpack-deps:stretch steps: - checkout - attach_workspace: at: /tmp/workspace - setup_remote_docker - run: docker load -i /tmp/workspace/image.tar - run: command: # docker login -e $DOCKER_HUB_EMAIL -u $DOCKER_HUB_USER_ID -p 'DOCKERPASSWORD' # echo "$DOCKERPASSWORD" | docker login --username etiamayedze --password-stdin # docker tag etiamayedze/docker-tp-ci:app etiamayedze/tp_devops_final_backend:$CIRCLE_BUILD_NUM # docker tag etiamayedze/docker-tp-ci:app etiamayedze/tp_devops_final_backend:latest # docker push etiamayedze/docker-tp-ci:latest # docker push etiamayedze/docker-tp-ci:$CIRCLE_BUILD_NUM docker login -e $DOCKER_HUB_EMAIL -u $DOCKER_HUB_USER_ID -p $DOCKER_HUB_PWD docker tag app $DOCKER_HUB_USER_ID/tp_devops_final_backend:$CIRCLE_BUILD_NUM docker tag app $DOCKER_HUB_USER_ID/tp_devops_final_backend:latest docker push $DOCKER_HUB_USER_ID/tp_devops_final_backend:$CIRCLE_BUILD_NUM docker push $DOCKER_HUB_USER_ID/tp_devops_final_backend:latest # docker-build-and-push: # docker: # - image: docker:17.05.0-ce-git # steps: # - checkout # - setup_remote_docker # - run: # name: Build application Docker image # command: | # docker build --cache-from=app -t app . # - deploy: # name: Publish application to docker hub # command: | # docker login -e $DOCKER_HUB_EMAIL -u $DOCKER_HUB_USER_ID -p 'DOCKERPASSWORD' # docker tag app $DOCKER_HUB_USER_ID/my-python-app:$CIRCLE_BUILD_NUM # docker tag app $DOCKER_HUB_USER_ID/my-python-app:latest # docker push $DOCKER_HUB_USER_ID/my-python-app:$CIRCLE_BUILD_NUM # docker push $DOCKER_HUB_USER_ID/my-python-app:latest workflows: version: 2 build-deploy: jobs: - build - test: requires: - build - deploy: requires: - build # - docker-build-and-push: # context: # - docker - build_docker - publish_image: context: - docker requires: - build_docker