mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-19 13:01:22 +00:00
fix(ci): ensure all examples compile with the specified feature-set
Due to cargo's feature unification, a full build of our workspace doesn't actually check whether the examples compile as standalone projects. We add a new CI check that iterates through all crates in the `examples/` directory and runs a plain `cargo check` on them. Any failure is bubbled up via `set -e`, thus failing CI in case one of the `cargo check` commands fails. To fix the current failures, we construct a simple TCP transport everywhere where we were previously using `development_transport`. That is because `development_transport` requires `mplex` which is now deprecated. Related #3657. Related #3809. Pull-Request: #3811.
This commit is contained in:
22
.github/workflows/ci.yml
vendored
22
.github/workflows/ci.yml
vendored
@ -195,6 +195,28 @@ jobs:
|
|||||||
- name: Run ipfs-kad example
|
- name: Run ipfs-kad example
|
||||||
run: cd ./examples/ipfs-kad/ && RUST_LOG=libp2p_swarm=debug,libp2p_kad=trace,libp2p_tcp=debug cargo run
|
run: cd ./examples/ipfs-kad/ && RUST_LOG=libp2p_swarm=debug,libp2p_kad=trace,libp2p_tcp=debug cargo run
|
||||||
|
|
||||||
|
examples:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- uses: dtolnay/rust-toolchain@stable
|
||||||
|
|
||||||
|
- uses: r7kamura/rust-problem-matchers@d58b70c4a13c4866d96436315da451d8106f8f08 #v1.3.0
|
||||||
|
|
||||||
|
- uses: Swatinem/rust-cache@6fd3edff6979b79f87531400ad694fb7f2c84b1f # v2.2.1
|
||||||
|
with:
|
||||||
|
shared-key: stable-cache
|
||||||
|
save-if: false
|
||||||
|
|
||||||
|
- name: Compile all examples
|
||||||
|
run: |
|
||||||
|
set -e;
|
||||||
|
|
||||||
|
for toml in examples/**/Cargo.toml; do
|
||||||
|
cargo check --manifest-path "$toml";
|
||||||
|
done
|
||||||
|
|
||||||
rustfmt:
|
rustfmt:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
@ -63,7 +63,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
println!("Local peer id: {local_peer_id:?}");
|
println!("Local peer id: {local_peer_id:?}");
|
||||||
|
|
||||||
let transport = tcp::async_io::Transport::default()
|
let transport = tcp::async_io::Transport::default()
|
||||||
.upgrade(Version::V1)
|
.upgrade(Version::V1Lazy)
|
||||||
.authenticate(noise::NoiseAuthenticated::xx(&local_key)?)
|
.authenticate(noise::NoiseAuthenticated::xx(&local_key)?)
|
||||||
.multiplex(yamux::YamuxConfig::default())
|
.multiplex(yamux::YamuxConfig::default())
|
||||||
.boxed();
|
.boxed();
|
||||||
|
@ -52,7 +52,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
println!("Local peer id: {local_peer_id:?}");
|
println!("Local peer id: {local_peer_id:?}");
|
||||||
|
|
||||||
let transport = tcp::async_io::Transport::default()
|
let transport = tcp::async_io::Transport::default()
|
||||||
.upgrade(Version::V1)
|
.upgrade(Version::V1Lazy)
|
||||||
.authenticate(noise::NoiseAuthenticated::xx(&local_key)?)
|
.authenticate(noise::NoiseAuthenticated::xx(&local_key)?)
|
||||||
.multiplex(yamux::YamuxConfig::default())
|
.multiplex(yamux::YamuxConfig::default())
|
||||||
.boxed();
|
.boxed();
|
||||||
|
@ -76,7 +76,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
|
|
||||||
// Set up an encrypted DNS-enabled TCP Transport over the Mplex protocol.
|
// Set up an encrypted DNS-enabled TCP Transport over the Mplex protocol.
|
||||||
let tcp_transport = tcp::async_io::Transport::new(tcp::Config::default().nodelay(true))
|
let tcp_transport = tcp::async_io::Transport::new(tcp::Config::default().nodelay(true))
|
||||||
.upgrade(upgrade::Version::V1)
|
.upgrade(upgrade::Version::V1Lazy)
|
||||||
.authenticate(
|
.authenticate(
|
||||||
noise::NoiseAuthenticated::xx(&id_keys).expect("signing libp2p-noise static keypair"),
|
noise::NoiseAuthenticated::xx(&id_keys).expect("signing libp2p-noise static keypair"),
|
||||||
)
|
)
|
||||||
|
@ -96,7 +96,7 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
)))
|
)))
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
)
|
)
|
||||||
.upgrade(upgrade::Version::V1)
|
.upgrade(upgrade::Version::V1Lazy)
|
||||||
.authenticate(
|
.authenticate(
|
||||||
noise::NoiseAuthenticated::xx(&local_key)
|
noise::NoiseAuthenticated::xx(&local_key)
|
||||||
.expect("Signing libp2p-noise static DH keypair failed."),
|
.expect("Signing libp2p-noise static DH keypair failed."),
|
||||||
|
@ -42,15 +42,16 @@
|
|||||||
|
|
||||||
use async_std::io;
|
use async_std::io;
|
||||||
use futures::{prelude::*, select};
|
use futures::{prelude::*, select};
|
||||||
|
use libp2p::core::upgrade::Version;
|
||||||
use libp2p::kad::record::store::MemoryStore;
|
use libp2p::kad::record::store::MemoryStore;
|
||||||
use libp2p::kad::{
|
use libp2p::kad::{
|
||||||
record::Key, AddProviderOk, GetProvidersOk, GetRecordOk, Kademlia, KademliaEvent, PeerRecord,
|
record::Key, AddProviderOk, GetProvidersOk, GetRecordOk, Kademlia, KademliaEvent, PeerRecord,
|
||||||
PutRecordOk, QueryResult, Quorum, Record,
|
PutRecordOk, QueryResult, Quorum, Record,
|
||||||
};
|
};
|
||||||
use libp2p::{
|
use libp2p::{
|
||||||
development_transport, identity, mdns,
|
identity, mdns, noise,
|
||||||
swarm::{NetworkBehaviour, SwarmBuilder, SwarmEvent},
|
swarm::{NetworkBehaviour, SwarmBuilder, SwarmEvent},
|
||||||
PeerId,
|
tcp, yamux, PeerId, Transport,
|
||||||
};
|
};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
@ -62,8 +63,11 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
let local_key = identity::Keypair::generate_ed25519();
|
let local_key = identity::Keypair::generate_ed25519();
|
||||||
let local_peer_id = PeerId::from(local_key.public());
|
let local_peer_id = PeerId::from(local_key.public());
|
||||||
|
|
||||||
// Set up a an encrypted DNS-enabled TCP Transport over the Mplex protocol.
|
let transport = tcp::async_io::Transport::default()
|
||||||
let transport = development_transport(local_key).await?;
|
.upgrade(Version::V1Lazy)
|
||||||
|
.authenticate(noise::NoiseAuthenticated::xx(&local_key)?)
|
||||||
|
.multiplex(yamux::YamuxConfig::default())
|
||||||
|
.boxed();
|
||||||
|
|
||||||
// We create a custom network behaviour that combines Kademlia and mDNS.
|
// We create a custom network behaviour that combines Kademlia and mDNS.
|
||||||
#[derive(NetworkBehaviour)]
|
#[derive(NetworkBehaviour)]
|
||||||
|
@ -14,11 +14,13 @@ use libp2p::{
|
|||||||
record::store::MemoryStore, GetProvidersOk, Kademlia, KademliaEvent, QueryId, QueryResult,
|
record::store::MemoryStore, GetProvidersOk, Kademlia, KademliaEvent, QueryId, QueryResult,
|
||||||
},
|
},
|
||||||
multiaddr::Protocol,
|
multiaddr::Protocol,
|
||||||
|
noise,
|
||||||
request_response::{self, ProtocolSupport, RequestId, ResponseChannel},
|
request_response::{self, ProtocolSupport, RequestId, ResponseChannel},
|
||||||
swarm::{ConnectionHandlerUpgrErr, NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent},
|
swarm::{ConnectionHandlerUpgrErr, NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent},
|
||||||
PeerId,
|
tcp, yamux, PeerId, Transport,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use libp2p::core::upgrade::Version;
|
||||||
use std::collections::{hash_map, HashMap, HashSet};
|
use std::collections::{hash_map, HashMap, HashSet};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::iter;
|
use std::iter;
|
||||||
@ -45,10 +47,16 @@ pub async fn new(
|
|||||||
};
|
};
|
||||||
let peer_id = id_keys.public().to_peer_id();
|
let peer_id = id_keys.public().to_peer_id();
|
||||||
|
|
||||||
|
let transport = tcp::async_io::Transport::default()
|
||||||
|
.upgrade(Version::V1Lazy)
|
||||||
|
.authenticate(noise::NoiseAuthenticated::xx(&id_keys)?)
|
||||||
|
.multiplex(yamux::YamuxConfig::default())
|
||||||
|
.boxed();
|
||||||
|
|
||||||
// Build the Swarm, connecting the lower layer transport logic with the
|
// Build the Swarm, connecting the lower layer transport logic with the
|
||||||
// higher layer network behaviour logic.
|
// higher layer network behaviour logic.
|
||||||
let swarm = SwarmBuilder::with_async_std_executor(
|
let swarm = SwarmBuilder::with_async_std_executor(
|
||||||
libp2p::development_transport(id_keys).await?,
|
transport,
|
||||||
ComposedBehaviour {
|
ComposedBehaviour {
|
||||||
kademlia: Kademlia::new(peer_id, MemoryStore::new(peer_id)),
|
kademlia: Kademlia::new(peer_id, MemoryStore::new(peer_id)),
|
||||||
request_response: request_response::Behaviour::new(
|
request_response: request_response::Behaviour::new(
|
||||||
|
@ -52,7 +52,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
println!("Local peer id: {local_peer_id:?}");
|
println!("Local peer id: {local_peer_id:?}");
|
||||||
|
|
||||||
let transport = tcp::async_io::Transport::default()
|
let transport = tcp::async_io::Transport::default()
|
||||||
.upgrade(Version::V1)
|
.upgrade(Version::V1Lazy)
|
||||||
.authenticate(noise::NoiseAuthenticated::xx(&local_key).unwrap())
|
.authenticate(noise::NoiseAuthenticated::xx(&local_key).unwrap())
|
||||||
.multiplex(yamux::YamuxConfig::default())
|
.multiplex(yamux::YamuxConfig::default())
|
||||||
.boxed();
|
.boxed();
|
||||||
|
@ -63,7 +63,7 @@ pub fn build_transport(
|
|||||||
None => Either::Right(base_transport),
|
None => Either::Right(base_transport),
|
||||||
};
|
};
|
||||||
maybe_encrypted
|
maybe_encrypted
|
||||||
.upgrade(Version::V1)
|
.upgrade(Version::V1Lazy)
|
||||||
.authenticate(noise_config)
|
.authenticate(noise_config)
|
||||||
.multiplex(yamux_config)
|
.multiplex(yamux_config)
|
||||||
.timeout(Duration::from_secs(20))
|
.timeout(Duration::from_secs(20))
|
||||||
|
@ -73,7 +73,7 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
|
|
||||||
let mut swarm = SwarmBuilder::without_executor(
|
let mut swarm = SwarmBuilder::without_executor(
|
||||||
tcp::async_io::Transport::default()
|
tcp::async_io::Transport::default()
|
||||||
.upgrade(Version::V1)
|
.upgrade(Version::V1Lazy)
|
||||||
.authenticate(noise::NoiseAuthenticated::xx(&local_key)?)
|
.authenticate(noise::NoiseAuthenticated::xx(&local_key)?)
|
||||||
.multiplex(yamux::YamuxConfig::default())
|
.multiplex(yamux::YamuxConfig::default())
|
||||||
.boxed(),
|
.boxed(),
|
||||||
|
@ -41,10 +41,11 @@
|
|||||||
//! and begin pinging each other.
|
//! and begin pinging each other.
|
||||||
|
|
||||||
use futures::prelude::*;
|
use futures::prelude::*;
|
||||||
|
use libp2p::core::upgrade::Version;
|
||||||
use libp2p::{
|
use libp2p::{
|
||||||
identity, ping,
|
identity, noise, ping,
|
||||||
swarm::{keep_alive, NetworkBehaviour, SwarmBuilder, SwarmEvent},
|
swarm::{keep_alive, NetworkBehaviour, SwarmBuilder, SwarmEvent},
|
||||||
Multiaddr, PeerId,
|
tcp, yamux, Multiaddr, PeerId, Transport,
|
||||||
};
|
};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
@ -54,7 +55,11 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
let local_peer_id = PeerId::from(local_key.public());
|
let local_peer_id = PeerId::from(local_key.public());
|
||||||
println!("Local peer id: {local_peer_id:?}");
|
println!("Local peer id: {local_peer_id:?}");
|
||||||
|
|
||||||
let transport = libp2p::development_transport(local_key).await?;
|
let transport = tcp::async_io::Transport::default()
|
||||||
|
.upgrade(Version::V1Lazy)
|
||||||
|
.authenticate(noise::NoiseAuthenticated::xx(&local_key)?)
|
||||||
|
.multiplex(yamux::YamuxConfig::default())
|
||||||
|
.boxed();
|
||||||
|
|
||||||
let mut swarm =
|
let mut swarm =
|
||||||
SwarmBuilder::with_async_std_executor(transport, Behaviour::default(), local_peer_id)
|
SwarmBuilder::with_async_std_executor(transport, Behaviour::default(), local_peer_id)
|
||||||
|
@ -49,7 +49,7 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
let tcp_transport = tcp::async_io::Transport::default();
|
let tcp_transport = tcp::async_io::Transport::default();
|
||||||
|
|
||||||
let transport = tcp_transport
|
let transport = tcp_transport
|
||||||
.upgrade(upgrade::Version::V1)
|
.upgrade(upgrade::Version::V1Lazy)
|
||||||
.authenticate(
|
.authenticate(
|
||||||
noise::NoiseAuthenticated::xx(&local_key)
|
noise::NoiseAuthenticated::xx(&local_key)
|
||||||
.expect("Signing libp2p-noise static DH keypair failed."),
|
.expect("Signing libp2p-noise static DH keypair failed."),
|
||||||
|
@ -43,7 +43,7 @@ async fn main() {
|
|||||||
|
|
||||||
let mut swarm = SwarmBuilder::with_tokio_executor(
|
let mut swarm = SwarmBuilder::with_tokio_executor(
|
||||||
tcp::tokio::Transport::default()
|
tcp::tokio::Transport::default()
|
||||||
.upgrade(Version::V1)
|
.upgrade(Version::V1Lazy)
|
||||||
.authenticate(noise::NoiseAuthenticated::xx(&key_pair).unwrap())
|
.authenticate(noise::NoiseAuthenticated::xx(&key_pair).unwrap())
|
||||||
.multiplex(yamux::YamuxConfig::default())
|
.multiplex(yamux::YamuxConfig::default())
|
||||||
.boxed(),
|
.boxed(),
|
||||||
|
@ -39,7 +39,7 @@ async fn main() {
|
|||||||
|
|
||||||
let mut swarm = SwarmBuilder::with_tokio_executor(
|
let mut swarm = SwarmBuilder::with_tokio_executor(
|
||||||
tcp::tokio::Transport::default()
|
tcp::tokio::Transport::default()
|
||||||
.upgrade(Version::V1)
|
.upgrade(Version::V1Lazy)
|
||||||
.authenticate(noise::NoiseAuthenticated::xx(&key_pair).unwrap())
|
.authenticate(noise::NoiseAuthenticated::xx(&key_pair).unwrap())
|
||||||
.multiplex(yamux::YamuxConfig::default())
|
.multiplex(yamux::YamuxConfig::default())
|
||||||
.boxed(),
|
.boxed(),
|
||||||
|
@ -39,7 +39,7 @@ async fn main() {
|
|||||||
|
|
||||||
let mut swarm = SwarmBuilder::with_tokio_executor(
|
let mut swarm = SwarmBuilder::with_tokio_executor(
|
||||||
tcp::tokio::Transport::default()
|
tcp::tokio::Transport::default()
|
||||||
.upgrade(Version::V1)
|
.upgrade(Version::V1Lazy)
|
||||||
.authenticate(noise::NoiseAuthenticated::xx(&key_pair).unwrap())
|
.authenticate(noise::NoiseAuthenticated::xx(&key_pair).unwrap())
|
||||||
.multiplex(yamux::YamuxConfig::default())
|
.multiplex(yamux::YamuxConfig::default())
|
||||||
.boxed(),
|
.boxed(),
|
||||||
|
@ -53,7 +53,7 @@ async fn main() {
|
|||||||
|
|
||||||
let mut swarm = SwarmBuilder::with_tokio_executor(
|
let mut swarm = SwarmBuilder::with_tokio_executor(
|
||||||
tcp::tokio::Transport::default()
|
tcp::tokio::Transport::default()
|
||||||
.upgrade(Version::V1)
|
.upgrade(Version::V1Lazy)
|
||||||
.authenticate(noise::NoiseAuthenticated::xx(&key_pair).unwrap())
|
.authenticate(noise::NoiseAuthenticated::xx(&key_pair).unwrap())
|
||||||
.multiplex(yamux::YamuxConfig::default())
|
.multiplex(yamux::YamuxConfig::default())
|
||||||
.boxed(),
|
.boxed(),
|
||||||
|
Reference in New Issue
Block a user