.circleci/config.yml
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