Repository navigation
v1.0.0: zero-config monorepo CI
Immutable
release. Only release title and notes can be modified.
Build, test and deploy only the projects a change affects, with no config file needed.
dynamic-monorepo works from three things:
- the git diff
- the projects in your repository, found from
package.json,go.mod,Cargo.toml,Dockerfile,pyproject.toml,pom.xml, Gradle,.csprojand HelmChart.yaml - the dependencies between those projects, read from their manifests
From these it outputs JSON lists for strategy.matrix, and the job summary says why each project was picked.
- uses: actions/checkout@v4
- uses: Continuous-Actions/dynamic-monorepo@v1
id: plan
# needs.plan.outputs.build -> ["@acme/shared","@acme/api","@acme/web"]Highlights
- Zero config. It auto-detects Node, Go, Rust, Python, Java (Maven/Gradle), .NET, Docker and Helm projects. A
dynamic-monorepo.config.json(with a JSON Schema) is only needed to override what was detected. - Follows dependencies. A change to a shared library selects everything that depends on it. Lockfiles only select the projects of their own ecosystem.
- Matrix outputs:
build,test,deployanddockerlists, pluspathsanddockerfilesmaps,has_*flags, and*_batchesoutputs for lists longer than 256 jobs. - Explains itself. The job summary gives a reason for every project, and the CLI previews the plan locally:
npx github:Continuous-Actions/dynamic-monorepo --base origin/main. - Works with the default checkout. A shallow clone is enough: it fetches only the commits it needs. It handles pull requests, pushes, force pushes, merge queues and new branches. When it can't compare correctly, it selects everything and says why.
- Safe to adopt:
- It needs only
contents: read, uses no secrets and makes no API calls. - Nothing from your repository is executed.
- It ships as a single committed bundle of about 100 KB.
- Releases are immutable.
- The code went through adversarial security and correctness reviews.
- It needs only
Demo: https://github.com/Continuous-Actions/dynamic-monorepo-demo