Skip to content

Release workflow with test releases (beta/RC) - #259

Merged
codeling merged 1 commit into
ccr-c4633bb2-v97st1from
ccr-c4633bb2-v97st1-release
Nov 6, 2026
Merged

codeling merged 1 commit into
ccr-c4633bb2-v97st1from
ccr-c4633bb2-v97st1-release

Conversation

@codeling

@codeling codeling commented Nov 6, 2026

Copy link
Copy Markdown
Owner

Step 4 of the package automation (#250), stacked on #257: review only the top commit, merge #257 (with com_bfstop#27) first.

How a release works now

  1. Set the versions in both repositories. For a release (not a test release), also set the date of the CHANGELOG entry. Merge.
  2. Push the tag to com_bfstop first, then to bfstop (2.0.0-rc1, 2.0.0, …).
  3. release.yml runs on the tag:
    • Build and test: it runs all of ci.yml, which is now also a reusable workflow, against the tags. The component is checked out at the tag of the same name; if com_bfstop has no such tag, the run fails. The versions are checked against the tag. The package is built from the two tags, every Joomla site in the matrix installs it, and a site of the previous release is updated with it.
    • Draft release: it creates a draft GitHub release with pkg_bfstop, bfstop and com_bfstop zips, SHA256SUMS-<version>, and notes generated by package/release-notes.php: requirements, the CHANGELOG entry, and the checksums.
  4. You check the draft and publish it.

Test releases

  • Tags: X.Y.Z-alphaN, -betaN or -rcN.
  • On GitHub: they're marked as pre-release. Their notes start with a notice that Joomla's updater doesn't offer them. A site with a test release is offered the final release through the updater once it's out; later test releases have to be installed by hand.
  • Version in the manifests: a test release carries its full version (2.0.0-rc1), so testers can see what they installed.
  • CHANGELOG: the entry stays that of the release it leads to, 2.0.0 (unreleased), and doesn't need a date.
  • Kept out of update.xml: package/update.xml is no longer part of the version check. It describes what the update server offers, which is always the latest release. Step 5 generates it only from published releases, never prereleases.
  • Installer hint: the "configuration has moved" hint compares against 2.0.0-dev, so updating 2.0.0-rc1 → 2.0.0 doesn't show it again.

Tested locally

  • check-versions.php in every mode: stable vs. prerelease tags, invalid tags (2.0.0-rc0), and a CHANGELOG entry without a date.
  • Release notes for 2.0.0 and 2.0.0-rc1.
  • Real round trip on Joomla 5.4 + MySQL:
    1. Built a 2.0.0-rc1 package; that needs com_bfstop#27's deploy.sh.
    2. Installed it on a fresh site.
    3. Updated it to 2.0.0: exit 0, and no "configuration moved" hint.
    4. Re-installing rc1 over 2.0.0 is refused (JLIB_INSTALLER_INCORRECT_SEQUENCE), and the versions stay unchanged.
  • InstallerScriptTest has a new case: no hint when updating from 2.0.0-rc1. The integration and unit suites pass, and the workflow lint passes.

Not run yet: release.yml itself, because it only runs on a pushed tag. Its first real run would naturally be a 2.0.0-rc1 test release.


Generated by Claude Code

Pushing a version tag (com_bfstop tagged with the same name first) runs
release.yml: all of ci.yml (now also a reusable workflow) on the tag - the
package built from the two tags, installed by every Joomla site of the
matrix, a site of the previous release updated with it - and then a draft
GitHub release with the three zips, the SHA-256 sums and notes from the
CHANGELOG (package/release-notes.php), to be checked and published by hand.

Test releases: X.Y.Z-alphaN, -betaN and -rcN tags are marked as
pre-releases on GitHub and say in their notes that the update server
doesn't offer them. They carry that version in the manifests; their
CHANGELOG entry is that of the release they lead to.

- check-versions.php: accepts test release versions; the first CHANGELOG
  entry has to be the (base) release; --release=<tag> only needs the date
  for a release; --is-prerelease. package/update.xml is no longer checked:
  it is what the update server offers - the latest release, never a test
  release - not the version under development.
- ci.yml: on a tag, the com_bfstop tag of the same name is used (and has to
  exist), and the versions are checked against the tag.
- The "configuration has moved" hint is not shown when updating from a test
  release of 2.0.0 (compared with 2.0.0-dev instead of 2.0.0).
- package/README.md: versions, test releases and how to release.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AFJFMMUpch4LGexEiXN8Nc
@codeling
codeling added this pull request to stack #260 November 6, 2026 12:35
@codeling
codeling merged commit 172255e into main Nov 6, 2026
16 checks passed
@codeling
codeling deleted the ccr-c4633bb2-v97st1-release branch November 6, 2026 12:36
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.

2 participants