Skip to content

Adopt sbt-dynver-ci - #29

Merged
russwyte merged 2 commits into
mainfrom
dynver-ci
Jul 25, 2026
Merged

Adopt sbt-dynver-ci#29
russwyte merged 2 commits into
mainfrom
dynver-ci

Conversation

@russwyte

Copy link
Copy Markdown
Contributor

Brings specular onto sbt-dynver-ci 0.2.2, replacing stock sbt-dynver 5.1.1 (the plugin depends on dynver transitively, so the old line is removed rather than kept alongside). marklit and saferis get the same treatment separately.

Published artifacts are unchanged

DynverCiVersion.format returns versionWithoutPrefix untouched when the tag is clean, so a v0.7.2 tag still produces exactly 0.7.2. Verified rather than assumed — built a clean tag in a scratch worktree:

$ sbt "show version"
9.9.9
$ sbt "show dynverGitDescribeOutput"
Some(GitDescribeOutput(GitTag(v9.9.9, prefix=v),GitCommitSuffix(0,b14c6981),GitDirtySuffix()))

Publishing is gated on startsWith(github.ref, 'refs/tags/v'), so only non-tag builds move: 0.6.2+0-7199cd57+20260724-13310.7.2-ci.

Which fixes a live CI problem

zipx's cache key embeds the root version as cacheEpoch, so the committed ci.yml held a per-commit timestamp:

-          key: ubuntu-latest-jdk25-sbt-0.6.2+0-7199cd57+20260724-1331-${{ github.run_id }}-test
+          key: ubuntu-latest-jdk25-sbt-0.7.2-ci-${{ github.run_id }}-test

Every restore-keys prefix contained that timestamp too, so every commit missed the cache entirely and cold-started sbt + coursier across all four jobs. A stable -ci epoch means the prefix matches between tags, which is what restore-keys are for.

Regenerating was required either way — zipxWorkflowCheck fails on a stale epoch.

Verification

sbt test green, zipxWorkflowCheck clean after regeneration. No ThisBuild / version anywhere in the build, so the plugin's buildSettings value wins uncontested.

russwyte added 2 commits July 24, 2026 22:38
The ascent pin had been left at 0.1.0 while ascent released 0.2.0, 0.2.1 and
0.3.0. All modules compile and the docs site renders unchanged apart from
ascent's internal data-ascent hydration ids.

DocsSiteSpec, ProjectMetaSpec and SitePathsSpec all set and clear the same
global specular.* system properties, and sbt runs suites in parallel inside
one JVM, so ~40% of runs failed on whichever suite lost the race. Turn off
Test / parallelExecution for the site module.
Replaces stock sbt-dynver 5.1.1 (sbt-dynver-ci depends on it transitively), so
the whole org shares one version policy.

Published artifacts are unchanged: DynverCiVersion.format returns the bare
version when the tag is clean, verified by building a clean tag — `9.9.9`, not
`9.9.9-ci`. Only off-tag builds change, from
`0.6.2+0-7199cd57+20260724-1331` to `0.7.2-ci`.

That is the point. The zipx cache key embeds the root version, so the committed
key held a commit-and-timestamp string: every single commit missed the cache and
cold-started sbt. A stable `-ci` epoch makes the restore-keys prefix actually
match between tags.
@russwyte
russwyte merged commit 40bb3c4 into main Jul 25, 2026
6 checks passed
@russwyte
russwyte deleted the dynver-ci branch July 25, 2026 19:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant