Skip to content

Instantly share code, notes, and snippets.

@abenevaut
Last active March 9, 2024 22:53
Show Gist options
  • Save abenevaut/cfdd279d7279fc2a15722f7c0e2ceb94 to your computer and use it in GitHub Desktop.
Save abenevaut/cfdd279d7279fc2a15722f7c0e2ceb94 to your computer and use it in GitHub Desktop.
Parallelized jobs workflow and "test" job parallelized
  • Parallelized jobs workflow and "test" job parallelized
version: 2
workdir-latest: &workdir-latest
working_directory: ~/project/latest
docker-latest: &docker-latest
docker:
- image: abenevaut/vapor-ci:node_16-php_81
checkout: &checkout
steps:
- checkout
- persist_to_workspace:
root: ~/project
paths:
- "*"
prepare-node-dependencies: &prepare-node-dependencies
steps:
- attach_workspace:
at: ~/project
- restore_cache:
keys:
- node-dependencies-{{ checksum "package-lock.json" }}
- node-dependencies- # fallback
- run:
name: Prepare node dependencies
command: npm install
- save_cache:
paths:
- ~/.npm
key: node-dependencies-{{ checksum "package-lock.json" }}
- persist_to_workspace:
root: ~/project
paths:
- latest/node_modules
prepare-php-dependencies: &prepare-php-dependencies
steps:
- attach_workspace:
at: ~/project
- restore_cache:
keys:
- php-dependencies-{{ checksum "composer.json" }}
- php-dependencies- # fallback
- run:
name: Prepare PHP dependencies
command: |
composer validate --strict
composer install
- save_cache:
paths:
- ./vendor
key: php-dependencies-{{ checksum "composer.json" }}
- run:
name: Prepare Laravel dependencies
command: |
cp .env.example .env
php artisan key:generate
- run:
name: Slice PHPUnit tests
command: |
php phpunit-slicer slice 6 ./phpunit.xml.dist ./phpunit.xml.dist ./tests
- persist_to_workspace:
root: ~/project
paths:
- latest/vendor
- latest/.env
- latest/phpunit.xml.dist
build-javascript: &build-javascript
steps:
- attach_workspace:
at: ~/project
- run: npm run prod
- persist_to_workspace:
root: ~/project
paths:
- latest/public
test: &test
parallelism: 6
steps:
- attach_workspace:
at: ~/project
- run:
name: Run tests
command: php -d pcov.enabled=1 ./vendor/bin/paratest -p 30 --configuration phpunit.xml.dist --testsuite node-${CIRCLE_NODE_INDEX} --coverage-clover=coverage/clover-${CIRCLE_NODE_INDEX}.xml
- persist_to_workspace:
root: ~/project
paths:
- latest/coverage
build-whitelabel: &build-whitelabel
steps:
- attach_workspace:
at: ~/project
- run: npm run prod:whitelabel
sent-coverage: &sent-coverage
steps:
- attach_workspace:
at: ~/project
- run:
name: Send coverage to codecov.io
command: codecov -t ${CODECOV_TOKEN} -f "coverage/clover-*.xml" -F controllers
- store_test_results:
path: coverage
jobs:
"checkout":
<<: *workdir-latest
<<: *docker-latest
<<: *checkout
"prepare-node-dependencies":
<<: *workdir-latest
<<: *docker-latest
<<: *prepare-node-dependencies
"prepare-php-dependencies":
<<: *workdir-latest
<<: *docker-latest
<<: *prepare-php-dependencies
"build-javascript":
<<: *workdir-latest
<<: *docker-latest
<<: *build-javascript
"build-whitelabel":
<<: *workdir-latest
<<: *docker-latest
<<: *build-whitelabel
"test":
<<: *workdir-latest
<<: *docker-latest
<<: *test
"sent-coverage":
<<: *workdir-latest
<<: *docker-latest
<<: *sent-coverage
workflows:
version: 2
build-test-analyze:
jobs:
- "checkout"
- "prepare-node-dependencies":
requires:
- "checkout"
- "prepare-php-dependencies":
requires:
- "checkout"
- "build-javascript":
requires:
- "prepare-node-dependencies"
- "prepare-php-dependencies"
- "test":
requires:
- "build-javascript"
- "prepare-php-dependencies"
- "sent-coverage":
requires:
- "test"
nightly:
triggers:
- schedule:
cron: "0 0 * * 0" # every sunday
filters:
branches:
only:
- master
jobs:
- "checkout"
- "prepare-node-dependencies":
requires:
- "checkout"
- "prepare-php-dependencies":
requires:
- "checkout"
- "build-javascript":
requires:
- "prepare-node-dependencies"
- "prepare-php-dependencies"
- "build-whitelabel":
requires:
- "build-javascript"
- "prepare-php-dependencies"
- "test":
requires:
- "build-javascript"
- "prepare-php-dependencies"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment