Skip to content

Ci/add release plz - #335

Merged
notmandatory merged 3 commits into
masterfrom
ci/add_release_plz
Sep 25, 2026
Merged

notmandatory merged 3 commits into
masterfrom
ci/add_release_plz

Conversation

@notmandatory

@notmandatory notmandatory commented Sep 23, 2026 •

Copy link
Copy Markdown
Member

Description

Add a GitHub Actions workflow that uses release-plz to automate creating release PRs, publishing to crates.io, tagging, and creating GitHub releases via OIDC trusted publishing and environment-gated approvals. Update DEVELOPMENT_CYCLE.md with the new release process.

Removed changelog section from pr template since the release_plz workflow will use conventional commit messages to update the CHANGELOG. Also removed the API breaking checkbox since it doesn't apply to binary apps like bdk-cli.

Notes to the reviewers

Before this workflow will work I'll need to update the repo and crates.io settings for the release-plz action.

  1. Change GitHub Actions permissions on GitHub repo settings; change "Workflow permissions" to allow GitHub Actions to create and approve pull requests.
  2. Add "Trusted Publishing" on crates.io for the crate with workflow name "release-plz.yml", environment "release". Require trusted publishing for all new versions.
  3. Add "release" environment on GitHub repo settings to specify "required reviewers" who can approve a release. Should be at least two people.

You can see how this workflow works here: https://github.com/bitcoindevkit/rust-cktap/actions/workflows/release-plz.yml

Also bumped GitHub Actions version:

  • actions/checkout@v6 to v7
  • setup-rust-toolchain@v1 to v2
  • codecov/codecov-action@v5 to v7

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

@notmandatory notmandatory self-assigned this Sep 23, 2026
@notmandatory notmandatory added the ci Github Actions CI Workflow Related label Sep 23, 2026
@notmandatory notmandatory moved this to In Progress in BDK-CLI Sep 23, 2026
@notmandatory notmandatory moved this from In Progress to Ready to Review in BDK-CLI Sep 23, 2026
@notmandatory
notmandatory marked this pull request as ready for review September 23, 2026 15:47
Comment thread .github/workflows/release-plz.yml Outdated
Comment thread DEVELOPMENT_CYCLE.md
The "feature freeze" will happen **one week before the release date**. 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 the `Release` template and follow the template instructions.
To create a new release a release manager will trigger the `release-plz` workflow to create a new release PR, review and approve it, and then trigger the `release-plz` workflow again to publish it to `crates.io`.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since the release templates will no longer be used, do we update them to contain the steps in triggering the workflow or we will delete them?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point, I've removed the minor_release.md template since we don't need it. We should still create a summary for posting about releases on social media, but that can be done ad-hoc for now. I've found trying to use one summary everywhere didn't really work anyway.

@tvpeter tvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for working on this release tool.

Aside the nits, I am wondering if the Release Tags will still be signed with this tool (since there is no way of testing it locally). If the tags will no longer be signed, is there a way that users can verify a Release?

I tested some parts locally and it worked well, though the format for the Changelog entries are a bit different. They are based on commit messages. So we will have to ensure commit messages are properly curated.

Image Image

Thank you.

@notmandatory

notmandatory commented Sep 24, 2026 •

Copy link
Copy Markdown
Member Author

Aside the nits, I am wondering if the Release Tags will still be signed with this tool (since there is no way of testing it locally). If the tags will no longer be signed, is there a way that users can verify a Release?

The new tags are signed but by the "bitcoindevkit-release-plz" bot. You can see an example here:

https://github.com/bitcoindevkit/rust-cktap/releases/tag/rust-cktap-v0.3.0

This at least means that only someone authorized to publish releases via the bot, enforced by GitHub settings, created the release tag.

I tested some parts locally and it worked well, though the format for the Changelog entries are a bit different. They are based on commit messages. So we will have to ensure commit messages are properly curated.

During PR reviews we'll need to make sure commits follow the conventional commits style. But if there are problems with the release-plz auto generated CHANGELOG, the PR can still be manually edited to fix mistakes before it's merged (release-plz won't overwrite manual changes).

@notmandatory

Copy link
Copy Markdown
Member Author

The new tags are signed but by the "bitcoindevkit-release-plz" bot. You can see an example here:

https://github.com/bitcoindevkit/rust-cktap/releases/tag/rust-cktap-v0.3.0

Sorry I take it back, the tags show as verified by GitHub, but they don't have a proper signature in the git history:

$ git tag -v rust-cktap-v0.3.0
object 090abe33212aa1f9582d7ef22faa2e2634f0316f
type commit
tag rust-cktap-v0.3.0
tagger bitcoindevkit-release-plz[bot] <327630426+bitcoindevkit-release-plz[bot]@users.noreply.github.com> 1789143429 +0000

chore: Release package rust-cktap version 0.3.0error: no signature found

@tvpeter

tvpeter commented Sep 24, 2026

Copy link
Copy Markdown
Collaborator

The new tags are signed but by the "bitcoindevkit-release-plz" bot. You can see an example here:
https://github.com/bitcoindevkit/rust-cktap/releases/tag/rust-cktap-v0.3.0

Sorry I take it back, the tags show as verified by GitHub, but they don't have a proper signature in the git history:

$ git tag -v rust-cktap-v0.3.0
object 090abe33212aa1f9582d7ef22faa2e2634f0316f
type commit
tag rust-cktap-v0.3.0
tagger bitcoindevkit-release-plz[bot] <327630426+bitcoindevkit-release-plz[bot]@users.noreply.github.com> 1789143429 +0000

chore: Release package rust-cktap version 0.3.0error: no signature found

I think it is non-blocking and the tagger label should suffice for now.

@tvpeter tvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK 769a7a2

Add a GitHub Actions workflow that uses release-plz to automate
creating release PRs, publishing to crates.io, tagging, and creating
GitHub releases via OIDC trusted publishing and environment-gated
approvals. Update DEVELOPMENT_CYCLE.md with the new release process.
actions/checkout@v6 to v7
setup-rust-toolchain@v1 to v2
codecov/codecov-action@v5 to v7
The release_plz workflow will use conventional
commit messages to update the CHANGELOG.

Also removed the API breaking checkbox in the
pull_request_template.md since it doesn't apply
to binary apps like bdk-cli and removed the now
unneeded minor_release.md template.
@notmandatory

Copy link
Copy Markdown
Member Author

I force-pushed a rebase on the latest master for a cleaner merge.

@notmandatory
notmandatory merged commit 1d4c002 into master Sep 25, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Github Actions CI Workflow Related

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants