Repository navigation
Unify CI pipelines across Scala repositories #5
Copy link
Copy link
Open
Description
All Scala repositories hand-roll their own ci.yml. That means every sbt/scoverage/coverage trap has
to be rediscovered per repo, and quality gates differ silently between projects. Tracking the move to
a single shared pipeline here.
Steps
- Add a reusable
ci.yml(done, Add reusable Scala CI workflow #3) — tests, coverage → Coveralls, binary compatibility,
scalafmt, scaladoc. Coverage build runs before other compiles andsbt/setup-sbtdisk cache is
disabled while coverage is on, because sbt 2's compile cache is not keyed on scoverage
instrumentation and would otherwise yield a silently empty report. Gates run as explicit sbt tasks
rather than through a per-repocheckalias, which can be (and is) stubbed toshow version. - Pilot on two repos of different shapes (done) — Adopt shared Scala CI workflow smetrics#450 (sbt 2) and
Adopt shared Scala CI workflow cats-helper#397 (sbt 1, stubbedcheck). - Starter workflows for new repos — Add Scala starter workflows .github#7 adds
workflow-templates/so new
repos get the shared CI and release workflows offered by default. - Roll out to the remaining active public Scala libraries as thin caller files.
- Optionally enforce with a
workflowsruleset rule, the same mechanism the AI Policy Check
already uses, plus a documented exclude list.
Known gaps
- Binary-compatibility checking is vacuous wherever CI checks out shallow: sbt-dynver reports
0.0.0
so there is no previous version to compare against. The shared workflow usesfetch-depth: 0, which
means adopting it can surface real pre-existing incompatibilities. - SonarQube Cloud analysis is inconsistent across the org and is being handled separately.
Rollout PRs
- Adopt shared Scala CI workflow scache#373
- Adopt shared Scala CI workflow resource-pool#70
- Adopt shared Scala CI workflow pekko-extension#126
- Adopt shared Scala CI workflow derivation#107
- Adopt shared Scala CI workflow kafka-journal#967
- Adopt shared Scala CI workflow nats-effect#26
- Adopt shared Scala CI workflow akka-http-documenteddsl#159 (done in: updates akka-http-documenteddsl#162)
- Adopt shared Scala CI workflow akka-http-play-json#165
- Adopt shared Scala CI workflow akka-test#2
- Adopt shared Scala CI workflow akka-to-pekko-adapter#13
- Adopt shared Scala CI workflow cassandra-sync#244
- Adopt shared Scala CI workflow conhub#214
- Adopt shared Scala CI workflow ddata-tools#7
- Adopt shared Scala CI workflow executor-tools#5
- Adopt shared Scala CI workflow hostname#4
- Adopt shared Scala CI workflow json-partial-update#136
- Adopt shared Scala CI workflow metric-tools#4
- Adopt shared Scala CI workflow play-json-tools#57
- Adopt shared Scala CI workflow pubsub#327
- Adopt shared Scala CI workflow random#249
- Adopt shared Scala CI workflow scassandra#360
- Adopt shared Scala CI workflow sharding-strategy#288
- Adopt shared Scala CI workflow skafka#607
- Adopt shared Scala CI workflow sstream#242
- Adopt shared Scala CI workflow throttler#182
- Adopt shared Scala CI workflow akka-effect#510
- Adopt shared Scala CI workflow kafka-flow#893
- Adopt shared Scala CI workflow smetrics#450 (pilot)
- Adopt shared Scala CI workflow cats-helper#397 (pilot)
- Add Scala starter workflows .github#7 (starter workflows)
- Harden caller snippet for Sonar quality gate #6 (caller hardening)
Not included
sequentiallyuses sbt-projectmatrix and so has no++cross-build; the shared workflow needs an input for that first.metered-scaffeinepublishes without sbt-dynver or the Artifactory plugin.- The Maven Central publishers, non-libraries and the stale set, per the out-of-scope note above.
Metadata
Metadata
Assignees
Labels
No labels
Activity
stasimus commentedon Aug 7, 2026
Two findings from the rollout:
The documented caller failed SonarQube Cloud's quality gate — C security rating on new code in all 10 analysed repos. Two rules: the unpinned
@v6ref, andsecrets: inherit. Probed independently on evolution-gaming/skafka#607; neither fix alone was enough. Fixed in #6.Several gates only looked enabled.
derivationandpubsubhave sbt-version-policy but never setversionPolicyIntention, soversionPolicyCheckerrors as soon as it really runs.pubsubhas sbt-scalafmt but no.scalafmt.conf. Six repos had never runscalafmtSbtCheckagainstproject/plugins.sbt.stasimus commentedon Aug 7, 2026
Rollout open and green: all 27 rollout PRs plus the cats-helper pilot pass, including every Sonar-analysed repo.
evolution-gaming/smetrics#450 is red on purpose. It surfaces a real binary incompatibility in
smetrics-doobie(doobie moved toorg.typelevel.doobie.*), previously hidden because shallow checkout made sbt-dynver report0.0.0, and inherits a test failing on smetrics master since #440. Both need a versioning decision there.What adoption changed in enforcement terms, across the 27 repos: 8 had never had
project/plugins.sbtchecked by scalafmt, 2 had aversionPolicyCheckthat could only error, 1 had scalafmt with no config, and every shallow-checkout repo had a binary-compatibility gate that compared nothing.Adopt shared Scala CI workflow (#510)
Adopt shared Scala CI workflow (#288)
Adopt shared Scala CI workflow (#242)
Adopt shared Scala CI workflow (#967)
mr-git commentedon Aug 14, 2026
Continuation: #9