Skip to content

docs: rewrite the release guidelines as the current release process - #324

Merged
lukaszlenart merged 1 commit into
mainfrom
docs/release-guidelines-rewrite
Aug 14, 2026
Merged

docs: rewrite the release guidelines as the current release process#324
lukaszlenart merged 1 commit into
mainfrom
docs/release-guidelines-rewrite

Conversation

@lukaszlenart

Copy link
Copy Markdown
Member

Why

source/release-guidelines.md described a release process nobody has run in years — an Ant release target, Cactus tests, a test build posted to svn.apache.org/struts/, a release plan on wiki.apache.org. The only end-to-end description of how a release is actually made was the cwiki page Building Struts 2 — Normal release, last revised in 2017, which is still right about JIRA, the release plugin, Nexus and dist.apache.org and wrong about everything downstream:

It says Reality
Branches develop / master main and support/struts-6-x-x
Tag STRUTS_2_3_x STRUTS_X_Y_Z
Export the wiki to /docs No longer part of the site
Docker Jekyll, commit content/, svn co .../production/struts The site builds from a PR to apache/struts-site
people.apache.org, announce.md, downloads.html Dead host; the files are announce-YYYY.md, releases.md and download.cgi

The page

Seven phases — prepare, cut, stage, vote, promote, publish, advisories — each with a gate someone other than the release manager can verify, and the commands needed at each step. It is written to be followable on its own, so there is one document rather than two that disagree.

Content comes from the releasing-struts skill added in apache/struts#1844, which was itself verified against the 7.3.0 and 6.11.0 runs. The things most likely to surprise a release manager working from the old page:

  • Releases are cut on a release/X.Y.Z-RC1 branch off the line, not on the line branch. A failed vote is a deleted branch, not a revert — and main still read 7.2.2-SNAPSHOT after 7.3.0 shipped, so the pom is worthless as a source for the release number.
  • mvn release:prepare / release:perform take no command-line flags any more; autoVersionSubmodules and retryFailedDeploymentCount live in the pom.
  • The SCM tag prompt still has to be answered STRUTS_X_Y_Z by hand.
  • The site update is this repository's PR flow — no content/ commit, no production svn checkout.
  • The [ANN] mail goes To: user@ with Cc: announce@, announcements@struts, and must be plain text from an @apache.org identity.
  • The security phase is last, and the ordering GA → bulletin → advisory mails → CVE is spelled out, along with the rule that no advisory detail goes into release paperwork.

The Coding Conventions and Clarifications sections are dropped in favour of a pointer to Coding standards, which covers the same ground and is maintained. The page keeps its URL, its nav entry and the incoming link from builds.md.

Verified

bundle exec jekyll build is clean; all seven phase anchors resolve from the generated ToC, the eight alert callouts render, and every internal link (coding-standards, builds, bylaws, security, security/, download.cgi) points at a page that exists.

Follow-up — cwiki

Once this merges, these pages get replaced with pointers at
https://struts.apache.org/release-guidelines.html (stubs rather than deletions, so the inbound links and search results keep working), and the Contributors Guide links get updated:

Page State
27832970 Building Struts 2 — Normal release 2017; superseded by this page
27834014 Building Struts 2 — Fast track release 2014; already self-marked outdated
27832965 Building Struts Annotations 2011; svn-era
27839549 Building Struts Master 2012; svn-era

Version Notes and Migration Guide pages stay on the wiki — those are per-release artifacts, not process docs.

Still needs porting, and deliberately not invented here:

  • Releasing struts-master. apache/struts-master is a git repository now, so the 2012 svn instructions are stale, and the current process has not been verified by anyone recently.
  • Releasing struts-annotations. Same situation.
  • The milestone / RC variant (7.0.0-M1-style), which the "fast track" page half-covered.
  • struts-archetypes and struts-extras — no process page was found for either; whether one ever existed is unknown.

🤖 Generated with Claude Code

The Release Process section described a process that has not been run in
years: an Ant "release" target, Cactus tests, a test build posted to
svn.apache.org/struts/, and a release plan on wiki.apache.org. The only
end-to-end description of how a release is actually made was the cwiki
page "Building Struts 2 - Normal release", last revised in 2017, which
is right about JIRA, the release plugin, Nexus and dist.apache.org and
wrong about everything downstream from there.

Replace it with the seven-phase process the 7.3.0 and 6.11.0 releases
were made with - prepare, cut, stage, vote, promote, publish, advisories
- each with a gate that someone other than the release manager can
verify, and with the commands needed at each step. Notably: releases are
cut on a release/X.Y.Z-RC1 branch rather than on the line branch, the
maven-release-plugin takes no command-line flags now that they live in
the pom, the SCM tag prompt needs STRUTS_X_Y_Z typed by hand, and the
site update is a pull request rather than an svn commit to a production
checkout that no longer exists.

Drop the Coding Conventions and Clarifications sections in favour of a
pointer to the coding standards page, which covers the same ground and
is maintained.

This page is now the source of truth for the process; the cwiki pages
will be replaced with pointers to it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@asf-ci

asf-ci commented Aug 14, 2026

Copy link
Copy Markdown

Staged site is ready at https://struts.staged.apache.org/

@lukaszlenart
lukaszlenart merged commit a4cb2e9 into main Aug 14, 2026
1 check passed
@lukaszlenart
lukaszlenart deleted the docs/release-guidelines-rewrite branch August 14, 2026 11:27
lukaszlenart added a commit to apache/struts that referenced this pull request Aug 14, 2026
…lines

The release process is now documented at struts.apache.org/release-guidelines.html
(apache/struts-site#324, #325), and the cwiki pages the skill warned about are
stubs pointing there. The skill was still treating "Building Struts 2 - Normal
release" as a live trap and carrying a near-complete second copy of the process
in release-runbook.md - two sources of truth that would drift on the next release.

Cut the runbook down to what the site page cannot carry: where a step is the
release manager's to take rather than the agent's (closing and releasing the
Nexus staging repository), why the STRUTS_X_Y_Z tag prompt cannot move into the
pom, the text/plain contract on the [ANN] mail, and the scripts this skill ships.
Everything else is a link.

SKILL.md keeps the gates and the judgement, and now says corrections belong in a
struts-site PR rather than here.

Two fixes that predate the port: the phase 1 gate said "BOM in sync" while the
runbook said the BOM needs no sync, and the runbook told you never to run the
staging script from a checkout and then gave a checkout-relative invocation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
lukaszlenart added a commit to apache/struts that referenced this pull request Aug 14, 2026
…lines (#1848)

The release process is now documented at struts.apache.org/release-guidelines.html
(apache/struts-site#324, #325), and the cwiki pages the skill warned about are
stubs pointing there. The skill was still treating "Building Struts 2 - Normal
release" as a live trap and carrying a near-complete second copy of the process
in release-runbook.md - two sources of truth that would drift on the next release.

Cut the runbook down to what the site page cannot carry: where a step is the
release manager's to take rather than the agent's (closing and releasing the
Nexus staging repository), why the STRUTS_X_Y_Z tag prompt cannot move into the
pom, the text/plain contract on the [ANN] mail, and the scripts this skill ships.
Everything else is a link.

SKILL.md keeps the gates and the judgement, and now says corrections belong in a
struts-site PR rather than here.

Two fixes that predate the port: the phase 1 gate said "BOM in sync" while the
runbook said the BOM needs no sync, and the runbook told you never to run the
staging script from a checkout and then gave a checkout-relative invocation.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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