1.0.4 • Published 5 years ago
gulp-monorepo-parallelizator v1.0.4
Gulp monorepo parallelizator
This utility allows automate paralelization of build and other actions in repositories with multiple projects depending from each other.
Example output of gulp --tasks
for such setup would look like this:
└─┬ buildAll
└─┬ <series>
├─┬ <parallel>
│ ├── build-dependency3 // depends on nothing
│ └── build-dependency5 // depends on nothing
├── build-dependency4 // depends on 5
├─┬ <parallel>
│ ├── build-dependency2 // depends on 4, 5
│ └── build-dependency7 // depends on 4, 3
├─┬ <parallel>
│ ├── build-dependency1 // depends on 2, 3
│ └── build-dependency6 // depends on 2, 3
└── build-dependency0 // depends on 1, 3
Installation
npm i --save-dev gulp-monorepo-parallelizator
Usage
All sub-peojects MUST have package.json
file with other projects listed as either dependencies
or peerDependencies
.
Example gulpfile.js
:
const gulp = require('gulp');
const gulpParallel = require('gulp-monorepo-parallelizator');
// Define array of task names and sub-project folders with package.json files
const buildProjects = [
{ task: 'build-dependency0', folder: '../../projects/dependency0' },
{ task: 'build-dependency1', folder: '../../projects/dependency1' },
{ task: 'build-dependency2', folder: '../../projects/dependency2' },
{ task: 'build-dependency3', folder: '../../projects/dependency3' },
{ task: 'build-dependency4', folder: '../../projects/dependency4' },
{ task: 'build-dependency5', folder: '../../projects/dependency5' },
{ task: 'build-dependency6', folder: '../../projects/dependency6' },
{ task: 'build-dependency7', folder: '../../projects/dependency7' },
];
// Setup build tasks for each project - in this case - run Angular CLI build as child process
buildProjects.forEach(v => {
gulp.task(v.task, () => exe(`npm run ng -- build ${v.name}`))
});
// Setup 'buildAll' task which runs all non-dependant builds in parallel
gulp.task('buildAll', gulpParallel(buildProjects));
Released semantically
See here: https://semantic-release.gitbook.io/semantic-release/
Commit format:
- fix(pencil): Patch Release
- feat(pencil): Minor Feature Release
- perf(pencil): Major Breaking Release
- BREAKING CHANGE: Major Breaking Release