Skip to content

Commit 4e14df7

Browse files
Merge PR #13823: Update release process following rocq-prover/rfcs#52.
Reviewed-by: ejgallego Ack-by: gares
2 parents 5b0bbc0 + 6ccec2f commit 4e14df7

File tree

1 file changed

+159
-152
lines changed

1 file changed

+159
-152
lines changed

dev/doc/release-process.md

+159-152
Original file line numberDiff line numberDiff line change
@@ -1,169 +1,159 @@
1-
# Release process #
2-
3-
## As soon as the previous version branched off master ##
4-
5-
In principle, these steps should be undertaken by the RM of the next
6-
release. Unfortunately, we have not yet been able to nominate RMs
7-
early enough in the process for this person to be known at that point
8-
in time.
9-
10-
- [ ] Create a new issue to track the release process where you can copy-paste
11-
the present checklist from `dev/doc/release-process.md`.
12-
- [ ] Change the version name to the next major version and the magic
13-
numbers (see [#7008](https://github.com/coq/coq/pull/7008/files)).
1+
# Release checklist #
2+
3+
## When the release managers for version `X.X` get nominated ##
4+
5+
- [ ] Create a new issue to track the release process where you can
6+
copy-paste the present checklist from `dev/doc/release-process.md`.
7+
- [ ] Decide the release calendar with the team (date of branching,
8+
preview and final release).
9+
- [ ] Create a wiki page that you link to from
10+
https://github.com/coq/coq/wiki/Release-Plan with this information
11+
and the link to the issue.
12+
13+
## About one month before the branching date ##
14+
15+
- [ ] Create both the upcoming final release (`X.X.0`) and the
16+
following major release (`Y.Y+rc1`) milestones if they do not
17+
already exist.
18+
- [ ] Send an announcement of the upcoming branching date on Coqdev +
19+
the Coq development category on Discourse ([email protected] +
20+
[email protected]) and ask people to remove from
21+
the `X.X+rc1` milestone any feature and clean up PRs that they
22+
already know won't be ready on time.
23+
- [ ] In a PR on `master`, call
24+
[`dev/tools/update-compat.py`](../tools/update-compat.py) with the
25+
`--release` flag; this sets up Coq to support three `-compat` flag
26+
arguments including the upcoming one (instead of four). To ensure
27+
that CI passes, you will have to decide what to do about all
28+
test-suite files which mention `-compat U.U` or `Coq.Comapt.CoqUU`
29+
(which is no longer valid, since we only keep compatibility against
30+
the two previous versions), and you may have to ping maintainers of
31+
projects that are still relying on the old compatibility flag so
32+
that they fix this.
33+
- [ ] Make sure that this change is merged in time for the branching
34+
date.
35+
36+
## On the branching date ##
37+
38+
- [ ] In a PR on `master`, change the version name to the next major
39+
version and the magic numbers (see
40+
[#7008](https://github.com/coq/coq/pull/7008/files)).
1441

1542
Additionally, in the same commit, update the compatibility
1643
infrastructure, which consists of invoking
1744
[`dev/tools/update-compat.py`](../tools/update-compat.py) with the
1845
`--master` flag.
1946

20-
Note that the `update-compat.py` script must be run twice: once
21-
*immediately after* branching with the `--master` flag (which sets
22-
up Coq to support four `-compat` flag arguments), *in the same
23-
commit* as the one that updates `coq_version` in
24-
[`configure.ml`](../../configure.ml), and once again later on before
25-
the next branch point with the `--release` flag (see next section).
26-
- [ ] Put the corresponding alpha tag using `git tag -s`.
27-
The `VX.X+alpha` tag marks the first commit to be in `master` and not in the
28-
branch of the previous version. Note that this commit is the first commit
47+
Note that the `update-compat.py` script must be run twice: once in
48+
preparation of the release with the `--release` flag (see previous
49+
section) and once on the branching date with the `--master` flag to
50+
mark the start of the next version.
51+
- [ ] Merge the above PR and create the `vX.X` branch from the last
52+
merge commit before this one (using this name will ensure that the
53+
branch will be automatically protected).
54+
- [ ] Set the next major version alpha tag using `git tag -s`. The
55+
`VY.Y+alpha` tag marks the first commit to be in `master` and not in
56+
the `vX.X` release branch. Note that this commit is the first commit
2957
in the first PR merged in master, not the merge commit for that PR.
30-
After tagging double check that `git describe` picks up
31-
the tag you just made (if not, you tagged the wrong commit).
32-
- [ ] Create the `X.X+beta1` milestone if it did not already exist.
33-
- [ ] Decide the release calendar with the team (freeze date, beta date, final
34-
release date) and put this information in the milestone (using the
35-
description and due date fields).
36-
37-
## Anytime after the previous version is branched off master ##
58+
Therefore, if you proceeded as described above, this should be the
59+
commit updating the version, magic numbers and compatibility
60+
infrastructure. After tagging, double-check that `git describe`
61+
picks up the tag you just made (if not, you tagged the wrong
62+
commit).
63+
- [ ] Push the new tag with `git push upstream VY.Y+alpha --dry-run`
64+
(remove the `--dry-run` and redo if everything looks OK).
65+
- [ ] Start a new project to track PR backporting. The project should
66+
have a `Request X.X+rc1 inclusion` column for the PRs that were
67+
merged in `master` that are to be considered for backporting, and a
68+
`Shipped in X.X+rc1` columns to put what was backported. A message
69+
to `@coqbot` in the milestone description tells it to automatically
70+
add merged PRs to the `Request ... inclusion` column and backported
71+
PRs to the `Shipped in ...` column. See previous milestones for
72+
examples. When moving to the next milestone (e.g. `X.X.0`), you can
73+
clear and remove the `Request X.X+rc1 inclusion` column and create
74+
new `Request X.X.0 inclusion` and `Shipped in X.X.0` columns.
3875

39-
- [ ] Update the compatibility infrastructure to the next release,
40-
which consists of invoking
41-
[`dev/tools/update-compat.py`](../tools/update-compat.py) with the
42-
`--release` flag; this sets up Coq to support three `-compat` flag
43-
arguments. To ensure that CI passes, you will have to decide what
44-
to do about all test-suite files which mention `-compat U.U` or
45-
`Coq.Comapt.CoqUU` (which is no longer valid, since we only keep
46-
compatibility against the two previous versions on releases), and
47-
you may have to prepare overlays for projects using the
48-
compatibility flags.
49-
50-
## About one month before the beta ##
51-
52-
- [ ] Create the `X.X.0` milestone and set its due date.
53-
- [ ] Send an announcement of the upcoming freeze on Coqdev and ask people to
54-
remove from the beta milestone what they already know won't be ready on time
55-
(possibly postponing to the `X.X.0` milestone for minor bug fixes,
56-
infrastructure and documentation updates).
57-
- [ ] Determine which issues should / must be fixed before the beta, add them
58-
to the beta milestone, possibly with a
59-
["priority: blocker"](https://github.com/coq/coq/labels/priority%3A%20blocker)
60-
label. Make sure that all these issues are assigned (and that the assignee
61-
provides an ETA).
62-
- [ ] Ping the development coordinator (**@mattam82**) to get him started on
63-
the update to the Credits chapter of the reference manual.
64-
See also [#7058](https://github.com/coq/coq/issues/7058).
76+
The release manager is the person responsible for merging PRs that
77+
target the release branch and backporting appropriate PRs (mostly
78+
safe bug fixes, user message improvements and documentation updates)
79+
that are merged into `master`.
80+
- [ ] Pin the versions of libraries and plugins in
81+
[`dev/ci/ci-basic-overlay.sh`](../ci/ci-basic-overlay.sh) to use
82+
commit hashes. You can use the
83+
[`dev/tools/pin-ci.sh`](../tools/pin-ci.sh) script to do this
84+
semi-automatically.
85+
- [ ] In a PR on `master` to be backported, add a new link to the
86+
`'versions'` list of the refman (in `html_context` in
87+
[`doc/sphinx/conf.py`](../../doc/sphinx/conf.py)).
88+
89+
## In the days following the branching ##
90+
91+
- [ ] Make sure that all the last feature PRs that you want to include
92+
in the release are finished and backported quickly and clean up the
93+
milestone. We recommend backporting as few feature PRs as possible
94+
after branching. In particular, any PR with overlays will require
95+
manually bumping the pinned commits when backporting.
96+
- [ ] Delay non-blocking issues to the appropriate milestone and
97+
ensure blocking issues are solved. If required to solve some
98+
blocking issues, it is possible to revert some feature PRs in the
99+
release branch only (but in this case, the blocking issue should be
100+
postponed to the next major release instead of being closed).
101+
- [ ] Once the final list of features is known, in a PR on `master` to
102+
be backported, generate the release changelog by calling
103+
[`dev/tools/generate-release-changelog.sh`](../tools/generate-release-changelog.sh)
104+
and include it in a new section in
105+
[`doc/sphinx/changes.rst`](../../doc/sphinx/changes.rst).
106+
107+
At the moment, the script doesn't do it automatically, but we
108+
recommend reordering the entries to show first the **Changed**, then
109+
the **Removed**, **Deprecated**, **Added** and last the **Fixed**.
110+
- [ ] Ping the development coordinator (`@mattam82`) to get him
111+
started on writing the release summary.
65112

66113
The `dev/tools/list-contributors.sh` script computes the number and
67114
list of contributors between Coq revisions. Typically used with
68115
`VX.X+alpha..vX.X` to check the contributors of version `VX.X`.
69116

70-
## On the date of the feature freeze ##
117+
## For each release (preview, final, patch-level) ##
71118

72-
- [ ] Create the new version branch `vX.X` (using this name will ensure that
73-
the branch will be automatically protected).
74-
- [ ] Pin the versions of libraries and plugins in
75-
`dev/ci/ci-basic-overlays.sh` to use commit hashes or tag (or, if it
76-
exists, a branch dedicated to compatibility with the corresponding
77-
Coq branch). You can use the `dev/tools/pin-ci.sh` script to do this
78-
semi-automatically.
79-
- [ ] Notify upstream authors about the pinning, see
80-
`dev/tools/notify-upstream-pins.sh`. As of today there is no automated
81-
way to track these issues.
82-
- [ ] Remove all remaining unmerged feature PRs from the beta milestone.
83-
- [ ] Start a new project to track PR backporting. The project should
84-
have a "Request X.X+beta1 inclusion" column for the PRs that were
85-
merged in `master` that are to be considered for backporting, and a
86-
"Shipped in X.X+beta1" columns to put what was backported. A message
87-
to **@coqbot** in the milestone description tells it to
88-
automatically add merged PRs to the "Request ... inclusion" column
89-
and backported PRs to the "Shipped in ..." column. See previous
90-
milestones for examples. When moving to the next milestone
91-
(e.g. X.X.0), you can clear and remove the "Request X.X+beta1
92-
inclusion" column and create new "Request X.X.0 inclusion" and
93-
"Shipped in X.X.0" columns.
94-
95-
The release manager is the person responsible for merging PRs that
96-
target the version branch and backporting appropriate PRs that are
97-
merged into `master`.
98-
- [ ] Delay non-blocking issues to the appropriate milestone and ensure
99-
blocking issues are solved. If required to solve some blocking issues,
100-
it is possible to revert some feature PRs in the version branch only.
101-
- [ ] Add a new link to the ``'versions'`` list of the refman (in
102-
``html_context`` in ``doc/sphinx/conf.py``).
103-
104-
## Before the beta release date ##
105-
106-
- [ ] Ensure the Credits chapter has been updated.
107-
- [ ] Prepare the release notes (see e.g.,
108-
[#10833](https://github.com/coq/coq/pull/10833)): in a PR against the `master`
109-
branch, move the contents from all files of `doc/changelog/` that appear in
110-
the release branch into the manual `doc/sphinx/changes.rst`. Merge that PR
111-
into the `master` branch and backport it to the version branch.
112-
- [ ] Ensure that an appropriate version of the plugins we will distribute with
113-
Coq has been tagged.
114-
- [ ] Have some people test the recently auto-generated Windows and MacOS
115-
packages.
119+
- [ ] Ensure that there exists a milestone for the following version.
120+
- [ ] Ensure the release changelog has been merged (the release
121+
summary is required for the final release).
116122
- [ ] In a PR against `vX.X` (for testing):
117-
- Change the version name from alpha to beta1 (see
118-
[#7009](https://github.com/coq/coq/pull/7009/files)).
119-
- We generally do not update the magic numbers at this point.
123+
- Update the version number.
124+
- Only update the magic numbers for the final release (see
125+
[#7271](https://github.com/coq/coq/pull/7271/files)).
120126
- Set `is_a_released_version` to `true` in `configure.ml`.
121-
- [ ] Put the `VX.X+beta1` tag using `git tag -s`.
122-
- [ ] Push the new tag with `git push upstream VX.X+beta1 --dry-run`
123-
(remove the `--dry-run` and redo if all looks OK).
124-
- [ ] Set `is_a_released_version` to `false` in `configure.ml`
125-
(if you forget about it, you'll be reminded whenever you try to
126-
backport a PR with a changelog entry).
127-
128-
### These steps are the same for all releases (beta, final, patch-level) ###
129-
130-
- [ ] Send an e-mail on Coqdev announcing that the tag has been put so that
131-
package managers can start preparing package updates (including a
132-
`coq-bignums` compatible version).
133-
- [ ] When opening the corresponding PR for `coq` in the opam repository ([`coq/opam-coq-archive`](https://github.com/coq/opam-coq-archive) or [`ocaml/opam-repository`](https://github.com/ocaml/opam-repository)),
134-
the package managers can Cc `@erikmd` to request that he prepare the necessary configuration for the Docker release in [`coqorg/coq`](https://hub.docker.com/r/coqorg/coq)
135-
(namely, he'll need to make sure a `coq-bignums` opam package is available in [`extra-dev`](https://github.com/coq/opam-coq-archive/tree/master/extra-dev), respectively [`released`](https://github.com/coq/opam-coq-archive/tree/master/released), so the Docker image gathering `coq` and `coq-bignums` can be built).
136-
- [ ] Draft a release on GitHub.
137-
- [ ] Sign the Windows and MacOS packages and upload them on GitHub.
138-
+ The Windows packages must be signed by the Inria IT security service. They
139-
should be sent as a link to the binary (via [filesender](https://filesender.renater.fr) for example)
140-
together with its SHA256 hash in a signed e-mail to `dsi.securite` @ `inria.fr`
141-
putting `@maximedenes` in carbon copy.
142-
+ The MacOS packages should be signed with our own certificate. A detailed step-by-step guide can be found [on the wiki](https://github.com/coq/coq/wiki/SigningReleases).
143-
- [ ] Upload the PDF version of the reference manual to the GitHub release. (*TODO:* automate this.)
144-
- [ ] Prepare a page of news on the website with the link to the GitHub release
145-
(see [coq/www#63](https://github.com/coq/www/pull/63)).
146-
- [ ] Merge the website update, publish the release
147-
and send announcement e-mails, typically on
148-
the `[email protected]` mailing list and the discourse forum
149-
([posting by mail](https://github.com/coq/coq/wiki/Discourse))
127+
- [ ] Set the tag `VX.X...` using `git tag -s`.
128+
- [ ] Push the new tag with `git push upstream VX.X... --dry-run`
129+
(remove the `--dry-run` and redo if everything looks OK).
130+
- [ ] Set `is_a_released_version` to `false` in `configure.ml` (if you
131+
forget about it, you'll be reminded by the test-suite failing
132+
whenever you try to backport a PR with a changelog entry).
150133
- [ ] Close the milestone
151-
152-
## At the final release time ##
153-
154-
- [ ] Prepare the release notes (see above)
155-
- [ ] In a PR against `vX.X` (for testing):
156-
- Change the version name from X.X.0 and the magic numbers (see
157-
[#7271](https://github.com/coq/coq/pull/7271/files)).
158-
- Set `is_a_released_version` to `true` in `configure.ml`.
159-
- [ ] Put the `VX.X.0` tag.
160-
- [ ] Push the new tag with `git push upstream VX.X.0 --dry-run`
161-
(remove the `--dry-run` and redo if all looks OK).
162-
- [ ] Set `is_a_released_version` to `false` in `configure.ml`
163-
(if you forget about it, you'll be reminded whenever you try to
164-
backport a PR with a changelog entry).
165-
166-
Repeat the generic process documented above for all releases.
134+
- [ ] Send an e-mail on Coqdev + the Coq development category on
135+
136+
announcing that the tag has been set so that package managers can
137+
start preparing package updates (including a `coq-bignums`
138+
compatible version).
139+
- [ ] In particular, ensure that someone is working on providing an
140+
opam package (either in the main
141+
[ocaml/opam-repository](https://github.com/ocaml/opam-repository)
142+
for standard releases or in the `core-dev` category of the
143+
[coq/opam-coq-archive](https://github.com/coq/opam-coq-archive)
144+
for preview releases.
145+
- [ ] Make sure to cc `@erikmd` to request that he prepare the
146+
necessary configuration for the Docker release in
147+
[`coqorg/coq`](https://hub.docker.com/r/coqorg/coq) (namely, he'll
148+
need to make sure a `coq-bignums` opam package is available in
149+
[`extra-dev`](https://github.com/coq/opam-coq-archive/tree/master/extra-dev),
150+
respectively
151+
[`released`](https://github.com/coq/opam-coq-archive/tree/master/released),
152+
so the Docker image gathering `coq` and `coq-bignums` can be built).
153+
- [ ] Publish a release on GitHub with the PDF version of the
154+
reference manual attached.
155+
156+
## Once the final release is published ##
167157

168158
Ping `@Zimmi48` to:
169159

@@ -182,7 +172,24 @@ Ping `@Zimmi48` to:
182172

183173
*TODO:* automate this with coqbot.
184174

185-
## At the patch-level release time ##
175+
## This is now delegated to the platform maintainers ##
186176

187-
We generally do not update the magic numbers at this point (see
188-
[`2881a18`](https://github.com/coq/coq/commit/2881a18)).
177+
- [ ] Sign the Windows and MacOS packages and upload them on GitHub.
178+
+ The Windows packages must be signed by the Inria IT security
179+
service. They should be sent as a link to the binary (via
180+
[filesender](https://filesender.renater.fr) for example) together
181+
with its SHA256 hash in a signed e-mail to `dsi.securite` @
182+
`inria.fr` putting `@maximedenes` in carbon copy.
183+
+ The MacOS packages should be signed with our own certificate. A
184+
detailed step-by-step guide can be found [on the
185+
wiki](https://github.com/coq/coq/wiki/SigningReleases).
186+
+ The Snap package has to be built and uploaded to the snap store by
187+
running a [platform CI job
188+
manually](https://github.com/coq/platform/tree/v8.13/linux/snap/github_actions).
189+
Then ask `@gares` to publish the upload or give you the password
190+
for the `coq-team` account on the store so that you can do it
191+
yourself.
192+
- [ ] Prepare a PR on [coq/www](https://github.com/coq/www) adding a
193+
page of news on the website.
194+
- [ ] Announce the release to Coq-Club and Discourse
195+

0 commit comments

Comments
 (0)