Skip to content

Commit 20a5da5

Browse files
Merge #1310: Refine release process
ad84603 release process: clarify change log updates (Jonas Nick) 6348bc7 release process: fix process for maintenance release (Jonas Nick) 79fa50b release process: mention targeted release schedule (Jonas Nick) 1652067 release process: add sanity checks (Jonas Nick) Pull request description: Fixes #1176 ACKs for top commit: real-or-random: ACK ad84603 hebasto: re-ACK ad84603 Tree-SHA512: 215b469f4ecc6ecb2b07ba4d29b6b01fc0dda752d9cfffc3f5ec518f2efb5ec9ae027056b113758fadbebcdfdd549ff5803c3d7257761da6e3859ff6131cc137
2 parents 09df0bf + ad84603 commit 20a5da5

File tree

1 file changed

+33
-6
lines changed

1 file changed

+33
-6
lines changed

doc/release-process.md

+33-6
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,36 @@ It is best if the maintainers are present during the release, so they can help e
1212

1313
This process also assumes that there will be no minor releases for old major releases.
1414

15+
We aim to cut a regular release every 3-4 months, approximately twice as frequent as major Bitcoin Core releases. Every second release should be published one month before the feature freeze of the next major Bitcoin Core release, allowing sufficient time to update the library in Core.
16+
17+
## Sanity Checks
18+
Perform these checks before creating a release:
19+
20+
1. Ensure `make distcheck` doesn't fail.
21+
```shell
22+
./autogen.sh && ./configure --enable-dev-mode && make distcheck
23+
```
24+
2. Check installation with autotools:
25+
```shell
26+
dir=$(mktemp -d)
27+
./autogen.sh && ./configure --prefix=$dir && make clean && make install && ls -l $dir/include $dir/lib
28+
gcc -o ecdsa examples/ecdsa.c $(PKG_CONFIG_PATH=$dir/lib/pkgconfig pkg-config --cflags --libs libsecp256k1) -Wl,-rpath,"$dir/lib" && ./ecdsa
29+
```
30+
3. Check installation with CMake:
31+
```shell
32+
dir=$(mktemp -d)
33+
build=$(mktemp -d)
34+
cmake -B $build -DCMAKE_INSTALL_PREFIX=$dir && cmake --build $build --target install && ls -l $dir/include $dir/lib*
35+
gcc -o ecdsa examples/ecdsa.c -I $dir/include -L $dir/lib*/ -l secp256k1 -Wl,-rpath,"$dir/lib",-rpath,"$dir/lib64" && ./ecdsa
36+
```
37+
1538
## Regular release
1639

1740
1. Open a PR to the master branch with a commit (using message `"release: prepare for $MAJOR.$MINOR.$PATCH"`, for example) that
18-
* finalizes the release notes in [CHANGELOG.md](../CHANGELOG.md) (make sure to include an entry for `### ABI Compatibility`),
41+
* finalizes the release notes in [CHANGELOG.md](../CHANGELOG.md) by
42+
* adding a section for the release (make sure that the version number is a link to a diff between the previous and new version),
43+
* removing the `[Unreleased]` section header, and
44+
* including an entry for `### ABI Compatibility` if it doesn't exist that mentions the library soname of the release,
1945
* sets `_PKG_VERSION_IS_RELEASE` to `true` in `configure.ac`, and
2046
* if this is not a patch release
2147
* updates `_PKG_VERSION_*` and `_LIB_VERSION_*` in `configure.ac` and
@@ -27,8 +53,9 @@ This process also assumes that there will be no minor releases for old major rel
2753
git push [email protected]:bitcoin-core/secp256k1.git v$MAJOR.$MINOR.$PATCH
2854
```
2955
3. Open a PR to the master branch with a commit (using message `"release cleanup: bump version after $MAJOR.$MINOR.$PATCH"`, for example) that
30-
* sets `_PKG_VERSION_IS_RELEASE` to `false` and increments `_PKG_VERSION_PATCH` and `_LIB_VERSION_REVISION` in `configure.ac`, and
31-
* increments the `$PATCH` component of `project(libsecp256k1 VERSION ...)` and `${PROJECT_NAME}_LIB_VERSION_REVISION` in `CMakeLists.txt`.
56+
* sets `_PKG_VERSION_IS_RELEASE` to `false` and increments `_PKG_VERSION_PATCH` and `_LIB_VERSION_REVISION` in `configure.ac`,
57+
* increments the `$PATCH` component of `project(libsecp256k1 VERSION ...)` and `${PROJECT_NAME}_LIB_VERSION_REVISION` in `CMakeLists.txt`, and
58+
* adds an `[Unreleased]` section header to the [CHANGELOG.md](../CHANGELOG.md).
3259

3360
If other maintainers are not present to approve the PR, it can be merged without ACKs.
3461
4. Create a new GitHub release with a link to the corresponding entry in [CHANGELOG.md](../CHANGELOG.md).
@@ -37,14 +64,14 @@ This process also assumes that there will be no minor releases for old major rel
3764

3865
Note that bugfixes only need to be backported to releases for which no compatible release without the bug exists.
3966

40-
1. If `$PATCH = 1`, create maintenance branch `$MAJOR.$MINOR`:
67+
1. If there's no maintenance branch `$MAJOR.$MINOR`, create one:
4168
```
42-
git checkout -b $MAJOR.$MINOR v$MAJOR.$MINOR.0
69+
git checkout -b $MAJOR.$MINOR v$MAJOR.$MINOR.$((PATCH - 1))
4370
git push [email protected]:bitcoin-core/secp256k1.git $MAJOR.$MINOR
4471
```
4572
2. Open a pull request to the `$MAJOR.$MINOR` branch that
4673
* includes the bugfixes,
47-
* finalizes the release notes,
74+
* finalizes the release notes similar to a regular release,
4875
* increments `_PKG_VERSION_PATCH` and `_LIB_VERSION_REVISION` in `configure.ac`
4976
and the `$PATCH` component of `project(libsecp256k1 VERSION ...)` and `${PROJECT_NAME}_LIB_VERSION_REVISION` in `CMakeLists.txt`
5077
(with commit message `"release: bump versions for $MAJOR.$MINOR.$PATCH"`, for example).

0 commit comments

Comments
 (0)