From 75d0415becb7f282a4749701530fc7636ac391a9 Mon Sep 17 00:00:00 2001 From: Steve Myers Date: Thu, 29 Sep 2022 11:18:27 -0500 Subject: [PATCH] Add release templates and dev cycle docs, update changelog process --- .github/ISSUE_TEMPLATE/minor_release.md | 101 ++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/patch_release.md | 69 ++++++++++++++++ .github/pull_request_template.md | 6 +- CHANGELOG.md | 5 +- DEVELOPMENT_CYCLE.md | 35 ++++++++ 5 files changed, 214 insertions(+), 2 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/minor_release.md create mode 100644 .github/ISSUE_TEMPLATE/patch_release.md create mode 100644 DEVELOPMENT_CYCLE.md diff --git a/.github/ISSUE_TEMPLATE/minor_release.md b/.github/ISSUE_TEMPLATE/minor_release.md new file mode 100644 index 00000000..0514d561 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/minor_release.md @@ -0,0 +1,101 @@ +--- +name: Minor Release +about: Create a new minor release [for release managers only] +title: 'Release MAJOR.MINOR+1.0' +labels: 'release' +assignees: '' + +--- + +## Create a new minor release + +### Summary + +<--release summary to be used in announcements--> + +### Commit + +<--latest commit ID to include in this release--> + +### Changelog + +<--add notices from PRs merged since the prior release, see ["keep a changelog"]--> + +### Checklist + +Release numbering must follow [Semantic Versioning]. These steps assume the current `master` +branch **development** version is *MAJOR.MINOR.0*. + +#### On the day of the feature freeze + +Change the `master` branch to the next MINOR+1 version: + +- [ ] Switch to the `master` branch. +- [ ] Create a new PR branch called `bump_dev_MAJOR_MINOR+1`, eg. `bump_dev_0_22`. +- [ ] Bump the `bump_dev_MAJOR_MINOR+1` branch to the next development MINOR+1 version. + - Change the `Cargo.toml` version value to `MAJOR.MINOR+1.0`. + - The commit message should be "Bump version to MAJOR.MINOR+1.0". +- [ ] Create PR and merge the `bump_dev_MAJOR_MINOR+1` branch to `master`. + - Title PR "Bump version to MAJOR.MINOR+1.0". + +Create a new release branch: + +- [ ] Double check that your local `master` is up-to-date with the upstream repo. +- [ ] Create a new branch called `release/MAJOR.MINOR+1` from `master`. + +Add a release candidate tag, this is optional and only needed for major `bdk-ffi` changes that +require a longer testing cycle: + +- [ ] Bump the `release/MAJOR.MINOR+1` branch to `MAJOR.MINOR+1.0-rc.1` version. + - Change the `Cargo.toml` version value to `MAJOR.MINOR+1.0-rc.1`. + - The commit message should be "Bump version to MAJOR.MINOR+1.0-rc.1". +- [ ] Add a tag to the `HEAD` commit in the `release/MAJOR.MINOR+1` branch. + - The tag name should be `vMAJOR.MINOR+1.0-rc.1` + - Use message "Release MAJOR.MINOR+1.0 rc.1". + - Make sure the tag is signed, for extra safety use the explicit `--sign` flag. +- [ ] Push the `release/MAJOR.MINOR` branch and new tag to the `bitcoindevkit/bdk` repo. + - Use `git push --tags` option to push the new `vMAJOR.MINOR+1.0-rc.1` tag. + +If any issues need to be fixed before the *MAJOR.MINOR+1.0* version is released: + +- [ ] Merge fix PRs to the `master` branch. +- [ ] Git cherry-pick fix commits to the `release/MAJOR.MINOR+1` branch. +- [ ] Verify fixes in `release/MAJOR.MINOR+1` branch. +- [ ] Bump the `release/MAJOR.MINOR+1` branch to `MAJOR.MINOR+1.0-rc.x+1` version. + - Change the `Cargo.toml` version value to `MAJOR.MINOR+1.0-rc.x+1`. + - The commit message should be "Bump version to MAJOR.MINOR+1.0-rc.x+1". +- [ ] Add a tag to the `HEAD` commit in the `release/MAJOR.MINOR+1` branch. + - The tag name should be `vMAJOR.MINOR+1.0-rc.x+1`, where x is the current release candidate number. + - Use tag message "Release MAJOR.MINOR+1.0 rc.x+1". + - Make sure the tag is signed, for extra safety use the explicit `--sign` flag. +- [ ] Push the new tag to the `bitcoindevkit/bdk` repo. + - Use `git push --tags` option to push the new `vMAJOR.MINOR+1.0-rc.x+1` tag. + +#### On the day of the release + +Tag and publish new release: + +- [ ] Bump the `release/MAJOR.MINOR+1` branch to `MAJOR.MINOR+1.0` version. + - Change the `Cargo.toml` version value to `MAJOR.MINOR+1.0`. + - The commit message should be "Bump version to MAJOR.MINOR+1.0". +- [ ] Add a tag to the `HEAD` commit in the `release/MAJOR.MINOR+1` branch. + - The tag name should be `vMAJOR.MINOR+1.0` + - The first line of the tag message should be "Release MAJOR.MINOR+1.0". + - In the body of the tag message put a copy of the **Summary** and **Changelog** for the release. + - Make sure the tag is signed, for extra safety use the explicit `--sign` flag. +- [ ] Wait for the CI to finish one last time. +- [ ] Push the new tag to the `bitcoindevkit/bdk` repo. +- [ ] Create the release on GitHub. + - Go to "tags", click on the dots on the right and select "Create Release". + - Set the title to `Release MAJOR.MINOR+1.0`. + - In the release notes body put the **Summary** and **Changelog**. + - Use the "+ Auto-generate release notes" button to add details from included PRs. + - Until we reach a `1.0.0` release check the "Pre-release" box. +- [ ] After downstream language repos are also updated announce the release, using the **Summary**, + on Discord, Twitter and Mastodon. +- [ ] Celebrate 🎉 + +[Semantic Versioning]: https://semver.org/ +[crates.io]: https://crates.io/crates/bdk +[docs.rs]: https://docs.rs/bdk/latest/bdk +["keep a changelog"]: https://keepachangelog.com/en/1.0.0/ diff --git a/.github/ISSUE_TEMPLATE/patch_release.md b/.github/ISSUE_TEMPLATE/patch_release.md new file mode 100644 index 00000000..b2926689 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/patch_release.md @@ -0,0 +1,69 @@ +--- +name: Patch Release +about: Create a new patch release [for release managers only] +title: 'Release MAJOR.MINOR.PATCH+1' +labels: 'release' +assignees: '' + +--- + +## Create a new patch release + +### Summary + +<--release summary to be used in announcements--> + +### Commit + +<--latest commit ID to include in this release--> + +### Changelog + +<--add notices from PRs merged since the prior release, see ["keep a changelog"]--> + +### Checklist + +Release numbering must follow [Semantic Versioning]. These steps assume the current `master` +branch **development** version is *MAJOR.MINOR.PATCH*. + +### On the day of the patch release + +Change the `master` branch to the new PATCH+1 version: + +- [ ] Switch to the `master` branch. +- [ ] Create a new PR branch called `bump_dev_MAJOR_MINOR_PATCH+1`, eg. `bump_dev_0_22_1`. +- [ ] Bump the `bump_dev_MAJOR_MINOR` branch to the next development PATCH+1 version. + - Change the `Cargo.toml` version value to `MAJOR.MINOR.PATCH+1`. + - The commit message should be "Bump version to MAJOR.MINOR.PATCH+1". +- [ ] Create PR and merge the `bump_dev_MAJOR_MINOR_PATCH+1` branch to `master`. + - Title PR "Bump version to MAJOR.MINOR.PATCH+1". + +Cherry-pick, tag and publish new PATCH+1 release: + +- [ ] Merge fix PRs to the `master` branch. +- [ ] Git cherry-pick fix commits to the `release/MAJOR.MINOR` branch to be patched. +- [ ] Verify fixes in `release/MAJOR.MINOR` branch. +- [ ] Bump the `release/MAJOR.MINOR.PATCH+1` branch to `MAJOR.MINOR.PATCH+1` version. + - Change the `Cargo.toml` version value to `MAJOR.MINOR.MINOR.PATCH+1`. + - The commit message should be "Bump version to MAJOR.MINOR.PATCH+1". +- [ ] Add a tag to the `HEAD` commit in the `release/MAJOR.MINOR` branch. + - The tag name should be `vMAJOR.MINOR.PATCH+1` + - The first line of the tag message should be "Release MAJOR.MINOR.PATCH+1". + - In the body of the tag message put a copy of the **Summary** and **Changelog** for the release. + - Make sure the tag is signed, for extra safety use the explicit `--sign` flag. +- [ ] Wait for the CI to finish one last time. +- [ ] Push the new tag to the `bitcoindevkit/bdk` repo. +- [ ] Create the release on GitHub. + - Go to "tags", click on the dots on the right and select "Create Release". + - Set the title to `Release MAJOR.MINOR.PATCH+1`. + - In the release notes body put the **Summary** and **Changelog**. + - Use the "+ Auto-generate release notes" button to add details from included PRs. + - Until we reach a `1.0.0` release check the "Pre-release" box. +- [ ] After downstream language repos are also updated announce the release, using the **Summary**, + on Discord, Twitter and Mastodon. +- [ ] Celebrate 🎉 + +[Semantic Versioning]: https://semver.org/ +[crates.io]: https://crates.io/crates/bdk +[docs.rs]: https://docs.rs/bdk/latest/bdk +["keep a changelog"]: https://keepachangelog.com/en/1.0.0/ diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 3dbc5fd3..42afd7e3 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -9,6 +9,11 @@ +### Changelog notice + + + + ### Checklists #### All Submissions: @@ -21,7 +26,6 @@ of the PR were done in a specific way --> * [ ] I've added tests for the new feature * [ ] I've added docs for the new feature -* [ ] I've updated `CHANGELOG.md` #### Bugfixes: diff --git a/CHANGELOG.md b/CHANGELOG.md index 1254da72..721b0c31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog -All notable changes to this project will be documented in this file. +All notable changes to this project prior to release **0.9.0** are documented in this file. Future +changelog information can be found in each release's git tag and can be viewed with `git tag -ln100 "v*"`. +Changelog info is also documented on the [GitHub releases](https://github.com/bitcoindevkit/bdk-ffi/releases) +page. See [DEVELOPMENT_CYCLE.md](DEVELOPMENT_CYCLE.md) for more details. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/DEVELOPMENT_CYCLE.md b/DEVELOPMENT_CYCLE.md new file mode 100644 index 00000000..00c4094b --- /dev/null +++ b/DEVELOPMENT_CYCLE.md @@ -0,0 +1,35 @@ +# Development Cycle + +This project follows a regular releasing schedule similar to the one [used by the Rust language] +except releases always follow the latest [`bdk`] release by one to two weeks. In short, this means +that a new release is made at a regular cadence, with all the feature/bugfixes that made it to +`master` in time. This ensures that we don't keep delaying releases waiting for +"just one more little thing". + +After making a new `bdk-ffi` release tag all downstream language bindings should also be updated. + +This project uses [Semantic Versioning], but is currently at MAJOR version zero (0.y.z) meaning it +is still in initial development. Anything MAY change at any time. The public API SHOULD NOT be +considered stable. Until we reach version `1.0.0` we will do our best to document any breaking API +changes in the changelog info attached to each release tag. + +We decided to maintain a faster release cycle while the library is still in "beta", i.e. before +release `1.0.0`: since we are constantly adding new features and, even more importantly, fixing +issues, we want developers to have access to those updates as fast as possible. For this reason we +will make a release **every 4 weeks**. + +Once the project reaches a more mature state (>= `1.0.0`), we will very likely switch to longer +release cycles of **6 weeks**. + +The "feature freeze" will happen when [`bdk`] releases a release candidate. This project will then +be updated and tested with [`bdk`] release candidates until a final release is published. This +means a new branch will be created originating from the `master` tip at that time, and in that +branch we will stop adding new features and only focus on ensuring the ones we've added are working +properly. + +To create a new release a release manager will create a new issue using a `Release` template and +follow the template instructions. + +[used by the Rust language]: https://doc.rust-lang.org/book/appendix-07-nightly-rust.html +[Semantic Versioning]: https://semver.org/ +[`bdk`]: https://github.com/bitcoindevkit/bdk