]> git.proxmox.com Git - libgit2.git/blob - docs/release.md
22b35ede7dbe6772f6ccf60ec2fb6e93a8b1036d
[libgit2.git] / docs / release.md
1 # Releasing the library
2
3 We have three kinds of releases: "full" releases, maintenance releases and security releases. Full ones release the state of the `master` branch whereas maintenance releases provide bugfixes building on top of the currently released series. Security releases are also for the current series but only contain security fixes on top of the previous release.
4
5 ## Full release
6
7 We aim to release once every six months. We start the process by opening an issue. This is accompanied with a feature freeze. From now until the release, only bug fixes are to be merged. Use the following as a base for the issue
8
9 Release v0.X
10
11 Let's release v0.X, codenamed: <something witty>
12
13 - [ ] Bump the versions in the headers (`include/git2/version.h`)
14 - [ ] Bump the versions in the clib manifest (`package.json`)
15 - [ ] Make a release candidate
16 - [ ] Plug any final leaks
17 - [ ] Fix any last-minute issues
18 - [ ] Make sure changelog.md reflects everything worth discussing
19 - [ ] Update the version in changelog.md and the header
20 - [ ] Produce a release candidate
21 - [ ] Tag
22 - [ ] Create maint/v0.X
23 - [ ] Update any bindings the core team works with
24
25 We tag at least one release candidate. This RC must carry the new version in the headers, including the SOVERSION. If there are no significant issues found, we can go straight to the release after a single RC. This is up to the discretion of the release manager. There is no set time to have the candidate out, but we should we should give downstream projects at least a week to give feedback.
26
27 Preparing the first release candidate includes updating the version number of libgit2 to the new version number. To do so, a pull request shall be submitted that adjusts the version number in the following places:
28
29 - docs/changelog.md
30 - include/git2/version.h
31 - package.json
32
33 As soon as the pull request is merged, the merge commit shall be tagged with a lightweight tag.
34
35 The tagging happens via GitHub's "releases" tab which lets us attach release notes to a particular tag. In the description we include the changes in `docs/changelog.md` between the last full release. Use the following as a base for the release notes
36
37 This is the first release of the v0.X series, <codename>. The changelog follows.
38
39 followed by the three sections in the changelog. For release candidates we can avoid copying the full changelog and only include any new entries.
40
41 During the freeze, and certainly after the first release candidate, any bindings the core team work with should be updated in order to discover any issues that might come up with the multitude of approaches to memory management, embedding or linking.
42
43 Create a branch `maint/v0.X` at the current state of `master` after you've created the tag. This will be used for maintenance releases and lets our dependents track the latest state of the series.
44
45 ## Maintenance release
46
47 Every once in a while, when we feel we've accumulated a significant amount of backportable fixes in the mainline branch, we produce a maintenance release in order to provide fixes or improvements for those who track the releases. This also lets our users and integrators receive updates without having to upgrade to the next full release.
48
49 As a rule of thumb, it's a good idea to produce a maintenance release for the current series when we're getting ready for a full release. This gives the (still) current series a last round of fixes without having to upgrade (which with us potentially means adjusting to API changes).
50
51 Start by opening an issue. Use the following as a base.
52
53 Release v0.X.Y
54
55 Enough fixes have accumulated, let's release v0.X.Y
56
57 - [ ] Select the changes we want to backport
58 - [ ] Update maint/v0.X
59 - [ ] Tag
60
61 The list of changes to backport does not need to be comprehensive and we might not backport something if the code in mainline has diverged significantly. These fixes do not include those which require API or ABI changes as we release under the same SOVERSION.
62
63 Do not merge into the `maint/v0.X` until we are getting ready to produce a new release. There is always the possibility that we will need to produce a security release and those must only include the relevant security fixes and not arbitrary fixes we were planning on releasing at some point.
64
65 Here we do not use release candidates as the changes are supposed to be small and proven.
66
67 ## Security releases
68
69 This is the same as a maintenance release, except that the fix itself will most likely be developed in a private repository and will only be visible to a select group of people until the release.
70
71 We have committed to providing security fixes for the latest two released versions. E.g. if the latest version is v0.28.x, then we will provide security fixes for both v0.28.x and v0.27.y.
72
73 ## Updating documentation
74
75 We use docurium to generate our documentation. It is a tool written in ruby which leverages libclang's documentation parser. Install docurium
76
77 gem install docurium
78
79 and run it against our description file with the tip of master checked out.
80
81 cm doc api.docurium
82
83 It will start up a few proceses and write out the results as a new commit onto the `gh-pages` branch. That can be pushed to GitHub to update what will show up on our documentation reference site.