diff --git a/.github/scripts/cargo-toml-match-readme-version.sh b/.github/scripts/cargo-toml-match-readme-version.sh new file mode 100755 index 00000000..773c7edc --- /dev/null +++ b/.github/scripts/cargo-toml-match-readme-version.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +function get_major_version() { + echo "$1" | cut -d '.' -f 1 +} + +function get_minor_version() { + echo "$1" | cut -d '.' -f 2 +} + +function trim_version() { + grep -e "$1" "$2" | cut -d "=" -f 2 | tr -d "\"^ " +} + +function check_versions() { + if [ "$1" != "$2" ]; then + echo "aleph-bft Cargo's toml $3 version $1 different than README.md's $3 version $2!" + exit 1 + fi +} + +cargo_toml_version=$(trim_version '^version =' "Cargo.toml") +cargo_toml_major_version=$(get_major_version "${cargo_toml_version}") +cargo_toml_minor_version=$(get_minor_version "${cargo_toml_version}") + +readme_version=$(trim_version '\s*aleph-bft =' "README.md") +readme_major_version=$(get_major_version "${readme_version}") +readme_minor_version=$(get_minor_version "${readme_version}") + +check_versions "${cargo_toml_major_version}" "${readme_major_version}" "major" +check_versions "${cargo_toml_minor_version}" "${readme_minor_version}" "minor" +echo "Versions from README and Cargo.toml match." diff --git a/.github/workflows/check-version-bumped.yml b/.github/workflows/check-version-bumped.yml new file mode 100644 index 00000000..904461c3 --- /dev/null +++ b/.github/workflows/check-version-bumped.yml @@ -0,0 +1,24 @@ +name: Version bump check for code changes + +on: + pull_request: + branches: + - main + paths: + - 'src/**' + +jobs: + check-versions: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: check-cargo-toml-version-bumped + run: | + if ! git diff HEAD origin/main -- Cargo.toml | grep -q '^+version ='; then + echo "None of commits in this PR has changed version in Cargo.toml!" + exit 1 + fi + shell: bash diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml new file mode 100644 index 00000000..ff030fb7 --- /dev/null +++ b/.github/workflows/publish-package.yml @@ -0,0 +1,34 @@ +name: Publish to crates.io + +on: + push: + branches: + - main + paths: + - 'Cargo.toml' + +jobs: + publish: + # need to rename environment name after this is merged + environment: Autobump version + runs-on: ubuntu-latest + if: ${{ github.repository == 'Cardinal-Cryptography/AlephBFT'}} + steps: + - name: checkout + uses: actions/checkout@v2 + with: + fetch-depth: 2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - name: credentials + uses: actions-rs/cargo@v1 + with: + command: login + args: ${{ secrets.CRATES_IO_TOKEN }} + - name: publish + run: | + if git diff HEAD~ -- Cargo.toml | grep -q '^+version ='; then + echo "Version in Cargo.toml was bumped in this PR, publishing to crates.io." + cargo publish + fi diff --git a/.github/workflows/push-foundation-repo.yml b/.github/workflows/push-foundation-repo.yml index 698e8fd0..312b7d90 100644 --- a/.github/workflows/push-foundation-repo.yml +++ b/.github/workflows/push-foundation-repo.yml @@ -1,11 +1,9 @@ name: Sync Cardinal-Cryptography repo with Aleph-Zero-Foundation repo on: - workflow_run: - workflows: ["Autobump version"] - branches: [main] - types: - - completed + push: + branches: + main jobs: sync: diff --git a/.github/workflows/readme-cargo-toml-versions-aligned.yml b/.github/workflows/readme-cargo-toml-versions-aligned.yml new file mode 100644 index 00000000..dcdb4eb1 --- /dev/null +++ b/.github/workflows/readme-cargo-toml-versions-aligned.yml @@ -0,0 +1,19 @@ +name: Versions are aligned + +on: + pull_request: + branches: + - main + paths: + - 'Cargo.toml' + - 'README.md' + +jobs: + check-versions: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v2 + - name: cargo-toml-match-readme-version + run: ./.github/scripts/cargo-toml-match-readme-version.sh + shell: bash diff --git a/.github/workflows/version-bump.yml b/.github/workflows/version-bump.yml deleted file mode 100644 index e7fe56c3..00000000 --- a/.github/workflows/version-bump.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: Autobump version - -on: - push: - branches: - - main - -jobs: - autobump: - environment: Autobump version - runs-on: ubuntu-latest - if: ${{ github.repository == 'Cardinal-Cryptography/AlephBFT'}} - steps: - - name: checkout - uses: actions/checkout@v2 - with: - fetch-depth: 2 - - name: bump - run: | - version=`grep -e '^version =' Cargo.toml | sed 's/version = //' | sed 's/"//g'` - major_version=`echo $version|grep -o -e '^[0-9]*'` - minor_version=`echo $version|grep -o -e '^[0-9]*.[0-9]*'|grep -o -e '[0-9]*$'` - patch_version=`echo $version|grep -o -e '[0-9]*$'` - git config user.email "<>" - git config user.name "Version autobump" - if git diff HEAD~ -- Cargo.toml | grep -q '^+version ='; then - echo 'Version has been bumped manually, bumping readme version and uploading to crates.io' - new_version=$major_version.$minor_version - sed -i "s/aleph-bft = \"\^[0-9]*.[0-9]*\"$/aleph-bft = \"^$new_version\"/" README.md - git add README.md - git commit --amend --no-edit - git push -f origin main - touch publishMe - exit 0 - fi - if [ -e `git diff HEAD~ -- src/` ]; then - echo 'No changes in code.' - exit 0 - fi - new_version=$major_version.$minor_version.$((patch_version + 1)) - sed -i "s/^version = \"$version\"$/version = \"$new_version\"/" Cargo.toml - git add Cargo.toml - git commit --amend --no-edit - git push -f origin main - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - name: credentials - uses: actions-rs/cargo@v1 - with: - command: login - args: ${{ secrets.CRATES_IO_TOKEN }} - - name: publish - run: | - if [ -f publishMe ]; then - cargo publish - fi diff --git a/Cargo.lock b/Cargo.lock index 773a361b..c2aa0602 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -65,7 +65,7 @@ dependencies = [ [[package]] name = "aleph-bft" -version = "0.8.0" +version = "0.8.3" dependencies = [ "async-trait", "bit-vec", diff --git a/Cargo.toml b/Cargo.toml index c2da0e47..f088906c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aleph-bft" -version = "0.8.2" +version = "0.8.3" edition = "2018" authors = ["Cardinal Cryptography"] categories = ["algorithms", "data-structures", "cryptography", "database"] diff --git a/src/signed.rs b/src/signed.rs index 02621a64..4b39bed8 100644 --- a/src/signed.rs +++ b/src/signed.rs @@ -42,6 +42,7 @@ pub trait KeyBox: Index + Clone + Send + Sync + 'static { pub trait PartialMultisignature: Signature { type Signature: Signature; /// Adds the signature. + #[must_use] fn add_signature(self, signature: &Self::Signature, index: NodeIndex) -> Self; } @@ -408,6 +409,7 @@ impl<'a, T: Signable, MK: MultiKeychain> PartiallyMultisigned<'a, T, MK> { } /// Adds a signature and checks if multisignature is complete. + #[must_use] pub fn add_signature(self, signed: Signed<'a, Indexed, MK>, keychain: &'a MK) -> Self { if self.as_signable().hash().as_ref() != signed.as_signable().hash().as_ref() { warn!(target: "AlephBFT-signed", "Tried to add a signature of a different object"); @@ -440,6 +442,7 @@ pub type SignatureSet = NodeMap; impl PartialMultisignature for SignatureSet { type Signature = S; + #[must_use] fn add_signature(mut self, signature: &Self::Signature, index: NodeIndex) -> Self { self.insert(index, signature.clone()); self