This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch docs/skill-announcing-release in repository https://gitbox.apache.org/repos/asf/struts-site.git
commit 1157bf34bc74d66f507550b022d9ec209b0ab60a Author: Lukasz Lenart <[email protected]> AuthorDate: Fri May 29 14:29:26 2026 +0200 docs: add announcing-struts-release skill Capture the repeatable release-announcement procedure as a Claude Code skill: add the announce-YYYY entry, bump the correct 6.x/7.x version variables in _config.yml, the conditional index.html year-link edit, move the superseded version into the Prior Releases table, open the draft PR, and draft the [ANN] user-list email (not committed). Derived from the 6.10.0 release and modeled on PR #292. Co-Authored-By: Claude Opus 4.8 <[email protected]> --- .claude/skills/announcing-struts-release/SKILL.md | 134 ++++++++++++++++++++++ 1 file changed, 134 insertions(+) diff --git a/.claude/skills/announcing-struts-release/SKILL.md b/.claude/skills/announcing-struts-release/SKILL.md new file mode 100644 index 000000000..6beaedb25 --- /dev/null +++ b/.claude/skills/announcing-struts-release/SKILL.md @@ -0,0 +1,134 @@ +--- +name: announcing-struts-release +description: Use when a new Apache Struts version has been released and you need to publish the website announcement (announce-YYYY.md, _config.yml, releases.md), open the PR, and draft the user-list email. +--- + +# Announcing a Struts Release + +## Overview + +Publishing a release announcement on the struts-site repo is a fixed, repeatable +procedure: add an announcement entry, bump the right version variables, move the +superseded version to Prior Releases, open a draft PR, and draft the `[ANN]` email +(the email is NOT committed — it is sent to the mailing list after merge). + +Model PRs: #292 (6.9.0 GA), this skill was derived from the 6.10.0 release. + +## Inputs to gather first + +1. **Version** (e.g. `6.10.0`) and **release date** (e.g. `25 May 2026`). +2. **Version Notes URL** — `{{ site.wiki_url }}/Version+Notes+<version>`. Fetch it + (use the cwiki page) to confirm date, bug fixes, dependency bumps, security fixes. +3. **Which GA line?** Struts ships two lines tracked separately in `_config.yml`: + - `current_version` = newest overall (the **7.x** line) + - `prev_version` = newest **6.x** maintenance release + A 6.x release updates the `prev_*` variables; a 7.x release updates the + `current_*`/`release_*` variables. **Don't touch the other line.** +4. **Security bulletin** — does a `S2-0XX` number exist? If the Version Notes + mention a security fix but no bulletin number is published, leave bulletin + links empty (match how the prior superseded row is listed). + +## Workflow + +1. **`source/announce-YYYY.md`** — add a new entry at the **top** of the list (newest + first), using the announcement template below. Anchor is `#a<YYYYMMDD>`. +2. **`_config.yml`** — bump the variables for the released line: + - 6.x: `prev_version`, `prev_version_short` (digits only, e.g. `6100`), + `prev_release_date`, `prev_release_date_short` (`YYYYMMDD`). + - 7.x: `current_version`, `current_version_short`, `release_date`, `release_date_short`. +3. **`source/index.html`** — usually **no edit needed**: the GA box renders from the + variables. **Read the relevant `<a href="announce-YYYY#a{{ site.…_release_date_short }}">` + line and compare its `announce-YYYY` to the year of your new entry.** If they differ + (the announcement crossed into a new year file), update the `announce-YYYY` part to the + new year — the anchor itself is variable-driven. If they already match, no edit. + Note: a brand-new year file is the "New announcement year" task in CLAUDE.md — also + create `source/announce-YYYY.md` and update the `.htaccess` redirect. +4. **`source/releases.md`** — move the now-superseded version of the **same line** into + the **Prior Releases** table, newest first. Match the column widths and the + vulnerability-cell style of the row above it (empty if no published bulletin). +5. **Branch + commit + draft PR** — branch `docs/announce-<version>`, commit type + `docs:`, then `gh pr create --draft --base main`. Return a clickable PR link. +6. **Draft the email** — output the `[ANN]` email (below) in chat. Do **not** commit it. + +## Announcement template (`announce-YYYY.md`) + +```markdown +#### <DD Month YYYY> - Apache Struts version <X.Y.Z> General Availability {#a<YYYYMMDD>} + +The Apache Struts group is pleased to announce that Apache Struts version <X.Y.Z> is available as a "General Availability" +release. The GA designation is our highest quality grade. + +The Apache Struts is an elegant, extensible framework for creating enterprise-ready Java web applications. +The framework has been designed to streamline the full development cycle, from building, to deploying, +to maintaining applications over time. + +> Please read the [Version Notes]({{ site.wiki_url }}/Version+Notes+<X.Y.Z>) to find more details about performed +> bug fixes and improvements. + +**All developers are strongly advised to perform this upgrade.** + +The 6.x series of the Apache Struts framework has a minimum requirement of the following specification versions: +Servlet API 3.1, JSP API 2.1, and Java 8. + +Should any issues arise with your use of any version of the Struts framework, please post your comments to the user list, +and, if appropriate, file [a tracking ticket]({{ site.jira_url }}). + +You can download this version from our [download](download.cgi#struts-ga) page. +``` + +For a **7.x** release adjust the spec-versions paragraph to the 7.x requirements +(Servlet 5.0 / Jakarta / Java 17 — copy from the most recent 7.x announcement). + +## Email template (`[ANN]` — NOT committed, sent to announcements list) + +Sent by the release manager to `[email protected]` (cc user list). +Plain text, full URLs inline, signed off. Mirror the website announcement wording: + +```text +Subject: [ANN] Apache Struts <X.Y.Z> + +The Apache Struts group is pleased to announce that Apache Struts +version <X.Y.Z> is available as a "General Availability" release. The GA +designation is our highest quality grade. + +The Apache Struts is an elegant, extensible framework for creating +enterprise-ready Java web applications. The framework has been +designed to streamline the full development cycle, from building, to +deploying, to maintaining applications over time. + +Please read the Version Notes to find more details about performed bug +fixes and improvements. +https://cwiki.apache.org/confluence/display/WW/Version+Notes+<X.Y.Z> + +All developers are strongly advised to perform this upgrade. + +The 6.x series of the Apache Struts framework has a minimum +requirement of the following specification versions: Servlet API 3.1, +JSP API 2.1, and Java 8. + +Should any issues arise with your use of any version of the Struts +framework, please post your comments to the user list, and, if +appropriate, file a tracking ticket. +https://issues.apache.org/jira/projects/WW/ + +You can download this version from our download page. +https://struts.apache.org/download.cgi#struts-ga + +Regards +Lukasz +``` + +If the release fixes a security issue with a published bulletin, add a line after +the Version Notes link pointing to `https://cwiki.apache.org/confluence/display/WW/S2-0XX`. + +## Common mistakes + +| Mistake | Fix | +|---------|-----| +| Bumping `current_version` for a 6.x release | 6.x updates `prev_*`; 7.x updates `current_*`. Lines are independent. | +| Editing `index.html` when staying in the same year | It auto-renders from variables; only edit when the year file changes. | +| Adding the new version to Prior Releases | Move the **superseded** (previous) version of that line, not the one just released. | +| Forgetting `*_short` variables | Short forms are digits-only version (`6100`) and `YYYYMMDD` date — anchors break otherwise. | +| Committing the email | The email is drafted in chat and sent to the list manually — never committed. | +| Inventing an `S2-0XX` number | Only link a bulletin that actually exists; otherwise leave it out. | +```
