Index

zipx generates GitHub Actions from your real sbt graph. Aggregate-first works for libraries and multi-service monorepos; Layer/Graph when you need waves, per-module isolation, or multi-environment deploys. Typed capabilities cover test, Central, GitHub Packages, docker, and deploy so you do not hand-roll YAML module lists. Drift fails the PR via zipxWorkflowCheck.

If you have maintained a second copy of the build (disconnected CI or a restated Bazel graph), start with Why zipx: a kinder path back to one honest graph. The power is for every Scala team on Actions, and especially monorepos.

Guide: Why zipx → Quick start → Execution modes → Capabilities → Custom capabilities → Verify → Affected → Caching → Remote cache for teams → From Bazel → Action pins → Dependency updates → Docker and deploy → Job conditions → Packs → Settings.

Install

// project/plugins.sbt
addSbtPlugin("rocks.earlyeffect" % "sbt-zipx" % "0.1.3")

Generate & check

sbt zipxWorkflowGenerate
git add .github/workflows/ci.yml
sbt zipxWorkflowCheck   # fails CI when the committed YAML drifts

Action pins (optional)

# Prefer .github/zipx/action-pins.yml + Dependabot; see Action pins docs
zipxDependabotSync := true
sbt zipxActionsPull   # after Dependabot bumps workflow uses:

Documentation

Continue with: