Skip to content

Commit 74a3dcc

Browse files
committed
new release cycle
1 parent f2e5103 commit 74a3dcc

File tree

1 file changed

+158
-0
lines changed

1 file changed

+158
-0
lines changed

text/052-platform-release-cycle.md

+158
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
- Title: Coq and Coq platform release cycle
2+
3+
- Driver: Enrico
4+
5+
----
6+
7+
# Summary
8+
9+
We aim at a release process for Coq and the Coq platform which makes it
10+
easier for users to provide feedback and for developers to deliver fixes.
11+
12+
In a nutshell the Coq "beta period" is replaced by a Coq platform "beta period".
13+
Coq devs tag an almost final version on top of which the Coq platform core is
14+
built. Coq point release are then used to *quickly* deliver fixes
15+
to the platform.
16+
17+
# Motivation
18+
19+
The beta testing period does not provide enough feedback to sensibly improve
20+
Coq between the `VX+beta1` and `VX.0` tags. The reasons are, most important
21+
last:
22+
- users have better things to do, frankly
23+
- one month is short, especially with Christmas, summer holydays or conferences
24+
around (our beta period is December or May)
25+
- in order to test Coq you are likely to need a bunch of Coq packages, and they
26+
are typically only available after the beta period is over
27+
28+
Moreover the "beta period" is also seen by devs as a time frame where they can
29+
still change many things. As a results users are even less happy to spend time
30+
working on a moving target.
31+
32+
Finally, due to the cost of backporting breaking changes from the master
33+
branch to the release branch, this only happenes very early in the release
34+
cycle (for example only 2 such changes were backported in the beta period
35+
for 8.12, 0 for 8.13).
36+
37+
## New actor: platform
38+
39+
The Coq platform is a selection of Coq packages which work well
40+
for a given Coq version. One of its objective is to disentangle the release
41+
of Coq with the release of other packages. It provides scripts that build
42+
that selection of Coq packages on Windows, Mac and Linux from sources
43+
on the user's machine, and as well binary installers (prebuilt) for users
44+
to quickly get a working environment.
45+
46+
This product is what users will test in this new model; Coq is a core
47+
component of it.
48+
49+
# Detailed design
50+
51+
The new process' timeline:
52+
```
53+
D D D D D
54+
coq --+---(1)---+------(2)----+-----(3)----+---+--+----
55+
vX branch/ | | |
56+
X+rc tag/ | |
57+
X.0 tag/ |
58+
X.1 tag/
59+
60+
I I
61+
platform -----------+----(4)------+--------(5)---------+
62+
vX branch/ | |
63+
X+beta tag/ |
64+
X.0 tag/
65+
Artifacts:
66+
- D = docker image for Coq (and opam package)
67+
- I = binary installers for Coq platform (and opam packages and docker image)
68+
```
69+
70+
## Coq
71+
72+
On time based schedule the RM branches vX.
73+
74+
1. The RM shepherds the few PR which are ready and pins projects tracked by CI
75+
(using commit hashes, not necessarily tags). Then he tags Coq. This should
76+
take 10 days. No packages are built, just a git tag. A docker image is built,
77+
so that project maintainers can use it in CI. No breaking change is allowed
78+
from now on (unless a severe problem is found).
79+
2. Doc is updated (eg. Changes file) and eventual fixes required by the platform
80+
are done. Ideally no other change is done. This should take 10 days.
81+
3. In response to a severe bug report Coq devs make an hotfix in master which is
82+
backported to vX by the RM which then tags a point release, possibly as soon
83+
as the fix is available and merged.
84+
85+
## Platform
86+
87+
When Coq X+rc is tagged, the PRM branches vX
88+
89+
4. Starting with the pins made by RM on Coq's CI all packages part of the
90+
platform (or its core) are pinned (in accordance with upstreams, which are
91+
notified about the ongoing process). Most, if not all, packages are in Coq's
92+
CI so there should be no surprises, otherwise issues are reported to Coq
93+
devs. When done a X+beta tag is done and packages made available to users.
94+
A docker image with the entire platform prebuilt should be built. This
95+
should take 20 days.
96+
5. As users pick up the platform and find severe bugs in Coq, the platform picks
97+
up point releases of Coq containing hotfixes and eventually extends packages
98+
beyond the core set.
99+
100+
## Synchronization points
101+
102+
- The end of (1) starts the release cycle of the platform.
103+
- The end of (2) and (4) don't need to be done at the same time, but if they
104+
are then the new release cycle coincides with the old one (up to the
105+
renaming of X.0 into X+beta).
106+
- Coq's X.0 tag can be made as soon as the doc is clear. This will stress the
107+
fact that upstreams can pin with no worries.
108+
109+
## Announces
110+
111+
- Coq tags are only announced to devs
112+
- Coq platform pins are communicated to upstream devs, which may tag/release.
113+
- Coq platform tags and packages are announced to the community
114+
115+
## Coq CI
116+
117+
- must test standard configurations
118+
- must test all platform projects with ML parts
119+
- must test a selection of platform scripts (to test the script themselves,
120+
not the build of platform packages)
121+
- should test platform projects with V files which are depended upon in the
122+
platform
123+
- can test anything else of course, including non standard configurations
124+
125+
## Platform CI
126+
127+
- on branch vX it should test all packages and build installers as artifacts
128+
- on branch master it should take Coq master and its pins for the subset of
129+
packages it covers and test all the packages, eventually report the
130+
failures upstream
131+
132+
### Terminology
133+
- "severe bug" is a bug which *blocks* many users with no decent workaround,
134+
or a soundness bug.
135+
- "hotfix" is a minimal patch that repairs a problem, not necessarily the nice
136+
solution which may require refactoring or cleanups. The patch should pass CI
137+
with no overlay and must be reviewable (in a strict sense, as in looking for
138+
bugs, not just as in "looks reasonable")
139+
- "RM" is the release manager of Coq
140+
- "PRM" are the release managers of the Coq platform
141+
- "standard configuration" is a version of ocaml and other tools which are
142+
agreed between Coq devs and the platform devs (dune, make, gmp, gtk...)
143+
144+
# Drawbacks
145+
146+
This new process identifies 3 groups of developers which need to talk to each
147+
others: Coq dev, platform devs, and docker devs. This is a risk, but also an
148+
advantage since the Coq release becomes more lightweight, leaving the RM
149+
more time to focus on supporting the release with hotfixes.
150+
151+
# Alternatives
152+
153+
We consider docker as *the* platform upstream projects use for testing.
154+
This may be a bit narrow, even if the docker stuff on coq-community is
155+
pretty good IMO.
156+
157+
# Unresolved questions
158+

0 commit comments

Comments
 (0)