Skip to content
CAI
Software that uses CAICheck a score

sbt/sbt-dynver

63.2

Adequate · 20 September 2026

250

lines of production code

Scala

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is an SBT plugin and standalone library that generates dynamic version strings based on Git repository state. It parses Git tags and commit history to produce semantic version identifiers, handling scenarios such as dirty working directories, untagged commits, and snapshot releases. The core logic is decoupled from the build tool integration, allowing it to be used independently or within SBT projects with configurable tag prefixes and separators.

Features

Initial project setup and documentation

This change introduces the initial structure for the sbt-dynver plugin, adding the Apache 2.0 license, a NOTICE file, and a comprehensive README that documents the plugin's features, setup instructions, and configuration options. It also configures the build environment by adding a .gitignore file and switching the CI pipeline from Travis CI to GitHub Actions, while pinning the JGit dependency to version 5.x to ensure Java 8 compatibility.

(repo-wide) · high confidence

Behavioural changes

Refactored DynVer into library and SBT plugin components

The DynVer logic has been restructured to separate the core versioning library from the SBT plugin implementation. The core logic is now contained in \dynver/src/main/scala/sbtdynver/DynVer.scala\, which includes the \GitDescribeOutput\ parser and version generation methods, while a new \NoProcessLogger\ utility in \dynver/src/main/scala/dynver/impl/\ handles silent process execution. This change organizes the codebase to support cross-publishing the library independently of the SBT plugin, allowing users to integrate DynVer's versioning capabilities into non-SBT projects or custom build tools.

dynver/src/main · high confidence

sbt-dynver plugin restructured for sbt 2.x compatibility

The sbt-dynver plugin has been refactored to support sbt 2.0.0-RC3, splitting the codebase into a library and an sbt plugin module. This change introduces new build settings such as \dynverVTagPrefix\, \dynverTagPrefix\, and \dynverSeparator\ to allow finer control over version string generation, and adds \dynverAssertTagVersion\ to validate that the version derives from git tags. The plugin now uses slash syntax for settings and includes updated scripted tests to verify behavior across various git states (tags, commits, dirty status) and multi-project setups.

sbtdynver · high confidence

Test coverage

Added comprehensive test suite for DynVer versioning logic

Added new Scala test specifications in \dynver/src/test\ that verify the dynamic version generation behavior across various Git states. The tests cover version string formatting, previous version detection, snapshot status determination, Sonatype snapshot compatibility, and version stability checks, ensuring the library correctly handles scenarios such as uncommitted changes, merge commits, and different tag prefixes.

dynver/src/test · high confidence

Dependencies

Upgrade build infrastructure to sbt 2.0.8 and enable binary compatibility checks

The build system has been upgraded from sbt 0.13.12 to sbt 2.0.8, accompanied by updates to the sbt-ci-release plugin (to 1.12.1) and the sbt-mima-plugin (to 1.1.6). A new MimaSettings configuration has been introduced to enforce binary compatibility checks against version 5.0.0-M3, filtering out internal implementation details to ensure stable public APIs for consumers.

project · high confidence

sbt-dynver split into library and plugin with sbt 2 support

The project has been restructured to separate the core versioning logic into a standalone library (\dynverLib\) and the sbt plugin (\sbt-dynver\), enabling the plugin to be cross-built for both sbt 1.x (via Scala 2.12) and sbt 2.x (via Scala 3). This change updates the organization to \com.github.sbt\, upgrades the Scala library dependencies to 2.12.21, 2.13.18, and 3.3.8, and bumps the JGit dependency to 5.13.3. Additionally, comprehensive scripted tests have been added to verify version string generation across various git states (clean, dirty, tagged, untagged) and configurations (custom prefixes, separators, and multi-project builds).

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 63.

Lenses

  • Code Health 100
  • Architecture 100
  • Maturity 52
  • Readiness 65
  • Security 65

Changes since last survey

  • 300 commits — 286 feature/other, 14 fixes

By area

  • (repo) — 90 commits
  • (root) — 73 commits
  • project/build.properties — 53 commits
  • project/plugins.sbt — 29 commits
  • .github/workflows — 28 commits
  • dynver/src — 9 commits
  • sbtdynver/src — 7 commits
  • src/test — 5 commits
  • src/sbt-test — 2 commits
  • .github/dependabot.yml — 1 commit
  • .github/release-drafter.yml — 1 commit
  • notes/1.0.0.markdown — 1 commit
  • project/MimaSettings.scala — 1 commit

Notable commits

  • fix: Fix GitReg.isTag doesn't actually check for tag (#294)
  • fix: Fix SHA longer than 8 chars cannot be matched (#231)
  • fix: Fix dynverAssertTagVersion
  • fix: Fix tagPrefix/vTagPrefix coherence
  • fix: Fix the bintray settings
  • fix: Merge pull request #165 from dwijnand/fix-jgit-limited-parallelism
  • fix: Merge pull request #170 from dwijnand/fix-coherence
  • fix: Merge pull request #224 from dwijnand/revert-223-update/scala-library-2.13.7
  • fix: Merge pull request #333 from ex-ratt/fix/isTag
  • fix: Merge pull request #334 from ex-ratt/fix/long-sha
  • fix: Revert "Update scala-library to 2.13.7"
  • fix: fix assert-tag-version test
  • fix: fix(ci): update references of master to main
  • fix: fix: Fix version
  • change: Avoid deprecated replaceAllLiterally (#390)
  • change: Bump actions/checkout from 3 to 4
  • change: Bump actions/checkout from 4 to 5 (#344)
  • change: Bump actions/checkout from 5 to 6 (#361)
  • change: Bump actions/checkout from 6 to 7 (#398)
  • change: Bump actions/setup-java from 3 to 4 (#310)
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

sbt/sbt-dynver was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 431f10972fccd705c74c36c3a44336f6084df8d2 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.