|
| 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