Skip to content

Commit f862ef1

Browse files
authored
update release checklist; misc cleanups (#843)
* update release checklist; misc cleanups * remove links to versions * add semver-checks; change numbered items to nonnumbered
1 parent 543e6f4 commit f862ef1

File tree

3 files changed

+63
-58
lines changed

3 files changed

+63
-58
lines changed

book/src/dev/release-checklist.md

+58-53
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,115 @@
11
# Release Checklist
22

3+
## One-time `gh` setup
4+
5+
Install the [GitHub command line
6+
tool](https://github.com/cli/cli?tab=readme-ov-file#installation) to make
7+
releases easier.
38

49
## One-time crates.io setup
510

6-
1. Follow the steps in <https://doc.rust-lang.org/cargo/reference/publishing.html#before-your-first-publish> (you can create a token scoped to `publish-update`).
7-
2. To get permissions to publish you’ll need to be in the [owners](https://github.com/orgs/ZcashFoundation/teams/owners) group. If you aren’t in there, ask someone in that group to add you
11+
- Follow the steps in <https://doc.rust-lang.org/cargo/reference/publishing.html#before-your-first-publish> (you can create a token scoped to `publish-update`).
12+
- To get permissions to publish you’ll need to be in the [owners](https://github.com/orgs/ZcashFoundation/teams/owners) group. If you aren’t in there, ask someone in that group to add you
813

914

1015
## Communication
1116

12-
3. Post in #frost slack channel and tag the Frost team that you’re going to be doing a release to freeze PR approvals until it’s done. E.g “@frost-core I’m doing a release of \<version> of Frost. Please do not merge any more PRs until I’m finished. Thanks.”
17+
- Post in #frost slack channel and tag the Frost team that you’re going to be doing a release to freeze PR approvals until it’s done. E.g “@frost-core I’m doing a release of \<version> of Frost. Please do not merge any more PRs until I’m finished. Thanks.”
1318

1419

1520
## Checks
1621

17-
4. Check current version for each crate. This is in the Cargo.toml file for frost-core, frost-ed448 etc.
18-
19-
1. [Frost core version number](https://github.com/ZcashFoundation/frost/blob/main/frost-core/Cargo.toml#L7)
20-
2. [Frost ed25519 version number](https://github.com/ZcashFoundation/frost/blob/main/frost-ed25519/Cargo.toml#L8)
21-
3. [Frost ed448 version number](https://github.com/ZcashFoundation/frost/blob/main/frost-ed448/Cargo.toml#L7)
22-
4. [Frost p256 version number](https://github.com/ZcashFoundation/frost/blob/main/frost-p256/Cargo.toml#L8)
23-
5. [Frost re randomized version number](https://github.com/ZcashFoundation/frost/blob/main/frost-rerandomized/Cargo.toml#L8)
24-
6. [Frost ristretto255 version number](https://github.com/ZcashFoundation/frost/blob/main/frost-ristretto255/Cargo.toml#L8)
25-
7. [Frost secp256k1 version number](https://github.com/ZcashFoundation/frost/blob/main/frost-secp256k1/Cargo.toml#L7)
26-
8. [Frost secp256k1 tr version number](https://github.com/ZcashFoundation/frost/blob/main/frost-secp256k1-tr/Cargo.toml#L7)
22+
- Currently all crates share the same version number, in the root Cargo.toml
23+
file. Take note of that version. (If we ever decide to have specific
24+
versions, update those separately as required.)
2725

28-
5. Decide which version to tag the release with (e.g. v0.3.0). Currently we always use the same release number for all crates, but it's possible for them to get out of sync in the future.
26+
- Decide which version to tag the release with (e.g. v0.3.0), considering
27+
[SemVer](https://doc.rust-lang.org/cargo/reference/semver.html).
2928

30-
6. Create new issue. E.g. [Release v0.4.0](https://github.com/ZcashFoundation/frost/issues/377)
29+
- Create new issue. E.g. [Release v0.4.0](https://github.com/ZcashFoundation/frost/issues/377)
3130

3231

3332
## Make changes
3433

35-
7. Bump the version of the crates in the root Cargo.toml file. (If they ever
34+
- Bump the version of the crates in the root Cargo.toml file. (If they ever
3635
get out of sync, you will need to bump in each crate Cargo.toml file.)
3736

38-
8. Bump the version used in the tutorial (importing.md)
37+
- Run `cargo semver-checks` to check if there are no API changes that break
38+
SemVer compatibility. ([Installation
39+
instructions](https://crates.io/crates/cargo-semver-checks)) Fix issues if
40+
any (i.e. change the version, or revert/adapt the API change).
41+
42+
- Bump the version used in the tutorial (importing.md)
3943

40-
9. Check if the [changelog](https://github.com/ZcashFoundation/frost/blob/main/frost-core/CHANGELOG.md) is up to date and update if required (we’re only keeping the one in frost-core for now). Double check using [FROST releases](https://github.com/ZcashFoundation/frost/releases) which will have a list of all the PRs that have been closed since the last release. Things to include in the changelog will be anything that impacts production code and big documentation changes. I.e. script and test changes should not be included. NOTE: Please add to the changelog whenever you make changes to the library as this will make things simpler for the person in charge of the release.
44+
- Check if the [changelog](https://github.com/ZcashFoundation/frost/blob/main/frost-core/CHANGELOG.md) is up to date and update if required (we’re only keeping the one in frost-core for now). Double check using [FROST releases](https://github.com/ZcashFoundation/frost/releases) which will have a list of all the PRs that have been closed since the last release. Things to include in the changelog will be anything that impacts production code and big documentation changes. I.e. script and test changes should not be included. NOTE: Please add to the changelog whenever you make changes to the library as this will make things simpler for the person in charge of the release.
4145

42-
1. Move version in changelog to Released
43-
2. Create a new version in “unreleased” in changelog
46+
- Move version in changelog to Released
47+
- Create a new version in “unreleased” in changelog
4448

45-
10. Update the version number for frost-core and frost-rerandomized in the Ciphersuite crates, e.g. in `frost-core = { path = "../frost-core", version = "0.4.0", features = ["test-impl"] }`. You'll need to do this for dependencies and dev-dependencies
49+
- Update the version number for frost-core and frost-rerandomized in the Ciphersuite crates, e.g. in `frost-core = { path = "../frost-core", version = "0.4.0", features = ["test-impl"] }`. You'll need to do this for dependencies and dev-dependencies
4650

47-
11. Create a PR with subject `Release \<version number>` containing all these changes
51+
- Create a PR with subject `Release \<version number>` containing all these changes
4852

49-
12. You’ll need someone to review and approve it
53+
- You’ll need someone to review and approve it
5054

51-
13. Wait for it to pass CI checks
55+
- Wait for it to pass CI checks
5256

5357

5458
## Publish
5559

56-
14. Checkout main branch, **in the commit of the previously merged PR** (in case other stuff got merged after that)
60+
- Checkout main branch, **in the commit of the previously merged PR** (in case other stuff got merged after that)
5761

58-
15. Run `cargo publish -p frost-core --dry-run` to check if it’s ready to publish. Fix issues if any.
62+
- Run `cargo publish -p frost-core --dry-run` to check if it’s ready to publish. Fix issues if any.
5963

60-
16. [Draft and publish a new release](https://github.com/ZcashFoundation/frost/releases/new) for frost-core.
64+
- [Draft and publish a new release](https://github.com/ZcashFoundation/frost/releases/new) for frost-core.
6165

62-
1. In “Choose a tag” type `<crate>/<version>` e.g. “frost-core/v0.2.0” and click “Create new tag”
63-
2. In “Target” select “main” as long as other PRs haven’t been merged after the version bump PR. Otherwise, **select the commit matching the PR that was merged above**.
64-
3. In “Release title” use `<crate> <version>` e.g. “frost-core v0.2.0”
65-
4. Paste the (raw Markdown) changelog for this version into the description box.
66-
5. Leave “Set as pre-release” **unchecked** (we should have checked it in earlier versions but the ship has sailed. It doesn’t matter much)
67-
6. **Check** “Set as the latest release”
66+
- In “Choose a tag” type `<crate>/<version>` e.g. “frost-core/v0.2.0” and click “Create new tag”
67+
- In “Target” select “main” as long as other PRs haven’t been merged after the version bump PR. Otherwise, **select the commit matching the PR that was merged above**.
68+
- In “Release title” use `<crate> <version>` e.g. “frost-core v0.2.0”
69+
- Paste the (raw Markdown) changelog for this version into the description box.
70+
- Leave “Set as pre-release” **unchecked** (we should have checked it in earlier versions but the ship has sailed. It doesn’t matter much)
71+
- **Check** “Set as the latest release”
6872

69-
17. Publish it with `cargo publish -p frost-core`
73+
- Publish it with `cargo publish -p frost-core`
7074

71-
18. Check if frost-rerandomized is ready to be published: `cargo publish -p frost-rerandomized --dry-run`. Fix any errors if needed.
75+
- Check if frost-rerandomized is ready to be published: `cargo publish -p frost-rerandomized --dry-run`. Fix any errors if needed.
7276

73-
19. Draft and publish a frost-rerandomized release
77+
- Draft and publish a frost-rerandomized release:
7478

75-
1. Use the same process as described for frost-core above, but you can leave the changelog empty and **uncheck** “Set as the latest release”
79+
- Run `gh release create "frost-rerandomized/v2.1.0" -n '' -t "frost-rerandomized v2.1.0" --latest=false`
80+
(replace both instances of the version)
7681

77-
20. Publish it with `cargo publish -p frost-rerandomized`
82+
- Publish it with `cargo publish -p frost-rerandomized`
7883

79-
21. Check if other crates are ready to be published: `for cs in ristretto255 ed25519 secp256k1 secp256k1-tr p256 ed448; do cargo publish -p frost-$cs --dry-run; done`. Fix any issues if needed.
84+
- Check if other crates are ready to be published: `for cs in ristretto255 ed25519 secp256k1 secp256k1-tr p256 ed448; do cargo publish -p frost-$cs --dry-run; done`. Fix any issues if needed.
8085

81-
1. If you get an error like this:
86+
- If you get an error like this:
8287

8388
“error: failed to verify package tarball Caused by: failed to select a version for the requirement `frost-core = "^0.3.0"` candidate versions found which didn't match: 0.2.0, 0.1.0 location searched: crates.io index required by package `frost-ed25519 v0.3.0 (frost/target/package/frost-ed25519-0.3.0)`
8489

8590
This is because the ciphersuite crates aren’t pointing at the new frost-core package. This is because you need to publish frost-core before you can publish the others otherwise they will not have the expected version to point to.
8691

87-
22. Draft and publish releases for each of those crates (sorry, that will be boring)
92+
- Draft and publish releases for each of those crates:
8893

89-
1. Use the same process as described for frost-core above (actions 1 - 3), but you can leave the changelog empty and **uncheck** “Set as the latest release”
94+
- Run `for cs in ristretto255 ed25519 secp256k1 secp256k1-tr p256 ed448; do gh release create "frost-$cs/v2.1.0" -n '' -t "frost-$cs v2.1.0" --latest=false; done` (replace both instances of the version)
9095

91-
23. Publish those crates: `for cs in ristretto255 ed25519 secp256k1 secp256k1-tr p256 ed448; do cargo publish -p frost-$cs; done`
96+
- Publish those crates: `for cs in ristretto255 ed25519 secp256k1 secp256k1-tr p256 ed448; do cargo publish -p frost-$cs; done`
9297

9398

9499
## Confirm
95100

96-
24. Check versions in the crates to confirm everything worked:
101+
- Check versions in the crates to confirm everything worked:
97102

98-
1. [Frost core](https://crates.io/crates/frost-core/versions)
99-
2. [Frost ed25519](https://crates.io/crates/frost-ed25519/versions)
100-
3. [Frost ed448](https://crates.io/crates/frost-ed448/versions)
101-
4. [Frost p256](https://crates.io/crates/frost-p256/versions)
102-
5. [Frost ristretto255](https://crates.io/crates/frost-ristretto255/versions)
103-
6. [Frost secp256k1](https://crates.io/crates/frost-secp256k1/versions)
104-
7. [Frost secp256k1 tr](https://crates.io/crates/frost-secp256k1-tr/versions)
105-
8. [Frost rerandomized](https://crates.io/crates/frost-rerandomized/versions)
103+
- [Frost core](https://crates.io/crates/frost-core/versions)
104+
- [Frost ed25519](https://crates.io/crates/frost-ed25519/versions)
105+
- [Frost ed448](https://crates.io/crates/frost-ed448/versions)
106+
- [Frost p256](https://crates.io/crates/frost-p256/versions)
107+
- [Frost ristretto255](https://crates.io/crates/frost-ristretto255/versions)
108+
- [Frost secp256k1](https://crates.io/crates/frost-secp256k1/versions)
109+
- [Frost secp256k1 tr](https://crates.io/crates/frost-secp256k1-tr/versions)
110+
- [Frost rerandomized](https://crates.io/crates/frost-rerandomized/versions)
106111

107-
25. Let the team know in the #frost slack channel that the release is complete and successful
112+
- Let the team know in the #frost slack channel that the release is complete and successful
108113

109114

110115
## In the case of an unsuccessful release

frost-core/CHANGELOG.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ Entries are listed in reverse chronological order.
88

99
* It is now possible to identify the culprit in `frost_core::keys::dkg::part3()`
1010
if an invalid secret share was sent by one of the participants (by calling
11-
frost_core::Error<C>::culprit()`) (#728)
11+
`frost_core::Error<C>::culprit()`) (#728)
1212
* Added frost-secp256k1-tr crate, allowing to generate Bitcoin Taproot
13-
(BIP340/BIP341) compatible signatures(#730).
13+
(BIP340/BIP341) compatible signatures (#730).
1414
* Support refreshing shares using the DKG approach using the
1515
`frost_core::keys::refresh::refresh_dkg_{part1,part2,shares}()` functions
1616
(#766).

frost-core/src/keys/refresh.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
//! Refresh Shares
22
//!
3-
//! Implements the functionality to refresh a share. This requires the participation
4-
//! of all the remaining signers. This can be done using a Trusted Dealer or
5-
//! DKG (not yet implemented)
3+
//! Implements the functionality to refresh a share. This requires the
4+
//! participation of all the remaining signers. This can be done using a Trusted
5+
//! Dealer or DKG.
66
77
use alloc::collections::BTreeMap;
88
use alloc::vec::Vec;

0 commit comments

Comments
 (0)