Skip to content

v1.0.1: zero-config monorepo CI

Choose a tag to compare

@MarkAlex1234 MarkAlex1234 released this 05 Oct 10:24
Immutable release. Only release title and notes can be modified.
13209d9

Same code as v1.0.0. This release publishes the action to the GitHub Marketplace.

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, .csproj and Helm Chart.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, deploy and docker lists, plus paths and dockerfiles maps, has_* flags, and *_batches outputs 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.

Demo: https://github.com/Continuous-Actions/dynamic-monorepo-demo