OperationCode/back-end

View on GitHub
.circleci/config.yml

Summary

Maintainability
Test Coverage
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