Skip to content

feat(monorepo): linked and fixed package groups #494

Description

@BryanFRD

Problem

No way today to express "these N packages move in lockstep". The only mechanism approaching it is `dependsOn` which forces a cascade but doesn't share the version number.

Comparison

changesets:

  • `linked`: packages bump together when one gets commits (e.g. `react` + `react-dom` both go from 1.2.3 to 1.2.4 when one of them gets a fix)
  • `fixed`: packages share an identical version line forever (`@scope/a` and `@scope/b` are always the same)

lerna had this as `mode: "fixed"`.

Proposal

```toml
[workspace]
linked = [["react", "react-dom"]]
fixed = [["@scope/a", "@scope/b", "@scope/c"]]
```

In `src/monorepo/run/mod.rs`, after computing per-package bumps:

  • For each `linked` group: take `max(bump_type)` across the group, apply to all members only if at least one member was bumped. Names stay distinct but version equal.
  • For each `fixed` group: ignore individual bump signals; apply max across the union to all members on every release where any has a commit. All version files written to the same string.

Edge cases

  • Member appears in both linked and fixed → validate-time error.
  • Member listed in linked/fixed but missing from `package[]` → validate-time error.
  • Prerelease channels interact: a fixed group on `beta` channel needs all members to bump on the same prerelease counter.

Test plan

  • Linked: commit `feat:` on pkg A in a linked ["A", "B"] group. Assert B's version bumps the same minor amount even though no commits touched it.
  • Fixed: commit `feat:` on A, `fix:` on B in fixed ["A", "B", "C"]. Assert all three end up on the same minor version (max of bumps), including C.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementImprovement to existing feature

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions