diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a127045..162a7c3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,8 +11,9 @@ jobs: toolchain: [stable, beta, nightly] steps: - name: Checkout sources - uses: actions/checkout@v4 + uses: actions/checkout@v6 - run: rustup update ${{ matrix.toolchain }} + - run: rustup default ${{ matrix.toolchain }} - run: cargo check --all test: @@ -23,8 +24,9 @@ jobs: toolchain: [stable, beta, nightly] steps: - name: Checkout sources - uses: actions/checkout@v4 + uses: actions/checkout@v6 - run: rustup update ${{ matrix.toolchain }} + - run: rustup default ${{ matrix.toolchain }} - run: cargo test --all lints: @@ -32,10 +34,12 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - toolchain: [stable, beta, nightly] + toolchain: [stable] steps: - name: Checkout sources - uses: actions/checkout@v4 + uses: actions/checkout@v6 - run: rustup update ${{ matrix.toolchain }} + - run: rustup default ${{ matrix.toolchain }} + - run: rustup component add rustfmt clippy - run: cargo fmt --all -- --check - - run: cargo clippy --all -- -D warnings + - run: cargo clippy --all --all-targets -- -D warnings diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..179e5c4 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,31 @@ +name: Create GitHub Release and Publish to crates.io + +on: + push: + tags: ['v*'] + +jobs: + github-release: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v6 + - id: create-release + run: gh release create ${{ github.ref_name }} --title "${{ github.ref_name }}" --generate-notes + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + publish: + needs: github-release + runs-on: ubuntu-latest + # environment: release # Optional: for enhanced security + permissions: + id-token: write + steps: + - uses: actions/checkout@v6 + - uses: rust-lang/crates-io-auth-action@v1 + id: auth + - run: cargo publish + env: + CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }} diff --git a/Cargo.toml b/Cargo.toml index b877487..3556c11 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ repository = "https://github.com/sile/plumtree" readme = "README.md" license = "MIT" categories = ["algorithms"] -edition = "2021" +edition = "2024" [dev-dependencies] rand = "0.9" diff --git a/src/action.rs b/src/action.rs index 156d084..545528c 100644 --- a/src/action.rs +++ b/src/action.rs @@ -1,5 +1,5 @@ -use crate::message::{Message, ProtocolMessage}; use crate::System; +use crate::message::{Message, ProtocolMessage}; use std::collections::VecDeque; use std::fmt; diff --git a/src/missing.rs b/src/missing.rs index 1d8318c..1cb80d3 100644 --- a/src/missing.rs +++ b/src/missing.rs @@ -1,6 +1,6 @@ +use crate::System; use crate::message::IhaveMessage; use crate::time::{Clock, NodeTime}; -use crate::System; use std::cmp::Ordering; use std::collections::{BinaryHeap, HashMap}; use std::fmt; diff --git a/src/node.rs b/src/node.rs index c5e10fd..3cb7a00 100644 --- a/src/node.rs +++ b/src/node.rs @@ -1,10 +1,10 @@ +use crate::System; use crate::action::{Action, ActionQueue}; use crate::message::{ GossipMessage, GraftMessage, IhaveMessage, Message, ProtocolMessage, PruneMessage, }; use crate::missing::MissingMessages; use crate::time::{Clock, NodeTime}; -use crate::System; use std::collections::{HashMap, HashSet}; use std::fmt; use std::time::Duration; @@ -304,12 +304,12 @@ impl Node { fn handle_graft(&mut self, mut graft: GraftMessage) { self.eager_push_peers.insert(graft.sender.clone()); self.lazy_push_peers.remove(&graft.sender); - if let Some(message_id) = graft.message_id.take() { - if let Some(payload) = self.messages.get(&message_id).cloned() { - let gossip = - GossipMessage::new(&self.id, Message::new(message_id, payload), graft.round); - self.actions.send(graft.sender, gossip); - } + if let Some(message_id) = graft.message_id.take() + && let Some(payload) = self.messages.get(&message_id).cloned() + { + let gossip = + GossipMessage::new(&self.id, Message::new(message_id, payload), graft.round); + self.actions.send(graft.sender, gossip); } }