UNPKG

circletron

Version:

circle orb for dealing with monorepos

50 lines (33 loc) 2.11 kB
# 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.