You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
To list milestones with current GitHub CLI versions, prefer the API endpoint:
142
+
143
+
.. code-block:: bash
144
+
145
+
gh api repos/LibreSign/libresign/milestones?state=all\&per_page=100
146
+
147
+
**Important: Mapping backports to original PRs**
148
+
149
+
When collecting PR data for a release, you may encounter backport PRs. These should be mapped to the original PR for proper documentation:
150
+
151
+
- **Backport PRs** are created with a naming pattern like: ``Backport: fix: ...`` or on a backport branch
152
+
- Look at the PR description or linked issues to find the **original PR number**
153
+
- In the changelog, use the **backport PR number** (specific to the branch) but reference both
154
+
155
+
Also exclude PRs that are only part of the release process itself, for example:
156
+
157
+
- release-drafter alignment or release housekeeping PRs
158
+
- follow-up lockfile repair PRs whose only purpose is to fix the backport branch
159
+
- hotfix PRs that already generated a published patch release section
160
+
161
+
Example for handling backports:
162
+
163
+
- Original PR on main: #6944 "fix: docmdp first signature allow"
164
+
- Backport PR on stable33: #6944 (same in this case) or #6945 on stable32
165
+
- In changelog, list: ``#6944 fix: docmdp first signature allow`` (use the stable branch specific PR number)
166
+
167
+
Defining release version numbers
168
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
169
+
28
170
1. Go to Milestones in the LibreSign repository:
29
171
30
172
https://github.com/LibreSign/libresign/milestones
@@ -40,13 +182,54 @@ Version numbers
40
182
2. To new features, increment with :code:`1` the ``MINOR`` version and reset ``PATCH`` to ``0``.
41
183
3. To bug fixes, increment the ``PATCH`` version.
42
184
185
+
.. note::
186
+
187
+
The Release Drafter workflow can help by pre-filling the draft version from
188
+
the stable branch history, but the final version decision is still validated
189
+
during the changelog curation step.
190
+
43
191
Stable branches
44
192
---------------
45
193
46
194
Each **stable branch** in LibreSign corresponds to a specific Nextcloud **MAJOR** version.
47
195
48
196
For example: ``stable21`` is compatible with Nextcloud 21.
49
197
198
+
Changelog format
199
+
----------------
200
+
201
+
The :code:`CHANGELOG.md` file uses a specific format to document releases. Follow this pattern:
202
+
203
+
.. code-block:: markdown
204
+
205
+
## [13.0.1] (stable33) - 2025-02-18
206
+
### Fixed
207
+
- #6944 fix: docmdp first signature allow
208
+
- #6945 fix: signature status propfind
209
+
- #6940 fix: avoid empty crl engine default
210
+
211
+
## [12.2.1] (stable32) - 2025-02-18
212
+
### Fixed
213
+
- #6943 fix: docmdp first signature allow
214
+
- #6946 fix: signature status propfind
215
+
- #6939 fix: avoid empty crl engine default
216
+
217
+
**Key format rules:**
218
+
219
+
- Use semantic versioning: ``[MAJOR.MINOR.PATCH]``
220
+
- Include the stable branch in parentheses: ``(stableXX)``
221
+
- Add the release date: ``YYYY-MM-DD``
222
+
- Group changes by type: ``Added``, ``Changed``, ``Fixed``, ``Removed``, etc.
223
+
- List PR number with hash: ``#XXXX`` followed by a colon and description
224
+
- Use lowercase for descriptions (following conventional commits)
225
+
- For backport releases, use the **stable branch-specific PR number** even if it differs from the original
226
+
- Always add new entries at the top (most recent first)
227
+
- Prefer user-visible changes in the release notes; keep purely internal test/refactor/dependency entries only when they are relevant to support or compatibility.
228
+
- Collapse dependency updates into a single changelog item (e.g. ``Bump dependencies``) instead of listing each maintenance PR.
229
+
- Always include ``Update translations`` in the release changelog.
230
+
- Do not include Dependabot-only commits in the final changelog section.
231
+
- Treat GitHub generated release notes as a draft source only; rewrite the final section so it tells the release story instead of listing every backport PR individually.
232
+
50
233
Release checklist
51
234
-----------------
52
235
@@ -87,16 +270,28 @@ with the correct values as you progress through the steps.
87
270
- [ ] Go to the main branch, pull the latest changes and create a new branch called `chore/changelog`
88
271
- [ ] Add the changelog entries to the `CHANGELOG.md` file, following the pattern used in the file.
89
272
- [ ] Make this to all releases that will be done in this process.
273
+
- [ ] Assign the PR to the correct milestone
274
+
- [ ] `main` uses the current `Next Major (XX)` milestone from `appinfo/info.xml`
275
+
- [ ] each stable branch uses its matching `Next Patch (XX)` milestone
90
276
- [ ] Create a PR against `main` branch at the `CHANGELOG.md` file with the changelog of all milestones that are subject to the release. Look the pattern used in the file and follow it.
91
-
You can use the :code:`[skip ci]` tag in the commit message to skip the CI checks for the backport PRs to make the process faster.
277
+
The **last commit** of every release PR must include :code:`[skip ci]`.
278
+
This keeps the release train moving and avoids waiting for a full CI cycle
279
+
right before the tag and publication steps.
280
+
Do not use the release PR to change anything beyond changelog and version bumps.
- [ ] Verify :code:`package.json` and :code:`package-lock.json` were updated correctly
291
+
- [ ] Commit these changes together with the changelog PR if needed
98
292
<!-- Duplicate the follow steps for each version that will be released, starting with the oldest version. -->
99
293
<!-- Pay attention to start with the **oldest** version here, so the appstore and github releases show the newest version as "Last release" and them. -->
294
+
<!-- Do not publish the newer release until the older release workflow is fully finished and validated in the App Store. -->
100
295
<!-- Replace "XX" with the Nextcloud stable branch number e.g. "22" for "stable22" -->
101
296
<!-- 1. Replace "20.1.9" with the version number e.g. "12.2.4" -->
102
297
<!-- Replace "20.1.8" with the previous version number e.g. "12.2.3" -->
@@ -112,14 +307,27 @@ with the correct values as you progress through the steps.
112
307
# Make sure the printed version matches the info.xml version
113
308
npm version --no-git-tag-version $(xmllint --xpath '/info/version/text()' appinfo/info.xml)
114
309
```
310
+
- [ ] Make sure the final commit of the PR uses :code:`[skip ci]`
311
+
- [ ] Confirm the PR only changes release files: `CHANGELOG.md`, `appinfo/info.xml`, `package.json`, `package-lock.json`
312
+
- [ ] Assign the PR to the matching `Next Patch (XX)` milestone of the stable branch
115
313
- [ ] Merge the backport
116
-
- [ ] Do a quick smoke test signing documents with:
117
-
- [ ] Chrome
118
-
- [ ] Edge
119
-
- [ ] Firefox
120
-
- [ ] Safari
314
+
- [ ] **Smoke test** - Sign a document in each supported browser:
- [ ] Verify version number in :code:`appinfo/info.xml` matches release tag
322
+
- [ ] Verify changelog in :code:`CHANGELOG.md` is correct and properly formatted
323
+
- [ ] Check GitHub Actions status for the merged PR
324
+
- [ ] Review AppStore entries for the stable branch (if available)
121
325
- [ ] Create the new milestone
122
326
- [ ] Rename milestone `💚 Next Patch (XX)` to `v20.1.9` in https://github.com/LibreSign/libresign/milestones
327
+
- [ ] Confirm the milestone was correctly renamed before writing the release body:
328
+
```sh
329
+
gh api 'repos/LibreSign/libresign/milestones?state=open' --jq '.[] | "\(.number) \(.title)"'
330
+
```
123
331
Unless last release of the stable branch:
124
332
- [ ] Create a follow up milestone for `💚 Next Patch (XX)` (Due date in ~4 weeks, ~4 days for beta/RC)
125
333
- [ ] Move all open issuesfrom milestone `v20.1.9` to `💚 Next Patch (XX)`: https://github.com/LibreSign/libresign/issues?q=is%3Aissue%20state%3Aopen%20milestone%3Av20.1.9
@@ -128,9 +336,14 @@ with the correct values as you progress through the steps.
128
336
- [ ] Archive all issues and PRs that were merged in this release
- [ ] Prepare a (pre-)release in https://github.com/LibreSign/libresign/releases/new?tag=v20.1.9&target=stable20
132
344
- [ ] Make sure that chosen tag is v20.1.9, target is stable20, and previous tag is v20.1.8
133
345
- [ ] Add the content of respective `CHANGELOG.md` section from merged PR
346
+
- [ ] In the release body, use the final closed milestone name `v20.1.9` after the milestone rename, never the previous `Next Patch (XX)` name
134
347
- [ ] Use the **Generate release notes** button and wrap the output result into
135
348
```
136
349
## What's Changed
@@ -141,4 +354,15 @@ with the correct values as you progress through the steps.
141
354
- [ ] Publish release
142
355
- [ ] Check that the GitHub Action started: https://github.com/LibreSign/libresign/actions
143
356
- [ ] Ensure that the GitHub Action finished successfully: https://github.com/LibreSign/libresign/actions
357
+
- [ ] **Post-release validation**:
358
+
- [ ] Verify the new version appears in AppStore: https://apps.nextcloud.com/apps/libresign
359
+
- [ ] Check that the package was properly built and published
360
+
- [ ] Verify changelog is visible on GitHub Releases page
361
+
- [ ] Confirm no errors in GitHub Actions logs
362
+
- [ ] If a publication fix is merged after the release tag is created, do not only rerun the old workflow
363
+
- [ ] Delete the GitHub release and the tag
364
+
- [ ] Recreate the tag from the updated stable branch head
365
+
- [ ] Recreate the GitHub release so the workflow checks out the corrected commit
366
+
- [ ] If there is another release to publish in the same cycle, stop here and wait for all checks above to be green before creating the next release tag
367
+
- [ ] Only after the older release is visible and correct on https://apps.nextcloud.com/apps/libresign/, publish the next newer release
144
368
- [ ] Post the changelog in [💬 LibreSign team public 👥](https://t.me/LibreSign)
0 commit comments