Skip to content

Include GitHub issues in the release notes built by build-changelog.sh - #1701

Merged
dashorst merged 5 commits into
masterfrom
changelog-github-issues
Oct 23, 2026
Merged

dashorst merged 5 commits into
masterfrom
changelog-github-issues

Conversation

@dashorst

@dashorst dashorst commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Part of #1699, backported in #1702 (10.x), #1703 (9.x) and #1704 (8.x). build-changelog.sh now builds the release notes of a release from the commits on its branch, looking up the issues they fix in Jira and on GitHub. A release without a Jira version, such as 10.12.0, still gets a changelog section.

The old script was broken for every version: Jira's ReleaseNote.jspa page answers anonymous requests with 401 now, so the version-id lookup always failed. Jira is also read-only now, so a Jira issue fixed after that can no longer be resolved or given a fix version. Of the options in the issue, this takes the commit-based one: nothing on GitHub records the release, and milestones or labels would mean tagging every issue for this release by hand first.

  • Jira issues are the ones resolved as Fixed with the release as fix version, plus the ones whose key is in the subject of a commit since the previous release. On 10.x the subjects add WICKET-7199, 7203 and 7204, still open in Jira, and WICKET-7205, which Jira lists under 10.11.0 although its fix came after that release. A key that a commit before the previous release already has in its subject is not used, so "carry the WICKET-6877 fix over" doesn't list WICKET-6877 again. An issue resolved as anything other than Fixed is left out.
  • GitHub issues are the ones referenced from those commits: any reference in the subject, and in the body GitHub issue #N or #N after fixes, closes or resolves. A pull request number contributes the issues the pull request closes. Issues closed as not planned or as a duplicate are left out.
  • Copies: a GitHub issue whose title starts with a Jira key, as in [WICKET-7199] Summary, is a copy of that Jira issue. When the Jira issue is in the notes, the copy is listed under the Jira key only.
  • Groups come from GitHub's issue types: Bug, Feature (as New Feature, next to Jira's) and Task. Keys are [GH-N], as Apache Arrow writes them. The layout is otherwise unchanged, so release.sh needs no change.
  • Flags: before touching the changelog, the script lists the GitHub issues in the notes that are still open, open copies, and issues without a type, and exits with an error. Closing an issue stays with a person, once every branch that needs the fix has it. --force merges the notes anyway, for example when a backport of one of the fixes to another branch is still under way. Jira issues are not checked, since Jira is read-only.

Review

The only file is build-changelog.sh. The five commits are the steps of the design and read best in order:

  1. Jira through the REST API, GitHub issues from the commits, grouping, [GH-N].
  2. Jira keys from the commit subjects, for fixes Jira can no longer record.
  3. The report of open issues and copies, replacing a check for closed issues no commit referenced, which only ever listed issues that were fine.
  4. Body references count only in the forms that name a fixed issue. The message of commit 3 mentions Redundant japicmp exclusions need to removed #1584 and CrossOrigin.USE_CREDENTIALS renders user-credentials instead of use-credentials #1659 in passing, which put both in the 9.x and 8.x notes.
  5. Flagged issues stop the script unless --force is given; a copy is recognised by its title prefix only.

The commit messages have the reasoning.

Risk

Only release tooling changes; nothing in the build or the artifacts does. The release manager needs jq and a logged-in gh; the script checks for both. A release run now fails while an issue in its notes is open on GitHub. On every branch that is #1699 itself until these PRs are merged. On master and 10.x it is also #1584 and #1659, and on master #1593 and #1616; all four are fixed but were never closed.

A fix tracked both in Jira and on GitHub without the title prefix is listed twice. Regenerating 10.10.0 lists WICKET-7189 and GH-1492, which are the same fix; renaming GH-1492 to [WICKET-7189] … lists it once.

Tests

  • Regenerating 10.10.0 from the commit before its changelog commit gives the original Jira section plus two entries. WICKET-7183 was fixed in that release (324e17a), is still open in Jira, and has no fix version, so the original notes missed it. AjaxRequestHandler generation of PartialPageUpdate is not extensible #1492 is the duplicate described above.
  • A stub gh checked the copy and untyped paths on 10.x. Both [WICKET-7204] … and WICKET-7203: … are taken as copies, and "Regression of the WICKET-7205 fix" is not. A copy that commits reference is folded into its Jira entry. An untyped issue is flagged.
  • Without --force, every branch stops with the open issues listed and leaves the changelog unchanged.
  • release.sh's extraction reads the new sections, and shellcheck is clean at -S warning.

Output on master (11.0.0)

Run at this branch's tip with --force and Enter at the prompt. Without --force the run ends after the list of open issues, with:

The changelog is left unchanged because of the issues above. Run this tool again
once they are taken care of, or with --force to merge the release notes anyway.

CHANGELOG-11.x does not exist yet, so the script creates it.


Apache Wicket release notes generator
=====================================
This tool collects the issues resolved in the upcoming release from JIRA
and GitHub, and merges them with the existing CHANGELOG in a text format.

Version to collect the release notes for: 11.0.0
Commits searched for GitHub issues:       rel/wicket-10.11.0..HEAD

Press <enter> to continue 

Collecting the resolved issues -- making web requests
  - retrieving JIRA issues fixed in 11.0.0: 18
  - retrieving JIRA issues referenced since rel/wicket-10.11.0: 9
  - retrieving GitHub issues referenced since rel/wicket-10.11.0: 20
  - looking up GitHub copies of the JIRA issues: 0

These GitHub issues are fixed in this release, but still open. Close them once every
branch that needs the fix has it:

    GH-1593	Typo in WARN message
    GH-1616	AsynchronousPageStoreTest.storeAsynchronousContextClosed never observes its own assertions
    GH-1659	CrossOrigin.USE_CREDENTIALS renders user-credentials instead of use-credentials
    GH-1584	Redundant japicmp exclusions need to removed
    GH-1699	Include GitHub issues in the release notes built by build-changelog.sh

Merging the release notes anyway because of --force.

  - merging release notes into changelog: done

diff --git a/CHANGELOG-11.x b/CHANGELOG-11.x
new file mode 100644
index 0000000000..43f9af106e
--- /dev/null
+++ b/CHANGELOG-11.x
@@ -0,0 +1,66 @@
+This file contains all changes done in releases for Apache Wicket 11.x.
+
+=======================================================================
+
+Release Notes - Wicket - Version 11.0.0
+
+** Bug
+
+    * [WICKET-7107] - CSP Header not rendered when using RedirectPolicy.AUTO_REDIRECT
+    * [WICKET-7182] - Wicket Autocomplete calls event on a non jquery object
+    * [WICKET-7186] - wicket 10.9.0 / 10.9.1 leaks File Reaper threads
+    * [WICKET-7189] - make partial page update creation pluggable.
+    * [WICKET-7199] - Vulnerable dependencies need to be updated
+    * [WICKET-7203] - wicket-extensions: Dependency on jackson-databind should be optional in module-info.java
+    * [WICKET-7205] - CSP-Headers not set if RenderPageRequestHandler wrapped in more than one IRequestHandlerDelegates
+    * [GH-1576] - BUG since 10.11.0: Wrong escaping in Button label,while getEscapeModelStrings=false
+    * [GH-1582] - build fails on SignOut
+    * [GH-1593] - Typo in WARN message
+    * [GH-1616] - AsynchronousPageStoreTest.storeAsynchronousContextClosed never observes its own assertions
+    * [GH-1620] - TrapFocusBehavior: Tab/Shift+Tab at trap boundary throws TypeError on wicket-10.x
+    * [GH-1646] - Wicket.Event.remove does not remove a listener added for several event types
+    * [GH-1647] - The WebSocket charts example calls jQuery.parseJSON, which jQuery 4 removed
+    * [GH-1650] - AjaxButton triggering the submit event also submits the form in Firefox
+    * [GH-1658] - The quickstart archetype's Start.java does not compile against Jetty 12
+    * [GH-1659] - CrossOrigin.USE_CREDENTIALS renders user-credentials instead of use-credentials
+    * [GH-1670] - problems with upload to resource
+    * [GH-1678] - Quickstart archetype: give slf4j-simple test scope
+    * [GH-1688] - WebSocket: Request wrappers break the Servlet header contract (case-sensitive lookup, single-use enumerations)
+
+** New Feature
+
+    * [WICKET-7169] - Make partHeaderSizeMax in AbstractFileUpload configurable
+    * [WICKET-7190] - Unified cryptography API
+    * [WICKET-7196] - Allow unescaped wicket:label tags
+    * [GH-1492] - AjaxRequestHandler generation of PartialPageUpdate is not extensible
+    * [GH-1583] - create a version of wicket ajax and all the other standard components that is jQuery independent.
+    * [GH-1614] - Make LoadableDetachableModel#detach() final and add detach hooks that receive the attached object
+    * [GH-1631] - Add Ajax veil behaviors that block the page, or a component, while a request runs
+    * [GH-1669] - multiple file upload to resource + drag and drop files and upload to resource.
+
+** Improvement
+
+    * [WICKET-7135] - Work on deprecation warnings
+    * [WICKET-7144] - Improve Ajax updates of form component panels
+    * [WICKET-7172] - Support new CSP style, script directives
+    * [WICKET-7176] - Bump up CDI API and Weld versions
+    * [WICKET-7179] - add support for jQuery 4.0.0
+    * [WICKET-7184] - Make <wicket:header-items/> HTML spec compliant
+    * [WICKET-7187] - JavaScript header items: `module` for content, and import maps
+    * [WICKET-7188] - Sign file upload resource constraints
+    * [WICKET-7191] - Deprecate HTML5Attributes and move its logic to FormComponet hierarchy
+    * [WICKET-7192] - restrict SourcesPage to resources of the page's own package
+    * [WICKET-7195] - Add tag type="search" to those supported by TextField
+    * [WICKET-7200] - Align class-vs-package resolution across the wicket-auth-roles annotations
+    * [WICKET-7204] - Don't use INJECTION for ByteBuddy proxy creation
+
+** Task
+
+    * [WICKET-7193] - Deprecate and remove IAuthenticationStrategy
+    * [WICKET-7194] - Deprecate and remove Include
+    * [GH-1584] - Redundant japicmp exclusions need to removed
+    * [GH-1699] - Include GitHub issues in the release notes built by build-changelog.sh
+
+=======================================================================
+
+

[detached HEAD 30a5d547c4] Added CHANGELOG for release 11.0.0
 1 file changed, 66 insertions(+)
 create mode 100644 CHANGELOG-11.x

The CHANGELOG-11.x file has been updated and committed.

To revert the changes to the CHANGELOG:

    git reset HEAD^ --hard

Have fun!

🤖 Generated with Claude Code

build-changelog.sh built the release notes only from Apache Jira: it
looked up the Jira version id on the ReleaseNote.jspa page and copied
that page's text release notes into the changelog. Issues are filed on
GitHub now, so their fixes never reached the changelog, and a release
without a Jira version stopped the script. The page also answers
anonymous requests with 401 by now, so the script failed for every
version.

The script now collects both:

- the Jira issues resolved as Fixed with the version as fix version,
  through the anonymous REST API; a version Jira does not know is
  skipped instead of failing;
- the GitHub issues referenced from the commits since the previous
  release, as #N, GH-N or an issue URL, either directly or through a
  pull request that closes them. Issues closed as not planned or as a
  duplicate are left out.

The previous release is the rel/wicket-* tag with the highest version
below the one being built; --since overrides it. Release tags are not
on the maintenance branches, so the range is taken from the tag rather
than from git describe.

The repository has no milestones or type labels, so the commits are the
only record of which release fixed an issue that needs no bookkeeping.
A fix whose commits do not reference its issue is missed, so the script
lists the issues closed as completed in the same period that no commit
on any branch references, for the release manager to check before it
commits. Issues referenced only from another branch are left out of that
list: on a maintenance branch they are almost all fixes that were not
backported.

GitHub issues get the [GH-N] key, which GitHub links by itself, and are
grouped by their issue type: Bug, Feature (as New Feature, next to
Jira's) or Task. Issues without a type go into an 'Other' group, and the
script reports how many there are so their type can be set first.

The layout of the notes is unchanged, so release.sh still reads them
from /tmp/release-notes-<version>.txt or cuts them from the changelog.
Regenerating 10.10.0 gives the same Jira section as the original
changelog commit.

The script now runs under bash, which it already needed, and needs jq
and a GitHub CLI that is logged in. A version given as argument is used
as is; the major version is taken from it instead of a pattern that
required a qualifier. A changelog that does not exist yet, CHANGELOG-11.x
on master, is created, and the diff shown before the commit is taken
after staging, so it includes such a new file.

GitHub issue #1699

Generated-by: Claude Code (Claude Opus 5.5)
@codecov-commenter

codecov-commenter commented Oct 23, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 62.32%. Comparing base (58ac565) to head (ad352df).

Additional details and impacted files
@@             Coverage Diff              @@
##             master    #1701      +/-   ##
============================================
- Coverage     62.34%   62.32%   -0.02%     
- Complexity    11361    11363       +2     
============================================
  Files          1253     1253              
  Lines         48438    48438              
  Branches       6794     6794              
============================================
- Hits          30198    30191       -7     
- Misses        15538    15550      +12     
+ Partials       2702     2697       -5     
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

JIRA is read-only now. An issue fixed after that can no longer be
resolved or given a fix version, so the query for the issues resolved as
Fixed in the release left it out. On wicket-10.x the notes for 10.12.0
missed WICKET-7199, WICKET-7203 and WICKET-7204, all still open in JIRA,
and WICKET-7205, which JIRA lists under 10.11.0 although its fix came
after that release.

The script now also takes the JIRA keys from the subjects of the commits
since the previous release and looks them up in JIRA, for the type and
summary. Two rules keep out the keys a commit only mentions: a key from
the body is not used, and neither is a key that a commit before the
previous release already has in its subject, which drops for example
"carry the WICKET-6877 fix over" on master. An issue resolved otherwise
than as Fixed is left out. JIRA's search skips a key it does not know
instead of failing.

The fix-version query stays, so the notes of a release that JIRA did
track are unchanged.

GitHub issue #1699

Generated-by: Claude Code (Claude Opus 5.5)
The script listed the GitHub issues closed as completed since the
previous release that no commit referenced, as possible fixes missing
from the notes. In practice it listed fixes made on other branches, and
after narrowing it to issues no branch referenced, only GH-1588, a copy
of WICKET-7199. It nagged about issues that were fine, so it is gone.

What the release manager is told now is about the issues in the notes:

- A GitHub issue the commits of the release reference but that is still
  open is reported, to be closed once every branch that needs the fix
  has it. On wicket-10.x that is #1584, #1659 and #1699.
- A GitHub issue with a JIRA key in its title is taken as a copy of that
  JIRA issue. When the JIRA issue is in the notes, the copy is listed
  under the JIRA key only, so a fix is not listed twice when commits
  reference both, and a copy that is still open is reported. JIRA is
  read-only, so the copy is where such an issue can be closed.

Both reports only pause the script; neither changes what is merged into
the changelog.

GitHub issue #1699

Generated-by: Claude Code (Claude Opus 5.5)
…ed issue

The script took every #N in a commit message as an issue the commit
fixes. A body that only mentions an issue put it in the release notes:
the message of the previous commit names #1584 and #1659 in passing, so
the notes for 9.25.0 and 8.20.0 listed both, although neither fix is on
those branches.

The subject still counts as a whole, as does a pull request number in
it. In the body a reference now counts in the forms that say the commit
fixes the issue: 'GitHub issue #N', the form the commits of this project
use, and #N after fixes, closes or resolves, with or without 'issue' in
between. On the ranges of the coming releases this finds the same issues
as before, except on master, where a commit that adds a regression test
for #1618 only mentions it.

GitHub issue #1699

Generated-by: Claude Code (Claude Opus 5.5)
The script reported the open GitHub issues in the notes and the ones
without an issue type, then merged the notes after a key press. A
release could go out with issues still open and entries under 'Other'.

It now stops before it touches the changelog and exits with an error
when it flags an issue:

- a GitHub issue in the notes that is still open;
- an open GitHub copy of a JIRA issue in the notes;
- a GitHub issue without an issue type.

Closing an issue stays with a person, once every branch that needs the
fix has it, and setting a type likewise. --force merges the notes anyway,
for example for a release that goes out while a backport of one of its
fixes to another branch is still under way. JIRA issues are not checked,
since JIRA is read-only.

A GitHub issue now counts as a copy of a JIRA issue only when its title
starts with the key, as '[WICKET-1234] Summary' or 'WICKET-1234 Summary'.
A key further on in the title, as in a new issue about the regression of
an old fix, no longer makes it one.

GitHub issue #1699

Generated-by: Claude Code (Claude Opus 5.5)
@dashorst
dashorst merged commit 97b3bf5 into master Oct 23, 2026
3 checks passed
@dashorst
dashorst deleted the changelog-github-issues branch October 23, 2026 17:19
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