.circleci/config.yml
version: 2.1
orbs:
docker: circleci/docker@0.5.1
workflows:
build_test_deploy:
jobs:
- build_test
- docker/publish:
image: operationcode/back-end
dockerfile: docker/Dockerfile
tag: ${CIRCLE_BRANCH}
after_build:
- run:
name: Tag and Push
command: |
IMAGE_ID=operationcode/back-end
docker tag ${IMAGE_ID}:${CIRCLE_BRANCH} ${IMAGE_ID}:${CIRCLE_BRANCH}-${CIRCLE_BUILD_NUM}
docker push ${IMAGE_ID}:${CIRCLE_BRANCH}-${CIRCLE_BUILD_NUM}
echo "Successfully pushed $IMAGE_ID:$CIRCLE_BRANCH-$CIRCLE_BUILD_NUM"
requires:
- build_test
filters:
branches:
only:
- master
- staging
jobs:
build_test:
docker:
- image: circleci/python:3.7.1
environment: # environment variables for primary container
PIPENV_VENV_IN_PROJECT: true
CC_TEST_REPORTER_ID: 91944b115a88fcc2040da46325f3606d096c281149ab4fcff022f06b09a700c0
DJANGO_ENV: testing
steps:
- checkout
- run: sudo chown -R circleci:circleci /usr/local/bin
- run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages
- restore_cache: # ensure this step occurs *before* installing dependencies
keys:
- v2-dependencies-{{ checksum "poetry.lock" }}
# fallback to using the latest cache if no exact match is found
- v2-dependencies-
- run:
name: Installing dependencies
command: |
sudo pip install poetry
poetry install
- run:
name: Initializing CodeClimate
command: |
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > /usr/local/bin/cc-test-reporter
chmod +x /usr/local/bin/cc-test-reporter
/usr/local/bin/cc-test-reporter before-build
- save_cache:
key: v1-dependencies-{{ checksum "poetry.lock" }}
paths:
- "/home/circleci/.cache/pypoetry/virtualenvs"
- ".venv"
- "/usr/local/bin"
- "/usr/local/lib/python3.7/site-packages"
# Run tests
- run:
name: Run Pytest
command: |
poetry run coverage run -m pytest --junitxml=test-results/pytest/results.xml
- run:
name: Run linting and coverage
command: |
poetry run flake8 .
poetry run black --check --diff src
poetry run coverage report
poetry run coverage xml
/usr/local/bin/cc-test-reporter after-build -t coverage.py
- run:
name: Run Bandit security analysis
command: |
poetry run bandit -r .
- store_test_results:
path: test-results