lukaszlenart commented on code in PR #1844:
URL: https://github.com/apache/struts/pull/1844#discussion_r3782771537


##########
.claude/skills/releasing-struts/release-runbook.md:
##########
@@ -0,0 +1,262 @@
+# Release Runbook
+
+The commands, in order. [`SKILL.md`](SKILL.md) holds the sequence, the gates 
and the judgement;
+this file is what you type.
+
+**Provenance.** Everything marked ✔ was verified against the repository, a 
completed release
+(7.3.0 / 6.11.0, August 2026), or the release manager's scripts. Everything 
marked
+**⚠ unverified** is carried over from the 2017 cwiki page and has *not* been 
confirmed against a
+current run — check it before relying on it, and correct this file when you do.
+
+**The scripts.** Phases 3 and 5 ship with this skill, in [`scripts/`](scripts):
+
+| Script | Phase | What it does |
+|---|---|---|
+| [`stage-assemblies.sh`](scripts/stage-assemblies.sh) | 3 | Closed staging 
repo → `dist/dev`, renamed and re-hashed |
+| [`promote-dist.sh`](scripts/promote-dist.sh) | 5 | `dist/dev` → 
`dist/release` |
+
+Both take `$VERSION` from the environment and refuse to run without it. They 
are ports of the
+release manager's local toolbox (`~/Projects/Apache/minatour/bin/`), unchanged 
in behaviour
+apart from `set -eu`, the `$VERSION` guard, tolerant hash cleanup and an 
explicit svn commit
+message — each deviation is listed in the script's own header.
+
+A third script in that toolbox, `update-struts2-draft-docs.sh`, exports 
Confluence into the
+retired svn production site. **It is dead and is deliberately not ported.** Do 
not run it.
+
+---
+
+## Phase 1 — Prepare
+
+✔ Two lines, two releases:
+
+| Line | Branch | Build check that must pass |
+|---|---|---|
+| 7.x | `main` | `Build and Test (JDK 17)` |
+| 6.x | `support/struts-6-x-x` | `Build and Test (8)` |
+
+Both branches are protected in `.asf.yaml` and must be green before you start.
+
+```bash
+git checkout main && git pull --ff-only
+mvn clean install -DskipAssembly
+```
+
+Then:
+
+- Decide the version number from semver impact. Do not read it off the 
`-SNAPSHOT`.
+- ✔ Confirm `struts-master` (currently `15`) and `struts-annotations` are 
released versions, not
+  snapshots. The root pom's `<parent>` must not point at a snapshot.
+- ✔ The BOM needs no version sync. `bom/pom.xml` inherits the root version 
through its
+  `<parent>` and declares members as `${project.version}`. The cwiki's
+  `struts-version.version` property no longer exists — ignore that step.
+- Review JIRA: every issue fixed since the last tag has a fix version; nothing 
unresolved carries
+  this one.
+- ⚠ unverified: the cwiki's "omnibus ticket" step. The 7.3.0 and 6.11.0 runs 
show no such ticket
+  — treat it as abandoned unless the PMC says otherwise.
+
+## Phase 2 — Cut
+
+✔ **Cut from a release branch, not from the line branch.** Both August 2026 
releases were built
+on `release/X.Y.Z-RC1` branched off the line:
+
+```bash
+git checkout -b release/7.3.0-RC1 main        # or off support/struts-6-x-x 
for 6.x
+git push -u origin release/7.3.0-RC1
+```
+
+The two `[maven-release-plugin]` commits land there and **`main` is never 
touched** — which is
+why the root pom still said `7.2.2-SNAPSHOT` after 7.3.0 shipped, and why the 
pom is worthless
+as a source for the release number.
+
+✔ `maven-release-plugin` 3.3.1, driven interactively, on that branch:
+
+```bash
+mvn release:prepare
+```
+
+✔ No flags. `autoVersionSubmodules` is configured in the root pom, along with 
the ASF parent's
+`useReleaseProfile=false`, `goals=deploy` and 
`releaseProfiles=apache-release`. If you find
+yourself passing `-D` to the release plugin, the setting belongs in the pom 
instead — a flag
+that has to be remembered is a flag that will be forgotten.
+
+✔ **At the SCM tag prompt, type `STRUTS_X_Y_Z`.** The plugin's default would be
+`struts2-parent-X.Y.Z`; every Struts tag in history is the underscore form, 
and the GitHub
+release, the Version Notes and the site all assume it.
+
+This one cannot move into the pom: `tagNameFormat` interpolates 
`@{project.version}` and has no
+string functions, so the best it could produce is `STRUTS_7.3.0`. The prompt 
stays.
+
+Dry run first if you want one — add `-DdryRun=true`, then `mvn release:clean` 
before the real
+run. On failure, re-run the same command: `-Dresume` defaults to true and it 
picks up where it
+stopped.
+
+✔ The result is two commits on the release branch,
+`[maven-release-plugin] prepare release STRUTS_X_Y_Z` and
+`[maven-release-plugin] prepare for next development iteration`, plus the tag.
+
+```bash
+mvn release:perform
+```
+
+✔ `retryFailedDeploymentCount=10` is configured on `maven-deploy-plugin` in 
the root pom, not
+passed here. It has to be in the pom to work at all: `release:perform` forks a 
fresh Maven
+build, and that fork does not inherit `-D` properties from the outer 
invocation — the flag the
+cwiki tells you to pass was doing nothing.
+
+⚠ unverified: the fallback for re-running `perform` elsewhere —
+`git checkout STRUTS_X_Y_Z && mvn javadoc:javadoc deploy -DperformRelease=true 
-Papache-release`.
+
+**Then close the staging repository** at <https://repository.apache.org/> — 
Staging Repositories
+→ select → Close. ⚠ unverified in detail, but the gate is checkable: the 
artifacts must resolve
+under

Review Comment:
   This supposed to be user action, inform the user to close the staging 
repository and then continue



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to