Group Scala Steward update PRs; remove em dashes from prose - #54
Merged
Conversation
Scala Steward opens one PR per dependency by default, which is noisy.
Generate a `pullRequests.grouping` config so updates land in a handful of
PRs instead: one per dependency family, then everything else split by
minor-and-patch versus major, then a catch-all.
New `zipxStewardGrouping` setting (defaults to `ScalaStewardConfig.Defaults`)
so consumer repos inherit the grouping; set it to `Nil` for one PR per
dependency. `StewardGroup` / `StewardFilter` / `ScalaStewardConfig` are
re-exported from `autoImport`.
Two non-obvious details drove the shape:
- The action's `repo-config` input is Steward's *global* config channel and
merges ahead of the repo's own `.scala-steward.conf`. Since the default
list ends in a `{ group = "*" }` catch-all, a `pullRequests.grouping`
block in the repo file would be unreachable. Hence the setting rather
than documentation pointing at the repo file.
- The action reads `repo-config` off the runner filesystem, checks nothing
out itself, and silently ignores a missing file at the default path. So
the generated workflow gains a checkout step, and `zipxWorkflowCheck`
drift-checks `.github/.scala-steward.conf`: the check failing is what
reports a missing config, because Steward never would.
The trailing catch-all is load-bearing, not decoration. Steward's version
filters need both sides of a bump to parse as strict semver, and anything
that fails to parse escapes every version-filtered group. Patch bumps ride
along in the minor group so a separate patch group cannot re-fragment the
PRs this consolidates.
Validated against Steward 0.39.1: seven representative updates produced
five PRs with nothing ungrouped.
Docs, scaladoc, comments, README, and ROADMAP now use colons, commas, semicolons, parentheses, or two sentences instead. No behavior change except two user-visible strings that happened to contain one: the CI verify-gate echo and the plugin's undiffable-base-ref warning. Both are regenerated/reformatted here, so the generated workflow YAMLs move too. En dashes in numeric ranges (cron 0-59, 0-23) are left alone; they are typographically correct there.
.playwright-mcp/, node_modules/, and the package.json that only exists to pull in @playwright/test for local MCP browsing. Same category as the .mcp.json / .claude/ / .cursor/ entries above it: local tooling, not a dependency of this sbt build.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two commits, reviewable independently.
1. Group Scala Steward update PRs
Scala Steward opens one PR per dependency by default. This generates a
pullRequests.groupingconfig so updates land in a handful of PRs instead: one per dependency family, then everything else split by minor-and-patch versus major, then a catch-all.New
zipxStewardGroupingsetting, defaulting toScalaStewardConfig.Defaults, so consumer repos inherit the grouping. Set it toNilfor one PR per dependency.StewardGroup/StewardFilter/ScalaStewardConfigare re-exported fromautoImport.Two non-obvious details drove the shape, both found by reading Steward and action source:
repo-configinput is Steward's global config channel, and it merges ahead of the repo's own.scala-steward.conf. Since the default list ends in a{ group = "*" }catch-all, apullRequests.groupingblock in the repo file would be unreachable. Hence a build setting rather than docs pointing at the repo file.repo-configoff the runner filesystem, checks nothing out itself, and silently ignores a missing file at the default path. So the generated workflow gains a checkout step, andzipxWorkflowCheckdrift-checks.github/.scala-steward.conf. The check failing is what reports a missing config, because Steward never would.The trailing catch-all is load-bearing: Steward's version filters need both sides of a bump to parse as strict semver, and anything that fails to parse escapes every version-filtered group. Patch bumps ride along in the minor group so a separate patch group cannot re-fragment the PRs this consolidates.
Validated against Steward 0.39.1 directly: seven representative updates produced five PRs, nothing ungrouped.
Also considered and rejected: switching to Dependabot's new
sbtecosystem. It cannot update this repo. Shared version vals inproject/Dependencies.scalaare never bumped (latest_resolvable_versionreturns nil for multi-dependency properties and full-unlock is hardcoded false), and its sbt-plugin coordinates are wrong for sbt 2.x (sbt-zipx_3_2.0404s; the real artifact issbt-zipx_sbt2_3). Dependabot keeps its existinggithub-actionsjob unchanged.2. Remove em dashes from prose
Repo-wide sweep. Docs, scaladoc, comments, README, and ROADMAP now use colons, commas, semicolons, parentheses, or two sentences. No behavior change except two user-visible strings that contained one: the CI verify-gate echo and the plugin's undiffable-base-ref warning. En dashes in numeric ranges (cron
0-59,0-23) are left alone as typographically correct.Verification
scalafmtCheckAll,scalafmtSbtCheck: passworkflow/testFull; core/testFull; central/testFull; docs/testFull: 304 tests, 0 failed, 0 ignoredplugin/scripted:+ zipx/generate-checkzipxWorkflowCheck: all four generated files up to dateStill to do after merge, since both need the workflow on the default branch:
workflow_dispatchthe Steward workflow and confirm the log shows the config being picked up, and confirm consumer inheritance from another early-effect repo.