willpower232/TOTPBTF3

View on GitHub
.circleci/config.yml

Summary

Maintainability
Test Coverage
version: 2


defaults: &defaults
  working_directory: ~/app

references:
  php: &php
    image: circleci/php:7.4-cli
    name: php
    environment:
      DB_HOST: mysql

  mysql: &mysql
    image: circleci/mysql:5.7
    name: mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --innodb-large-prefix=true --innodb-file-format=Barracuda
    environment:
      MYSQL_DATABASE: totp_test

  save_workspace: &save_workspace
    persist_to_workspace:
      root: ~/app
      paths:
        - ./

  load_workspace: &load_workspace
    attach_workspace:
      at: ~/app

  install_exts: &install_exts
    run:
      name: Install PHP extensions
      command: |
        sudo -E docker-php-ext-install bcmath
        sudo -E docker-php-ext-install pdo_mysql

  send_to_codecov: &send_to_codecov
    run:
      name: Send to Codecov
      command: bash <(curl -s https://codecov.io/bash) -f build/coverage-clover.xml

jobs:
  setup:
    <<: *defaults
    docker:
      - *php
    parallelism: 1
    steps:
      - checkout
      - restore_cache:
          key: composer-deps-{{ checksum "composer.json" }}
      - *install_exts
      - run: composer validate
      - run: composer install --no-interaction --no-ansi --prefer-dist
      - save_cache:
          key: composer-deps-{{ checksum "composer.json" }}
          paths:
            - ./vendor
      - *save_workspace

  lint:
    <<: *defaults
    docker:
      - *php
    parallelism: 1
    steps:
      - *load_workspace
      - run:
          name: lint PHP
          command: vendor/bin/parallel-lint --no-colors app tests database routes
      - run:
          name: lint Twig
          command: php artisan --env=testing twig:lint
      - run:
          name: code sniff PHP
          command: vendor/bin/phpcs --standard=PSR2 app tests
      - run:
          name: analyse APP PHP
          command: composer analyse

  test_mysql:
    <<: *defaults
    docker:
      - *php
      - *mysql
    parallelism: 1
    steps:
      - *load_workspace
      - *install_exts
      - run: dockerize -wait tcp://mysql:3306 -timeout 1m
      - run:
          name: PHPUnit
          command: XDEBUG_MODE=coverage vendor/bin/phpunit
      - store_test_results:
          path: build/logs
      - store_artifacts:
          path: build/logs
      - store_artifacts:
          path: build/coverage
          destination: coverage
      - *send_to_codecov

  test_sqlite:
    <<: *defaults
    docker:
      - *php
    parallelism: 1
    steps:
      - *load_workspace
      - *install_exts
      - run:
          name: Set Up SQLite Database
          command: |
            sudo apt update && sudo apt install -y libsqlite3-dev;
            touch database/testing.sqlite;
            php artisan --env=testing migrate;
      - run:
          name: PHPUnit
          command: XDEBUG_MODE=coverage vendor/bin/phpunit
      - store_test_results:
          path: build/logs
      - store_artifacts:
          path: build/logs
      - store_artifacts:
          path: build/coverage
          destination: coverage
      - *send_to_codecov

workflows:
  version: 2
  build-lint-test:
    jobs:
      - setup
      - lint:
          requires:
            - setup
      - test_mysql:
          requires:
            - setup
            - lint
      - test_sqlite:
          requires:
            - setup
            - lint