Skip to content

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

@kojiromike

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

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions