Skip to content

Commit

Permalink
Merge branch 'main' into issue4350_2
Browse files Browse the repository at this point in the history
  • Loading branch information
mergify[bot] authored Aug 1, 2022
2 parents e3ba20d + e9c9ea9 commit 43f8f7f
Show file tree
Hide file tree
Showing 244 changed files with 9,454 additions and 3,313 deletions.
9 changes: 9 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# Zebra cargo configuration

# Flags that apply to all Zebra crates and configurations
[target.'cfg(all())']
rustflags = [
# Zebra standard lints for Rust 1.58+
Expand Down Expand Up @@ -47,6 +49,13 @@ rustflags = [
# Code styles we want to accept
"-Aclippy::try_err",

# Links in public docs can point to private items.
"-Arustdoc::private_intra_doc_links",

# Panics
"-Wclippy::fallible_impl_from",
"-Wclippy::unwrap_in_result",

# TODOs:
# `cargo fix` might help do these fixes,
# or add a config.toml to sub-directories which should allow these lints,
Expand Down
111 changes: 66 additions & 45 deletions .github/PULL_REQUEST_TEMPLATE/release-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,19 @@ assignees: ''

### Which Crates to Increment

To check if any of the top-level crates need version increments, go to the zebra GitHub code page: https://github.com/ZcashFoundation/zebra and use the last modified dates of each crate. Alternatively you can use the github compare tool and check the `main` branch against the last tag ([Example](https://github.com/ZcashFoundation/zebra/compare/v1.0.0-alpha.15...main)). `git diff --stat <previous-release-tag> origin/main` is also useful to see what's changed.

To check if any of the top-level crates need version increments:
1. Go to the zebra GitHub code page: https://github.com/ZcashFoundation/zebra
2. Check if the last commit was a Zebra version bump, or something else

<details>

Alternatively you can:
- Use the github compare tool and check the `main` branch against the last tag ([Example](https://github.com/ZcashFoundation/zebra/compare/v1.0.0-alpha.15...main))
- Use `git diff --stat <previous-release-tag> origin/main`

</details>

Once you know which crates have changed:
- [ ] Increment the crates that have new commits since the last version update
- [ ] Increment any crates that depend on crates that have changed
- [ ] Keep a list of the crates that haven't been incremented, to include in the PR
Expand All @@ -21,7 +32,9 @@ To check if any of the top-level crates need version increments, go to the zebra

Zebra follows [semantic versioning](https://semver.org).

Semantic versions look like: `MAJOR`.`MINOR`.`PATCH[`-`TAG`.`PRE-RELEASE]`
Semantic versions look like: MAJOR`.`MINOR`.`PATCH[`-`TAG`.`PRE-RELEASE]

<details>

#### Pre-Release Crates

Expand All @@ -46,6 +59,17 @@ Increment the first version component in this list, and reset the other componen
3. PATCH versions for bug fixes
* includes dependency updates that don't impact the public API

### Reviewing Version Bumps

Check for missed changes by going to:
`https://github.com/ZcashFoundation/zebra/tree/<commit-hash>/`
Where `<commit-hash>` is the hash of the last commit in the version bump PR.

If any Zebra or Tower crates have commit messages that are **not** a version bump, we have missed an update.
Also check for crates that depend on crates that have changed. They should get a version bump as well.

</details>

### Version Locations

Once you know which versions you want to increment, you can find them in the:
Expand All @@ -62,35 +86,29 @@ You can use `fastmod` to interactively find and replace versions.

For example, you can do something like:
```
fastmod --extensions rs,toml,md --fixed-strings '1.0.0-alpha.12' '1.0.0-alpha.13'
fastmod --extensions rs,toml,md --fixed-strings '0.2.9' '0.2.10' tower-batch
fastmod --extensions rs,toml,md --fixed-strings '0.2.8' '0.2.9' tower-fallback
fastmod --extensions rs,toml,md --fixed-strings '1.0.0-beta.11' '1.0.0-beta.12'
fastmod --extensions rs,toml,md --fixed-strings '0.2.26' '0.2.27' tower-batch tower-fallback
```

### Reviewing Version Bumps

Check for missed changes by going to:
`https://github.com/ZcashFoundation/zebra/tree/<commit-hash>/`
Where `<commit-hash>` is the hash of the last commit in the version bump PR.

If any Zebra or Tower crates have commit messages that are **not** a version bump, we have missed an update.

Also check for crates that depend on crates that have changed. They should get a version bump as well.
If you use `fastmod`, don't update versions in `CHANGELOG.md`.

## README

As we resolve various outstanding known issues and implement new functionality with each release, we should double check the README for any necessary updates.
We should update the README to:
- [ ] Remove any "Known Issues" that have been fixed
- [ ] Update the "Build and Run Instructions" with any new dependencies.
Check for changes in the `Dockerfile` since the last tag: `git diff <previous-release-tag> docker/Dockerfile`.

We should check and update if necessary:
## Checkpoints

- [ ] The "Known Issues" section to ensure that any items that are resolved in the latest release are no longer listed in the README.
- [ ] The "Build and Run Instructions" section. Check if any new dependencies were introduced and
list them if needed; one possible approach is to check for changes in the `Dockerfile`
since the last tag: `git diff <previous-release-tag> docker/Dockerfile`.
With every release and for performance reasons, we want to update the zebra checkpoints. More information on how to do this can be found in [the zebra-checkpoints README](https://github.com/ZcashFoundation/zebra/blob/main/zebra-consensus/src/checkpoint/README.md).

To do this you will need a synchronized `zcashd` node. You can request help from other zebra team members to submit this PR if you can't make it yourself at the moment of the release.

## Change Log

**Important**: Any merge into `main` deletes any edits to the draft changelog. Once you are ready to tag a release, copy the draft changelog into `CHANGELOG.md`.
**Important**: Any merge into `main` deletes any edits to the draft changelog.
Once you are ready to tag a release, copy the draft changelog into `CHANGELOG.md`.

We follow the [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) format.

Expand All @@ -102,8 +120,10 @@ To create the final change log:
- [ ] Combine duplicate changes
- [ ] Edit change descriptions so they are consistent, and make sense to non-developers
- [ ] Check the category for each change
- prefer the "Fix" category if you're not sure
- Prefer the "Fix" category if you're not sure

<details>

#### Change Categories

From "Keep a Changelog":
Expand All @@ -114,48 +134,49 @@ From "Keep a Changelog":
* `Fixed` for any bug fixes.
* `Security` in case of vulnerabilities.

</details>

## Create the Release

### Create the Release PR

After you have the version increments and the updated changelog:
After you have the version increments, the updated checkpoints and the updated changelog:

- [ ] Make sure the PR with the new checkpoint hashes is already merged.
- [ ] Push the version increments and the updated changelog into a branch
(name suggestion, example: `v1.0.0-alpha.0-release`)
- [ ] Create a release PR by adding `&template=release-checklist.md` to the
comparing url ([Example](https://github.com/ZcashFoundation/zebra/compare/v1.0.0-alpha.0-release?expand=1&template=release-checklist.md)).
- [ ] Add the list of deleted changelog entries as a comment to make reviewing easier.
- [ ] Also add the list of not-bumped crates as a comment (can use the same comment as the previous one).
- [ ] Add the list of deleted changelog entries as a comment to make reviewing easier.
- [ ] Also add the list of not-bumped crates as a comment (can use the same comment as the previous one).
- [ ] Turn on [Merge Freeze](https://www.mergefreeze.com/installations/3676/branches).
- [ ] Once the PR is ready to be merged, unfreeze it
[here](https://www.mergefreeze.com/installations/3676/branches). Do not
unfreeze the whole repository.
- [ ] Once the PR is ready to be merged, unfreeze it [here](https://www.mergefreeze.com/installations/3676/branches).
Do not unfreeze the whole repository.

### Create the Release

- [ ] Once the PR has been merged, create a new release using the draft release
as a base, by clicking the Edit icon in the [draft
release](https://github.com/ZcashFoundation/zebra/releases).
- [ ] Set the tag name to the version tag, for example: `v1.0.0-alpha.0`
- [ ] Once the PR has been merged,
create a new release using the draft release as a base,
by clicking the Edit icon in the [draft release](https://github.com/ZcashFoundation/zebra/releases)
- [ ] Set the tag name to the version tag,
for example: `v1.0.0-alpha.0`
- [ ] Set the release to target the `main` branch
- [ ] Set the release title to `Zebra ` followed by the version tag, for example:
`Zebra 1.0.0-alpha.0`
- [ ] Set the release title to `Zebra ` followed by the version tag,
for example: `Zebra 1.0.0-alpha.0`
- [ ] Copy the final changelog of this release to the release description
(starting just _after_ the title `## [Zebra ...`)
- [ ] Mark the release as 'pre-release' (until we are no longer alpha/beta)
- [ ] Publish the release

## Final Testing

- [ ] After tagging the release, test that the exact `cargo install` command in
`README.md` works (`--git` behaves a bit differently to `--path`)
- [ ] Turn off [Merge
Freeze](https://www.mergefreeze.com/installations/3676/branches) for the
whole repository.
- [ ] After tagging the release, test that the exact `cargo install` command in `README.md` works
(`--git` behaves a bit differently to `--path`)
- [ ] Turn off [Merge Freeze](https://www.mergefreeze.com/installations/3676/branches) for the whole repository

If the build fails after tagging:
1. fix the build
2. increment versions again, following these instructions from the start
3. update `README.md` with a **new** git tag
4. update `CHANGELOG.md` with details about the fix
5. tag a **new** release
1. Fix the build
2. Increment versions again, following these instructions from the start
3. Update `README.md` with a **new** git tag
4. Update `CHANGELOG.md` with details about the fix
5. Tag a **new** release
69 changes: 69 additions & 0 deletions .github/workflows/build-crates-individually.patch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Build crates individually

# We need to keep the `matrix` job in this workflow as-is, as we need the results
# to actually match the same `build` job names from the original file.
on:
pull_request:
paths-ignore:
# production code and test code
- '**/*.rs'
# dependencies
- '**/Cargo.toml'
- '**/Cargo.lock'
# workflow definitions
- '.github/workflows/build-crates-individually.yml'

jobs:
matrix:
name: Crates matrix
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/[email protected]

- uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true

- uses: actions-rs/[email protected]
# This step is meant to dynamically create a JSON containing the values of each crate
# available in this repo in the root directory. We use `cargo tree` to accomplish this task.
#
# The result from `cargo tree` is then transform to JSON values between double quotes,
# and separated by commas, then added to a `crates.txt` and assigned to a $JSON_CRATES variable.
#
# A JSON object is created and assigned to a $MATRIX variable, which is use to create an output
# named `matrix`, which is then used as the input in following steps,
# using ` ${{ fromJson(needs.matrix.outputs.matrix) }}`
- id: set-matrix
name: Dynamically build crates JSON
run: |
TEMP_DIR=$(mktemp -d)
echo "$(cargo tree --depth 0 --edges no-normal,no-dev,no-build,no-proc-macro --prefix none | cut -d ' ' -f1 | sed '/^$/d' | awk '{ printf "\"%s\",\n", $0 }' | sed '$ s/.$//')" > $TEMP_DIR/crates.txt
MATRIX=$( (
echo '{ "crate" : ['
echo "$(cat $TEMP_DIR/crates.txt)"
echo " ]}"
) | jq -c .)
echo $MATRIX
echo $MATRIX | jq .
echo "::set-output name=matrix::$MATRIX"
check-matrix:
runs-on: ubuntu-latest
needs: [ matrix ]
steps:
- run: 'echo "No job required"'

build:
name: Build ${{ matrix.crate }} crate
needs: [ matrix, check-matrix ]
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}

steps:
- run: 'echo "No job required"'
Loading

0 comments on commit 43f8f7f

Please sign in to comment.