Skip to content

release-rotation generates a broken matrix: slotted to 8.2/rel-820, missing env.stub #768

Description

@kojiromike

Summary

The release-rotation automation has produced a broken CI matrix on the long-lived rotation PR release-rotation/auto (currently #760, "Release rotation (auto)"). The rotation is slotted one minor version too far ahead of reality: it has pre-rotated as if 8.1.0 already shipped, pointing the in-flight 8.1.0 work at the next minor (8.2.0 / rel-820) instead of the actual release branch (rel-810). The rotation registry tools/release/versions.yml is also still a self-described DRAFT.

The stable tracks (8.0.0, 7.0.4, flex, binary) all pass. Only the rotation-introduced 8.1.x / 8.2.0 slots are red.

Failing checks / evidence

  1. "Production Docker (8.1.0)" actually builds rel-820. docker/openemr/8.1.0/Dockerfile has ARG OPENEMR_VERSION pointing at the next-minor branch. The build runs:

    git clone https://github.com/openemr/openemr.git --branch "rel-820" --depth 1
    

    and fails with:

    fatal: Remote branch rel-820 not found in upstream origin
    

    (exit 128). rel-820 does not exist. "Production Docker (8.1.1)" fails identicallydocker/openemr/8.1.1/Dockerfile has the same mis-pointed ARG OPENEMR_VERSION.

  2. Registry tools/release/versions.yml is mis-slotted and marked DRAFT. Its header reads "DRAFT: built by manual sweep on 2026-04-29" and it contains FIXMEs referencing PRs feat(release): add openemr-devops slice of release automation (#664) #665 and release-rotation receiver: openemr-tag dispatch fails to slide window (next/dev not promoted, patch field dropped) #746. Current slots:

    • current = 8.1.0 (rel-810)
    • next = 8.2.0 (rel-820)
    • dev = 8.2.0 (rel-820)

    This is effectively pre-rotated as if 8.1.0 had already shipped. 8.1.0 is not tagged yet.

  3. BATS 8.2.0 / Functionality 8.2.0 jobs fail because they target a docker/openemr/8.2.0 directory that does not exist. Only docker/openemr/8.0.0, 8.1.0, and 8.1.1 exist on the branch.

  4. ShellCheck fails. The new docker/openemr/8.1.0/ and 8.1.1/ dirs were copied from 8.0.0 but env.stub was not carried over. openemr.sh carries a # shellcheck source=env.stub-style reference, so ShellCheck reports:

    Not following: docker/openemr/8.1.0/env.stub: openBinaryFile: does not exist
    

    The registry's files: list maps the shellcheck_source kind only for the 8.0.0/*.sh files, not the new dirs.

Expected slot assignments

For the in-flight 8.1.0 release (NOT tagged yet), slots should be:

  • current = 8.0.0
  • next = 8.1.0 (rel-810)
  • dev = master

The docker/openemr/8.1.0/ Dockerfile should point at rel-810. New version dirs must include env.stub. The premature 8.2.0 / rel-820 references should be removed.

Impact

  • Blocks merging the infra rotation PR for the 8.1.0 release.
  • Admin-merging it anyway would be harmful: it would roll the CI matrices onto nonexistent rel-820 / 8.2.0 slots.
  • It does not self-heal when v8_1_0 is tagged — the slot assignments are simply wrong, and docker/openemr/8.2.0 / rel-820 do not exist.

Suspected cause (hypothesis)

Either the slot-derivation / rotate.php logic computed slots one minor ahead, or the draft versions.yml was hand-seeded ahead of reality (tie-in with the pending #665 / #746 work). The fix should:

  • Set slots to current = 8.0.0 / next = 8.1.0 (rel-810) / dev = master.
  • Point the docker/openemr/8.1.0/ Dockerfile at rel-810.
  • Ensure new version dirs include env.stub.
  • Remove the premature 8.2.0 / rel-820 references.

Ideally this should be root-caused in the rotation tooling so it cannot recur, rather than only hand-patched.

Reproduction

  1. Open PR Release rotation (auto) #760 (release-rotation/auto) in openemr/openemr-devops.
  2. View the failing "Production Docker (8.1.0)" job — it clones rel-820 and fails with fatal: Remote branch rel-820 not found in upstream origin.
  3. View the ShellCheck job — it fails with Not following: docker/openemr/8.1.0/env.stub: ... does not exist.
  4. Confirm docker/openemr/8.2.0 does not exist on the branch (only 8.0.0, 8.1.0, 8.1.1), which is why the BATS / Functionality 8.2.0 jobs fail.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions