Skip to content

Group Scala Steward update PRs; remove em dashes from prose - #54

Merged
russwyte merged 3 commits into
mainfrom
feat/steward-grouping-and-prose-cleanup
Aug 3, 2026
Merged

Group Scala Steward update PRs; remove em dashes from prose#54
russwyte merged 3 commits into
mainfrom
feat/steward-grouping-and-prose-cleanup

Conversation

@russwyte

@russwyte russwyte commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Two commits, reviewable independently.

1. Group Scala Steward update PRs

Scala Steward opens one PR per dependency by default. This generates 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, defaulting 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, both found by reading Steward and action source:

  • The action's repo-config input 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, a pullRequests.grouping block in the repo file would be unreachable. Hence a build setting rather than docs 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: 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 sbt ecosystem. It cannot update this repo. Shared version vals in project/Dependencies.scala are never bumped (latest_resolvable_version returns 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.0 404s; the real artifact is sbt-zipx_sbt2_3). Dependabot keeps its existing github-actions job 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: pass
  • workflow/testFull; core/testFull; central/testFull; docs/testFull: 304 tests, 0 failed, 0 ignored
  • plugin/scripted: + zipx/generate-check
  • zipxWorkflowCheck: all four generated files up to date

Still to do after merge, since both need the workflow on the default branch: workflow_dispatch the Steward workflow and confirm the log shows the config being picked up, and confirm consumer inheritance from another early-effect repo.

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.
@russwyte
russwyte merged commit 6a48f9b into main Aug 3, 2026
7 checks passed
@russwyte
russwyte deleted the feat/steward-grouping-and-prose-cleanup branch August 3, 2026 23:54
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