Skip to content

Commit, branch and release policies

Karl Palmskog edited this page Dec 6, 2018 · 3 revisions

Branch naming, release and compatibility policy

Plugins

Coq plugins are advised to use branch names that reflect Coq's branch names and which track the corresponding version of Coq. In particular, the master branch would track the development version of Coq, while the various v8.x branches would track the corresponding stable version of Coq.

Indeed, at the current time, it is impossible for the Coq development team to provide a stable API.

Moreover, plugins are encouraged to join Coq's CI to get frequent compatibility updates from the Coq development team.

Tag and release numbering can use the scheme X.Y.Z+coqV.W where X.Y.Z is a release number that corresponds to the features of the plugin (following semantic versioning, Z is increased for bug-fix releases, Y is increased when new features are added, and X is increased when there are breaking changes) while coqV.W indicates with which version of Coq this version of the plugin is compatible.

Libraries

Coq libraries are advised to follow a math-comp-like compatibility policy, i.e. to do all the development on a master branch and to keep this branch compatible with a range of at least two Coq versions, including the latest stable version of Coq.

The use of CI is very useful to ensure that this property is not broken, and thus very recommended. CI is updated whenever the range of supported Coq versions changes.

Tags and releases can use a simple X.Y.Z numbering scheme and simply indicate which versions of Coq are supported in the release notes.

Former contribs

Coq packages that used to be maintained in https://github.com/coq-contribs, even when they are not plugins, usually followed the branch scheme recommended for plugins. Indeed, given that the Coq development team maintained a large number of contribs, uniformity was useful to handle all these packages in a systematic fashion. Furthermore, trying to maintain compatibility with a range of versions would have made the task even more complex.

When such historic v8.X branches exist, we recommend keeping them around, even if no new such branches are created. When tags in V8.X.Y format were used as well, the new tags should use higher version numbers. Jumping directly to V10.0.0 can be a way of separating from the previous numbering scheme.

Pushing to branches, pull requests and branch protection

It is generally advised to use topic branches to conduct development. This will allow CI to run before merging the changes back in the main branch (removal of the topic branch is recommended after the branch's content has been merged). Going through a pull request may also help get reviews from other maintainers / contributors.

It is up to the project maintainer to decide which policy to adopt. GitHub's branch protection feature may be used to enforce this policy (required status checks, required review requests...).

The manifesto repository enforces the policy that all changes must go through pull requests and get at least one approved review (and no "request for changes") before getting merged.

OPAM packages

It is advised that, as a minimum, OPAM packages for project releases are submitted to the released repository in the Coq OPAM archive. This ensures that a release can be easily installed by users of a stable Coq version.

Adding a new OPAM package is done by submitting pull requests to the Coq OPAM archive with an appropriate opam file. When submitting a package for a release, be sure to include the date of the release under the tags field in the opam file. For example, if the release of a project was on July 24, 2018, tags may be defined as:

tags: [
  "keyword:canonical structures"
  "keyword:proof automation"
  "category:Computer Science/Data Types and Data Structures"
  "date:2018-07-24"
  "logpath:LemmaOverloading"
]