Skip to content

Support for multiple major production versions of the Rune DSL #226

Description

@dschwartznyc

Feature Request

Description of Problem:

The generator currently assumes there is exactly one "current" production version of the Rune DSL at any point in time. This assumption is baked into both halves of the dependency-update-to-release pipeline:

  • .github/renovate.json watches a single rosetta.dsl.version Maven property on the default branch and raises one dependency-update PR stream against it.
  • .github/workflows/release.yml reads rosetta.dsl.version from pom.xml, derives the release tag from that single value, and only permits a real release to be cut from main.

Rune DSL is planning to support two production versions concurrently. Once that happens, the generator's pipeline has no way to track or release against the second line — Renovate will only ever propose updates toward whichever DSL version main's pom.xml happens to point at, and the release workflow will refuse to cut a release from anywhere except main.

In Job Story form:

When Rune DSL has two concurrently supported production versions, I want the generator's dependency monitoring and release process to track and publish against both versions independently, so I can give consumers a generator release that matches whichever production DSL version they have adopted, without one line's updates blocking or overwriting the other's.

Potential Solutions:

This assumes the same generator codebase can correctly target both DSL production lines — i.e. nothing about the two lines requires different generator behavior, only a different DSL version to build/test against.

Single branch with dual version properties and a parameterized release

  • Keep a single branch (main). Pin both DSL lines as separate properties in pom.xml, e.g. rosetta.dsl.version.v9 and rosetta.dsl.version.v10, instead of the current single rosetta.dsl.version property.
  • Configure Renovate packageRules to match each property name independently (no baseBranches needed), so the bot raises two separate, correctly-scoped update streams — one per DSL major — both visible on the existing dependencyDashboard.
  • Parameterize release.yml with a "which DSL line to release" input, and have it select the corresponding property when resolving the version to build, tag, and publish. One source tree, two release artifacts.
  • Decide how to handle GitHub's single "latest release" designation — e.g. make_latest: false for the older line — and document both supported version streams in the README so consumers pin the generator version matching their adopted DSL major.
  • CI (ci.yml, build-and-test.yml) ideally runs the test suite against both properties (a small matrix addition) so a change that breaks one line is caught before release, not after.

Considered drawback: this bets that the two DSL lines never need different generator behavior. If that assumption breaks down later, the project would need to retrofit a branch split under pressure rather than having it in place ahead of time. It also means a single bug fix is automatically "live" for both lines as soon as it merges, which is desirable here but would not be true if the lines ever needed independent code paths.

Alternatives Considered

Per-line branch with scoped dependency monitoring and release access

If the two DSL lines turn out to require different generator behavior, fall back to maintaining one long-lived branch per supported line, with main always tracking the forward-looking line and a dedicated branch named after the line that will eventually retire — e.g. 9.x.x, mirroring the maintenance-branch naming rune-dsl itself already uses. The cutover would fork 9.x.x off main at its current state, then advance main's rosetta.dsl.version (and Renovate allowedVersions) to the new line. Renovate would use baseBranches + matchBaseBranches to scope each branch's updates, and the main-only guard in release.yml would become an allow-list of production branches.

This avoids the "bet" above, since each line's code can diverge freely, but it roughly doubles ongoing maintenance: bug fixes, dependency bumps unrelated to the DSL, and CI changes all have to be duplicated or cherry-picked across both branches for as long as both lines remain in production. Given the current assumption that one codebase serves both lines, this is not the recommended starting point — it's the fallback if that assumption turns out to be wrong.

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions