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 ) ).
14
41
15
42
Additionally, in the same commit, update the compatibility
16
43
infrastructure, which consists of invoking
17
44
[ ` dev/tools/update-compat.py ` ] ( ../tools/update-compat.py ) with the
18
45
` --master ` flag.
19
46
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
29
57
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.
38
75
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.
65
112
66
113
The ` dev/tools/list-contributors.sh ` script computes the number and
67
114
list of contributors between Coq revisions. Typically used with
68
115
` VX.X+alpha..vX.X ` to check the contributors of version ` VX.X ` .
69
116
70
- ## On the date of the feature freeze ##
117
+ ## For each release (preview, final, patch-level) ##
71
118
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).
116
122
- [ ] 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 ) ) .
120
126
- 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).
150
133
- [ ] 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 ##
167
157
168
158
Ping ` @Zimmi48 ` to:
169
159
@@ -182,7 +172,24 @@ Ping `@Zimmi48` to:
182
172
183
173
* TODO:* automate this with coqbot.
184
174
185
- ## At the patch-level release time ##
175
+ ## This is now delegated to the platform maintainers ##
186
176
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