circletron
Version:
circle orb for dealing with monorepos
50 lines (33 loc) • 2.11 kB
Markdown
# circletron
Circletron is a tool to simplify working with monorepos. Currently monorepos managed via lerna are supported.
It allows splitting up `.circle/config.yml` among subprojects in the monorepo such that each subproject can define its own commands, workflows and jobs. These jobs can then be automatically skipped when not required.
## How to use
1. Create a minimal `.config/circle.yml` like this:
```yaml
version: 2.1
setup: true
orbs:
circletron: circletron/circletron@0.0.1
workflows:
trigger-jobs:
jobs:
- circletron/trigger-jobs
```
2. You may create a `circle.yml` in the root of your monorepo. The jobs in this `circle.yml` will always run and any `commands`, `executors` and `orbs` defined in this `circle.yml` will be available in the `circle.yml` of all other subpackages.
3. Create a `circle.yml` in each subpackage within the monorepo which requires automatiion. The jobs in this circle configuration are run only when there are changes in the respective branch to a file within this subpackage or changes to a file in one of its dependents. `conditional: false` may be added to a job to specify that it must always run even when no changes to the subpackage or one of its dependencies is detected.
4. Optionally create a `.circle/lerna.yml` file to specify dependencies within projects, e.g.
```
dependencies:
project1:
- project2
- project3
```
will cause jobs within `project1` to run when changes are detected in either `project1`, `project2` or `project3`.
## Details
It is useful to set up branch protection rules to prevent code from being merged when a CI job does not pass. When jobs are omitted then the PR will never be mergeable since the job will remain in a `pending` state. For this reason `circletron` will never omit a job that was determined not to be run, instead the job will be replaced wit a simple job that echos "Job is not required" and return a success exit status.
For the following branches all jobs will run:
- main
- master
- develop
- branches starting with `release/`
This will be configurable in a future release.