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