From 25209f5bd85ff47022f82db7c0e3395558365ad7 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Mon, 17 Oct 2022 04:14:09 +0100 Subject: [PATCH 01/79] use impl-more in -tls --- actix-service/src/macros.rs | 2 ++ actix-tls/Cargo.toml | 1 + actix-tls/src/accept/native_tls.rs | 6 ++--- actix-tls/src/accept/openssl.rs | 6 ++--- actix-tls/src/accept/rustls.rs | 6 ++--- actix-tls/src/connect/connection.rs | 4 +-- actix-tls/src/impl_more.rs | 40 ----------------------------- actix-tls/src/lib.rs | 2 -- 8 files changed, 10 insertions(+), 57 deletions(-) delete mode 100644 actix-tls/src/impl_more.rs diff --git a/actix-service/src/macros.rs b/actix-service/src/macros.rs index 503cf116..fc46bb9d 100644 --- a/actix-service/src/macros.rs +++ b/actix-service/src/macros.rs @@ -25,6 +25,8 @@ /// } /// } /// ``` +/// +/// [`forward_ready!`]: crate::forward_ready #[macro_export] macro_rules! always_ready { () => { diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index bbe1156c..d6b2efe2 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -48,6 +48,7 @@ actix-service = "2.0.0" actix-utils = "3.0.0" futures-core = { version = "0.3.7", default-features = false, features = ["alloc"] } +impl-more = "0.1.0" pin-project-lite = "0.2.7" tokio-util = "0.7" tracing = { version = "0.1.30", default-features = false, features = ["log"] } diff --git a/actix-tls/src/accept/native_tls.rs b/actix-tls/src/accept/native_tls.rs index b22c1ef2..f9dda144 100644 --- a/actix-tls/src/accept/native_tls.rs +++ b/actix-tls/src/accept/native_tls.rs @@ -24,7 +24,6 @@ use futures_core::future::LocalBoxFuture; use tokio_native_tls::{native_tls::Error, TlsAcceptor}; use super::{TlsError, DEFAULT_TLS_HANDSHAKE_TIMEOUT, MAX_CONN_COUNTER}; -use crate::impl_more; pub mod reexports { //! Re-exports from `native-tls` that are useful for acceptors. @@ -35,9 +34,8 @@ pub mod reexports { /// Wraps a `native-tls` based async TLS stream in order to implement [`ActixStream`]. pub struct TlsStream(tokio_native_tls::TlsStream); -impl_more::from! { tokio_native_tls::TlsStream => TlsStream } -impl_more::deref! { TlsStream => 0: tokio_native_tls::TlsStream } -impl_more::deref_mut! { TlsStream => 0 } +impl_more::impl_from!( in tokio_native_tls::TlsStream => TlsStream); +impl_more::impl_deref_and_mut!( in TlsStream => tokio_native_tls::TlsStream); impl AsyncRead for TlsStream { fn poll_read( diff --git a/actix-tls/src/accept/openssl.rs b/actix-tls/src/accept/openssl.rs index 6e65e5fc..1f068274 100644 --- a/actix-tls/src/accept/openssl.rs +++ b/actix-tls/src/accept/openssl.rs @@ -25,7 +25,6 @@ use openssl::ssl::{Error, Ssl, SslAcceptor}; use pin_project_lite::pin_project; use super::{TlsError, DEFAULT_TLS_HANDSHAKE_TIMEOUT, MAX_CONN_COUNTER}; -use crate::impl_more; pub mod reexports { //! Re-exports from `openssl` that are useful for acceptors. @@ -38,9 +37,8 @@ pub mod reexports { /// Wraps an `openssl` based async TLS stream in order to implement [`ActixStream`]. pub struct TlsStream(tokio_openssl::SslStream); -impl_more::from! { tokio_openssl::SslStream => TlsStream } -impl_more::deref! { TlsStream => 0: tokio_openssl::SslStream } -impl_more::deref_mut! { TlsStream => 0 } +impl_more::impl_from!( in tokio_openssl::SslStream => TlsStream); +impl_more::impl_deref_and_mut!( in TlsStream => tokio_openssl::SslStream); impl AsyncRead for TlsStream { fn poll_read( diff --git a/actix-tls/src/accept/rustls.rs b/actix-tls/src/accept/rustls.rs index 35fbd34a..73e77bd5 100644 --- a/actix-tls/src/accept/rustls.rs +++ b/actix-tls/src/accept/rustls.rs @@ -27,7 +27,6 @@ use tokio_rustls::rustls::ServerConfig; use tokio_rustls::{Accept, TlsAcceptor}; use super::{TlsError, DEFAULT_TLS_HANDSHAKE_TIMEOUT, MAX_CONN_COUNTER}; -use crate::impl_more; pub mod reexports { //! Re-exports from `rustls` that are useful for acceptors. @@ -38,9 +37,8 @@ pub mod reexports { /// Wraps a `rustls` based async TLS stream in order to implement [`ActixStream`]. pub struct TlsStream(tokio_rustls::server::TlsStream); -impl_more::from! { tokio_rustls::server::TlsStream => TlsStream } -impl_more::deref! { TlsStream => 0: tokio_rustls::server::TlsStream } -impl_more::deref_mut! { TlsStream => 0 } +impl_more::impl_from!( in tokio_rustls::server::TlsStream => TlsStream); +impl_more::impl_deref_and_mut!( in TlsStream => tokio_rustls::server::TlsStream); impl AsyncRead for TlsStream { fn poll_read( diff --git a/actix-tls/src/connect/connection.rs b/actix-tls/src/connect/connection.rs index 1abd4eff..3433ac1a 100644 --- a/actix-tls/src/connect/connection.rs +++ b/actix-tls/src/connect/connection.rs @@ -1,5 +1,4 @@ use super::Host; -use crate::impl_more; /// Wraps underlying I/O and the connection request that initiated it. #[derive(Debug)] @@ -8,8 +7,7 @@ pub struct Connection { pub(crate) io: IO, } -impl_more::deref! { Connection => io: IO } -impl_more::deref_mut! { Connection => io } +impl_more::impl_deref_and_mut!( in Connection => io: IO); impl Connection { /// Construct new `Connection` from request and IO parts. diff --git a/actix-tls/src/impl_more.rs b/actix-tls/src/impl_more.rs deleted file mode 100644 index c380228b..00000000 --- a/actix-tls/src/impl_more.rs +++ /dev/null @@ -1,40 +0,0 @@ -/// A helper to implement `Deref` for a type. -#[macro_export] -macro_rules! deref { - ($ty:ident $(<$($generic:ident),*>)? => $field:tt: $target:ty) => { - impl $(<$($generic),*>)? ::core::ops::Deref for $ty $(<$($generic),*>)? { - type Target = $target; - - fn deref(&self) -> &Self::Target { - &self.$field - } - } - }; -} - -/// A helper to implement `DerefMut` for a type. -#[macro_export] -macro_rules! deref_mut { - ($ty:ident $(<$($generic:ident),*>)? => $field:tt) => { - impl $(<$($generic),*>)? ::core::ops::DerefMut for $ty $(<$($generic),*>)? { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.$field - } - } - }; -} - -/// A helper to implement `From` for a unit struct. -#[macro_export] -macro_rules! from { - ($from:ty => $ty:ident $(<$($generic:ident),*>)?) => { - impl $(<$($generic),*>)? ::core::convert::From<$from> for $ty $(<$($generic),*>)? { - fn from(from: $from) -> Self { - Self(from) - } - } - }; -} - -#[allow(unused_imports)] -pub(crate) use crate::{deref, deref_mut, from}; diff --git a/actix-tls/src/lib.rs b/actix-tls/src/lib.rs index dfca00cd..39714dca 100644 --- a/actix-tls/src/lib.rs +++ b/actix-tls/src/lib.rs @@ -18,5 +18,3 @@ pub mod accept; #[cfg(feature = "connect")] #[cfg_attr(docsrs, doc(cfg(feature = "connect")))] pub mod connect; - -mod impl_more; From cb83922b292586c0e7b3fc1c35e33e0fb5f1bbe5 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Mon, 17 Oct 2022 04:27:34 +0100 Subject: [PATCH 02/79] add macos test note --- actix-tls/tests/test_connect.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/actix-tls/tests/test_connect.rs b/actix-tls/tests/test_connect.rs index 7f8212b0..5e73fd2d 100644 --- a/actix-tls/tests/test_connect.rs +++ b/actix-tls/tests/test_connect.rs @@ -143,6 +143,9 @@ async fn test_local_addr() { }) }); + // if you've arrived here because of a failing test on macOS run this in your terminal: + // sudo ifconfig lo0 alias 127.0.0.3 + let conn = Connector::default().service(); let local = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 3)); From ade71b7bd3403ddec17d54a3beb2acd049db726f Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Fri, 21 Oct 2022 03:14:38 +0100 Subject: [PATCH 03/79] address soundness footgun in poll_fn --- actix-utils/src/future/mod.rs | 2 +- actix-utils/src/future/poll_fn.rs | 65 ++++++++++++++++++++++++++++--- actix-utils/src/future/ready.rs | 4 +- 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/actix-utils/src/future/mod.rs b/actix-utils/src/future/mod.rs index be3807bf..399b54d2 100644 --- a/actix-utils/src/future/mod.rs +++ b/actix-utils/src/future/mod.rs @@ -1,4 +1,4 @@ -//! Asynchronous values. +//! Helpers for constructing futures. mod either; mod poll_fn; diff --git a/actix-utils/src/future/poll_fn.rs b/actix-utils/src/future/poll_fn.rs index 31421b45..15d93dbd 100644 --- a/actix-utils/src/future/poll_fn.rs +++ b/actix-utils/src/future/poll_fn.rs @@ -8,6 +8,31 @@ use core::{ }; /// Creates a future driven by the provided function that receives a task context. +/// +/// # Examples +/// ``` +/// # use std::task::Poll; +/// # use actix_utils::future::poll_fn; +/// # async fn test_poll_fn() { +/// let res = poll_fn(|_| Poll::Ready(42)).await; +/// assert_eq!(res, 42); +/// +/// let mut i = 5; +/// let res = poll_fn(|cx| { +/// i -= 1; +/// +/// if i > 0 { +/// cx.waker().wake_by_ref(); +/// Poll::Pending +/// } else { +/// Poll::Ready(42) +/// } +/// }) +/// .await; +/// assert_eq!(res, 42); +/// # } +/// # actix_rt::Runtime::new().unwrap().block_on(test_poll_fn()); +/// ``` #[inline] pub fn poll_fn(f: F) -> PollFn where @@ -16,13 +41,11 @@ where PollFn { f } } -/// A Future driven by the inner function. +/// Future for the [`poll_fn`] function. pub struct PollFn { f: F, } -impl Unpin for PollFn {} - impl fmt::Debug for PollFn { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("PollFn").finish() @@ -36,15 +59,22 @@ where type Output = T; #[inline] - fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { - (self.f)(cx) + fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + // SAFETY: we are not moving out of the pinned field + // see https://github.com/rust-lang/rust/pull/102737 + (unsafe { &mut self.get_unchecked_mut().f })(cx) } } #[cfg(test)] mod tests { + use std::marker::PhantomPinned; + use super::*; + static_assertions::assert_impl_all!(PollFn<()>: Unpin); + static_assertions::assert_not_impl_all!(PollFn: Unpin); + #[actix_rt::test] async fn test_poll_fn() { let res = poll_fn(|_| Poll::Ready(42)).await; @@ -64,4 +94,29 @@ mod tests { .await; assert_eq!(res, 42); } + + // following soundness tests taken from https://github.com/tokio-rs/tokio/pull/5087 + + #[allow(dead_code)] + fn require_send(_t: &T) {} + #[allow(dead_code)] + fn require_sync(_t: &T) {} + + trait AmbiguousIfUnpin { + fn some_item(&self) {} + } + impl AmbiguousIfUnpin<()> for T {} + impl AmbiguousIfUnpin<[u8; 0]> for T {} + + const _: fn() = || { + let pinned = std::marker::PhantomPinned; + let f = poll_fn(move |_| { + // Use `pinned` to take ownership of it. + let _ = &pinned; + std::task::Poll::Pending::<()> + }); + require_send(&f); + require_sync(&f); + AmbiguousIfUnpin::some_item(&f); + }; } diff --git a/actix-utils/src/future/ready.rs b/actix-utils/src/future/ready.rs index cd375c1f..31eb6551 100644 --- a/actix-utils/src/future/ready.rs +++ b/actix-utils/src/future/ready.rs @@ -1,4 +1,4 @@ -//! When MSRV is 1.48, replace with `core::future::Ready` and `core::future::ready()`. +//! When `core::future::Ready` has a `into_inner()` method, this can be deprecated. use core::{ future::Future, @@ -6,7 +6,7 @@ use core::{ task::{Context, Poll}, }; -/// Future for the [`ready`](ready()) function. +/// Future for the [`ready`] function. /// /// Panic will occur if polled more than once. /// From d5a9a6a1c51c37cf4b1a6799d22cfa7531a9ea17 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Fri, 21 Oct 2022 03:15:48 +0100 Subject: [PATCH 04/79] prepare actix-utils release 3.0.1 --- actix-service/Cargo.toml | 4 ++-- actix-tls/Cargo.toml | 10 +++++----- actix-tracing/Cargo.toml | 6 +++--- actix-utils/CHANGES.md | 3 +++ actix-utils/Cargo.toml | 2 +- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/actix-service/Cargo.toml b/actix-service/Cargo.toml index d4b602fd..b9f14675 100644 --- a/actix-service/Cargo.toml +++ b/actix-service/Cargo.toml @@ -23,6 +23,6 @@ paste = "1" pin-project-lite = "0.2" [dev-dependencies] -actix-rt = "2.0.0" -actix-utils = "3.0.0" +actix-rt = "2" +actix-utils = "3" futures-util = { version = "0.3.7", default-features = false } diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index d6b2efe2..00dc5dac 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -44,11 +44,11 @@ uri = ["http"] [dependencies] actix-codec = { version = "0.5.0", optional = true } actix-rt = { version = "2.2.0", default-features = false } -actix-service = "2.0.0" -actix-utils = "3.0.0" +actix-service = "2" +actix-utils = "3" futures-core = { version = "0.3.7", default-features = false, features = ["alloc"] } -impl-more = "0.1.0" +impl-more = "0.1" pin-project-lite = "0.2.7" tokio-util = "0.7" tracing = { version = "0.1.30", default-features = false, features = ["log"] } @@ -70,7 +70,7 @@ tokio-native-tls = { version = "0.3", optional = true } [dev-dependencies] actix-codec = "0.5.0" actix-rt = "2.2.0" -actix-server = "2.0.0" +actix-server = "2" bytes = "1" env_logger = "0.9" futures-util = { version = "0.3.7", default-features = false, features = ["sink"] } @@ -78,7 +78,7 @@ log = "0.4" rcgen = "0.8" rustls-pemfile = "0.2.1" tokio-rustls = { version = "0.23", features = ["dangerous_configuration"] } -trust-dns-resolver = "0.20.0" +trust-dns-resolver = "0.20" [[example]] name = "accept-rustls" diff --git a/actix-tracing/Cargo.toml b/actix-tracing/Cargo.toml index 50e15b76..279ffc28 100644 --- a/actix-tracing/Cargo.toml +++ b/actix-tracing/Cargo.toml @@ -16,12 +16,12 @@ name = "actix_tracing" path = "src/lib.rs" [dependencies] -actix-service = "2.0.0" -actix-utils = "3.0.0" +actix-service = "2" +actix-utils = "3" tracing = "0.1.35" tracing-futures = "0.2" [dev_dependencies] -actix-rt = "2.0.0" +actix-rt = "2" slab = "0.4" diff --git a/actix-utils/CHANGES.md b/actix-utils/CHANGES.md index 0602b27d..76dace73 100644 --- a/actix-utils/CHANGES.md +++ b/actix-utils/CHANGES.md @@ -1,6 +1,9 @@ # Changes ## Unreleased - 2022-xx-xx + + +## 3.0.1 - 2022-10-21 - Minimum supported Rust version (MSRV) is now 1.57. diff --git a/actix-utils/Cargo.toml b/actix-utils/Cargo.toml index ed858378..bd3eb480 100644 --- a/actix-utils/Cargo.toml +++ b/actix-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-utils" -version = "3.0.0" +version = "3.0.1" authors = [ "Nikolay Kim ", "Rob Ede ", From 68228a6cf29eee97c440606c6ebbe0b755956c59 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Fri, 21 Oct 2022 03:23:40 +0100 Subject: [PATCH 05/79] update dev deps --- actix-codec/Cargo.toml | 2 +- actix-tls/Cargo.toml | 6 +++--- bytestring/Cargo.toml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/actix-codec/Cargo.toml b/actix-codec/Cargo.toml index fbefebe0..0b63d214 100644 --- a/actix-codec/Cargo.toml +++ b/actix-codec/Cargo.toml @@ -28,7 +28,7 @@ tokio-util = { version = "0.7", features = ["codec", "io"] } tracing = { version = "0.1.30", default-features = false, features = ["log"] } [dev-dependencies] -criterion = { version = "0.3", features = ["html_reports"] } +criterion = { version = "0.4", features = ["html_reports"] } tokio-test = "0.4.2" [[bench]] diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index 00dc5dac..a2313688 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -75,10 +75,10 @@ bytes = "1" env_logger = "0.9" futures-util = { version = "0.3.7", default-features = false, features = ["sink"] } log = "0.4" -rcgen = "0.8" -rustls-pemfile = "0.2.1" +rcgen = "0.10" +rustls-pemfile = "1" tokio-rustls = { version = "0.23", features = ["dangerous_configuration"] } -trust-dns-resolver = "0.20" +trust-dns-resolver = "0.22" [[example]] name = "accept-rustls" diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index 4d85e001..374918e6 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -22,7 +22,7 @@ bytes = "1.2" serde = { version = "1.0", optional = true } [dev-dependencies] -ahash = { version = "0.7.6", default-features = false } +ahash = { version = "0.8", default-features = false } serde_json = "1.0" static_assertions = "1.1" rustversion = "1" From 056d2cd57308ef922202bee982f2ae66b26faca0 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Mon, 24 Oct 2022 23:44:29 +0100 Subject: [PATCH 06/79] workaround ci msrv issue --- .github/workflows/ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fd839fb4..31ac582f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -77,6 +77,11 @@ jobs: uses: actions-rs/cargo@v1 with: { command: generate-lockfile } + - name: workaround MSRV issues + if: matrix.version != 'stable' + run: | + cargo update -p=time --precise=0.3.13 + - name: check lib if: > matrix.target.os != 'ubuntu-latest' From df9a9d1a1e42e6328190eaedc3117ba10742da5b Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Tue, 25 Oct 2022 00:10:39 +0100 Subject: [PATCH 07/79] don't install cargo-cache on 1.57 CI --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 31ac582f..5013ba1f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,7 +80,7 @@ jobs: - name: workaround MSRV issues if: matrix.version != 'stable' run: | - cargo update -p=time --precise=0.3.13 + cargo update -p=time --precise=0.3.13 # time is only a dev dep so shouldn't affect msrv - name: check lib if: > @@ -123,6 +123,7 @@ jobs: sudo bash -c "ulimit -Sl 512 && ulimit -Hl 512 && PATH=$PATH:/usr/share/rust/.cargo/bin && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-linux" - name: Clear the cargo caches + if: matrix.version == 'stable' # MSRV(1.58) cargo-cache now fails to install on 1.57 run: | cargo install cargo-cache --version 0.6.2 --no-default-features --features ci-autoclean cargo-cache From 428914e65e176c39f6252188d81cc60ca59b99aa Mon Sep 17 00:00:00 2001 From: fakeshadow <24548779@qq.com> Date: Tue, 25 Oct 2022 23:34:36 +0800 Subject: [PATCH 08/79] remove fakeshadow from author lists (#468) --- actix-rt/Cargo.toml | 1 - actix-server/Cargo.toml | 1 - actix-service/Cargo.toml | 1 - 3 files changed, 3 deletions(-) diff --git a/actix-rt/Cargo.toml b/actix-rt/Cargo.toml index 10eac079..dd5d423a 100644 --- a/actix-rt/Cargo.toml +++ b/actix-rt/Cargo.toml @@ -4,7 +4,6 @@ version = "2.7.0" authors = [ "Nikolay Kim ", "Rob Ede ", - "fakeshadow <24548779@qq.com>", ] description = "Tokio-based single-threaded async runtime for the Actix ecosystem" keywords = ["async", "futures", "io", "runtime"] diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index be4a81b6..3f2dcad0 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -3,7 +3,6 @@ name = "actix-server" version = "2.1.1" authors = [ "Nikolay Kim ", - "fakeshadow <24548779@qq.com>", "Rob Ede ", "Ali MJ Al-Nasrawy ", ] diff --git a/actix-service/Cargo.toml b/actix-service/Cargo.toml index b9f14675..ccd2005e 100644 --- a/actix-service/Cargo.toml +++ b/actix-service/Cargo.toml @@ -4,7 +4,6 @@ version = "2.0.2" authors = [ "Nikolay Kim ", "Rob Ede ", - "fakeshadow <24548779@qq.com>", ] description = "Service trait and combinators for representing asynchronous request/response operations." keywords = ["network", "framework", "async", "futures", "service"] From 00654aadc55a5000acea84a0d15c752ec2f77bde Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 30 Oct 2022 20:25:10 +0000 Subject: [PATCH 09/79] use direct tokio exports where possible --- .cargo/config.toml | 2 +- actix-codec/src/lib.rs | 5 ++--- actix-server/Cargo.toml | 4 ++-- actix-tls/Cargo.toml | 12 ++++++------ actix-tls/src/accept/native_tls.rs | 2 +- actix-tls/src/accept/openssl.rs | 2 +- actix-tls/src/accept/rustls.rs | 2 +- 7 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 4024bc0e..c4f6e3f6 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -20,4 +20,4 @@ ci-test = "hack --feature-powerset --exclude-features=io-uring test --lib --test ci-test-win = "hack --feature-powerset --depth 2 --exclude-features=io-uring test --lib --tests --no-fail-fast -- --nocapture" # test with io-uring feature -ci-test-linux = " hack --feature-powerset test --lib --tests --no-fail-fast -- --nocapture" +ci-test-linux = "hack --feature-powerset test --lib --tests --no-fail-fast -- --nocapture" diff --git a/actix-codec/src/lib.rs b/actix-codec/src/lib.rs index db1f90de..020e40e2 100644 --- a/actix-codec/src/lib.rs +++ b/actix-codec/src/lib.rs @@ -1,8 +1,7 @@ //! Codec utilities for working with framed protocols. //! -//! Contains adapters to go from streams of bytes, [`AsyncRead`] and -//! [`AsyncWrite`], to framed streams implementing [`Sink`] and [`Stream`]. -//! Framed streams are also known as `transports`. +//! Contains adapters to go from streams of bytes, [`AsyncRead`] and [`AsyncWrite`], to framed +//! streams implementing [`Sink`] and [`Stream`]. Framed streams are also known as `transports`. //! //! [`Sink`]: futures_sink::Sink //! [`Stream`]: futures_core::Stream diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index 3f2dcad0..eb2152a3 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -40,8 +40,8 @@ tracing = { version = "0.1.30", default-features = false, features = ["log"] } tokio-uring = { version = "0.3", optional = true } [dev-dependencies] -actix-codec = "0.5.0" -actix-rt = "2.6.0" +actix-codec = "0.5" +actix-rt = "2.6" bytes = "1" env_logger = "0.9" diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index a2313688..56591f35 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -30,19 +30,18 @@ accept = [] connect = [] # use openssl impls -openssl = ["tls-openssl", "tokio-openssl", "actix-codec"] +openssl = ["tls-openssl", "tokio-openssl"] # use rustls impls -rustls = ["tokio-rustls", "webpki-roots", "actix-codec"] +rustls = ["tokio-rustls", "webpki-roots"] # use native-tls impls -native-tls = ["tokio-native-tls", "actix-codec"] +native-tls = ["tokio-native-tls"] # support http::Uri as connect address uri = ["http"] [dependencies] -actix-codec = { version = "0.5.0", optional = true } actix-rt = { version = "2.2.0", default-features = false } actix-service = "2" actix-utils = "3" @@ -50,6 +49,7 @@ actix-utils = "3" futures-core = { version = "0.3.7", default-features = false, features = ["alloc"] } impl-more = "0.1" pin-project-lite = "0.2.7" +tokio = "1.13.1" tokio-util = "0.7" tracing = { version = "0.1.30", default-features = false, features = ["log"] } @@ -68,8 +68,8 @@ webpki-roots = { version = "0.22", optional = true } tokio-native-tls = { version = "0.3", optional = true } [dev-dependencies] -actix-codec = "0.5.0" -actix-rt = "2.2.0" +actix-codec = "0.5" +actix-rt = "2.2" actix-server = "2" bytes = "1" env_logger = "0.9" diff --git a/actix-tls/src/accept/native_tls.rs b/actix-tls/src/accept/native_tls.rs index f9dda144..ce98e687 100644 --- a/actix-tls/src/accept/native_tls.rs +++ b/actix-tls/src/accept/native_tls.rs @@ -10,7 +10,6 @@ use std::{ time::Duration, }; -use actix_codec::{AsyncRead, AsyncWrite, ReadBuf}; use actix_rt::{ net::{ActixStream, Ready}, time::timeout, @@ -21,6 +20,7 @@ use actix_utils::{ future::{ready, Ready as FutReady}, }; use futures_core::future::LocalBoxFuture; +use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio_native_tls::{native_tls::Error, TlsAcceptor}; use super::{TlsError, DEFAULT_TLS_HANDSHAKE_TIMEOUT, MAX_CONN_COUNTER}; diff --git a/actix-tls/src/accept/openssl.rs b/actix-tls/src/accept/openssl.rs index 1f068274..32973b66 100644 --- a/actix-tls/src/accept/openssl.rs +++ b/actix-tls/src/accept/openssl.rs @@ -11,7 +11,6 @@ use std::{ time::Duration, }; -use actix_codec::{AsyncRead, AsyncWrite, ReadBuf}; use actix_rt::{ net::{ActixStream, Ready}, time::{sleep, Sleep}, @@ -23,6 +22,7 @@ use actix_utils::{ }; use openssl::ssl::{Error, Ssl, SslAcceptor}; use pin_project_lite::pin_project; +use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use super::{TlsError, DEFAULT_TLS_HANDSHAKE_TIMEOUT, MAX_CONN_COUNTER}; diff --git a/actix-tls/src/accept/rustls.rs b/actix-tls/src/accept/rustls.rs index 73e77bd5..fd0ebfb0 100644 --- a/actix-tls/src/accept/rustls.rs +++ b/actix-tls/src/accept/rustls.rs @@ -12,7 +12,6 @@ use std::{ time::Duration, }; -use actix_codec::{AsyncRead, AsyncWrite, ReadBuf}; use actix_rt::{ net::{ActixStream, Ready}, time::{sleep, Sleep}, @@ -23,6 +22,7 @@ use actix_utils::{ future::{ready, Ready as FutReady}, }; use pin_project_lite::pin_project; +use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio_rustls::rustls::ServerConfig; use tokio_rustls::{Accept, TlsAcceptor}; From 363984ad75d47fc305830813fb405a26f7f2eaf1 Mon Sep 17 00:00:00 2001 From: "Wang, Chi" Date: Tue, 8 Nov 2022 04:16:46 +0800 Subject: [PATCH 10/79] Add ByteString::slice_ref (#470) --- bytestring/CHANGES.md | 2 ++ bytestring/src/lib.rs | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/bytestring/CHANGES.md b/bytestring/CHANGES.md index 2cdf6d91..d7c4c2be 100644 --- a/bytestring/CHANGES.md +++ b/bytestring/CHANGES.md @@ -2,7 +2,9 @@ ## Unreleased - 2022-xx-xx - Minimum supported Rust version (MSRV) is now 1.57. +- Add `ByteString::slice_ref` which can safely slice a `ByteString` into a new one with zero copy. [#470] +[#470]: https://github.com/actix/actix-net/pull/470 ## 1.1.0 - 2022-06-11 - Implement `From>` for `ByteString`. [#458] diff --git a/bytestring/src/lib.rs b/bytestring/src/lib.rs index 27357602..06117d7c 100644 --- a/bytestring/src/lib.rs +++ b/bytestring/src/lib.rs @@ -50,6 +50,34 @@ impl ByteString { pub const unsafe fn from_bytes_unchecked(src: Bytes) -> ByteString { Self(src) } + + /// Returns a slice of self that is equivalent to the given `subset`. Corresponds to [`Bytes::slice_ref`]. + /// + /// When processing a `ByteString` buffer with other tools, one often gets a + /// `&str` which is in fact a slice of the `ByteString`, i.e. a subset of it. + /// This function turns that `&str` into another `ByteString`, as if one had + /// sliced the `ByteString` with the offsets that correspond to `subset`. + /// + /// This operation is `O(1)`. + /// + /// # Examples + /// + /// ``` + /// use bytestring::ByteString; + /// + /// let string = ByteString::from_static(" foo "); + /// let subset = string.trim(); + /// let substring = string.slice_ref(subset); + /// assert_eq!(substring, "foo"); + /// ``` + /// + /// # Panics + /// + /// Requires that the given `subset` str is in fact contained within the + /// `ByteString` buffer; otherwise this function will panic. + pub fn slice_ref(&self, subset: &str) -> Self { + Self(self.0.slice_ref(subset.as_bytes())) + } } impl PartialEq for ByteString { @@ -349,4 +377,10 @@ mod test { let s = serde_json::to_string(&ByteString::from_static("nice bytes")).unwrap(); assert_eq!(s, r#""nice bytes""#); } + + #[test] + #[should_panic] + fn test_slice_ref_catches_not_a_subset() { + ByteString::from_static("foo bar").slice_ref("foo"); + } } From 6061a44a22dffe82b164b8cfc869931417e5646d Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Mon, 7 Nov 2022 20:21:57 +0000 Subject: [PATCH 11/79] slice_ref doc tweaks --- bytestring/src/lib.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/bytestring/src/lib.rs b/bytestring/src/lib.rs index 06117d7c..7058c106 100644 --- a/bytestring/src/lib.rs +++ b/bytestring/src/lib.rs @@ -51,30 +51,29 @@ impl ByteString { Self(src) } - /// Returns a slice of self that is equivalent to the given `subset`. Corresponds to [`Bytes::slice_ref`]. + /// Returns a byte string that is equivalent to the given `subset`. /// - /// When processing a `ByteString` buffer with other tools, one often gets a - /// `&str` which is in fact a slice of the `ByteString`, i.e. a subset of it. - /// This function turns that `&str` into another `ByteString`, as if one had - /// sliced the `ByteString` with the offsets that correspond to `subset`. + /// When processing a `ByteString` buffer with other tools, one often gets a `&str` which is in + /// fact a slice of the `ByteString`; i.e., a subset of it. This function turns that `&str` into + /// another `ByteString`, as if one had sliced the `ByteString` with the offsets that correspond + /// to `subset`. + /// + /// Corresponds to [`Bytes::slice_ref`]. /// /// This operation is `O(1)`. /// + /// # Panics + /// Requires that the given `subset` str is in fact contained within the `ByteString` buffer; + /// otherwise this function will panic. + /// /// # Examples - /// /// ``` - /// use bytestring::ByteString; - /// + /// # use bytestring::ByteString; /// let string = ByteString::from_static(" foo "); /// let subset = string.trim(); /// let substring = string.slice_ref(subset); /// assert_eq!(substring, "foo"); /// ``` - /// - /// # Panics - /// - /// Requires that the given `subset` str is in fact contained within the - /// `ByteString` buffer; otherwise this function will panic. pub fn slice_ref(&self, subset: &str) -> Self { Self(self.0.slice_ref(subset.as_bytes())) } From bb36e2a072a45f3e20a6d72049e51ebfbb35bd2e Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Mon, 7 Nov 2022 20:22:47 +0000 Subject: [PATCH 12/79] prepare bytestring release 1.2.0 --- bytestring/CHANGES.md | 6 +++++- bytestring/Cargo.toml | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/bytestring/CHANGES.md b/bytestring/CHANGES.md index d7c4c2be..cb966545 100644 --- a/bytestring/CHANGES.md +++ b/bytestring/CHANGES.md @@ -1,11 +1,15 @@ # Changes ## Unreleased - 2022-xx-xx -- Minimum supported Rust version (MSRV) is now 1.57. + + +## 1.2.0 - 2022-11-07 - Add `ByteString::slice_ref` which can safely slice a `ByteString` into a new one with zero copy. [#470] +- Minimum supported Rust version (MSRV) is now 1.57. [#470]: https://github.com/actix/actix-net/pull/470 + ## 1.1.0 - 2022-06-11 - Implement `From>` for `ByteString`. [#458] - Implement `Into` for `ByteString`. [#458] diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index 374918e6..466f8030 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bytestring" -version = "1.1.0" +version = "1.2.0" authors = [ "Nikolay Kim ", "Rob Ede ", From 9ede174e81fe276c84e66f88f2edb7f1295227e2 Mon Sep 17 00:00:00 2001 From: VladimirBramstedt <75995382+VladimirBramstedt@users.noreply.github.com> Date: Sat, 12 Nov 2022 08:00:06 +0100 Subject: [PATCH 13/79] fix no_std compatibility (#471) Co-authored-by: Yuki Okushi --- bytestring/CHANGES.md | 3 +++ bytestring/Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/bytestring/CHANGES.md b/bytestring/CHANGES.md index cb966545..0b1254ef 100644 --- a/bytestring/CHANGES.md +++ b/bytestring/CHANGES.md @@ -1,6 +1,9 @@ # Changes ## Unreleased - 2022-xx-xx +- Fix no_std compatibility. [#471] + +[#471]: https://github.com/actix/actix-net/pull/471 ## 1.2.0 - 2022-11-07 diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index 466f8030..92131e4a 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -18,7 +18,7 @@ name = "bytestring" path = "src/lib.rs" [dependencies] -bytes = "1.2" +bytes = { version = "1.2", default-features = false } serde = { version = "1.0", optional = true } [dev-dependencies] From 8e9401f8e1c6896c86b01820c90ea0e90184a30b Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 12 Nov 2022 13:19:09 +0000 Subject: [PATCH 14/79] prepare bytestring release 1.2.1 --- bytestring/CHANGES.md | 5 ++++- bytestring/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/bytestring/CHANGES.md b/bytestring/CHANGES.md index 0b1254ef..b096ed0d 100644 --- a/bytestring/CHANGES.md +++ b/bytestring/CHANGES.md @@ -1,7 +1,10 @@ # Changes ## Unreleased - 2022-xx-xx -- Fix no_std compatibility. [#471] + + +## 1.2.1 - 2022-11-12 +- Fix `#[no_std]` compatibility. [#471] [#471]: https://github.com/actix/actix-net/pull/471 diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index 92131e4a..1cf7bbe6 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bytestring" -version = "1.2.0" +version = "1.2.1" authors = [ "Nikolay Kim ", "Rob Ede ", From 2b83f08a40537f40ec92b7e3bcd514ff2da49e7b Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sat, 12 Nov 2022 23:00:33 +0900 Subject: [PATCH 15/79] Use old cargo-hack for 1.59.0 CI (#472) * Use old cargo-hack for 1.57.0 CI Signed-off-by: Yuki Okushi * Upgrade MSRV to 1.59.0 Signed-off-by: Yuki Okushi Signed-off-by: Yuki Okushi Co-authored-by: Rob Ede --- .github/workflows/ci.yml | 15 +++++++++------ actix-codec/CHANGES.md | 2 +- actix-macros/CHANGES.md | 2 +- actix-rt/CHANGES.md | 2 +- actix-server/CHANGES.md | 2 +- actix-service/CHANGES.md | 2 +- actix-tls/CHANGES.md | 2 +- actix-tracing/CHANGES.md | 2 +- actix-utils/CHANGES.md | 1 + bytestring/CHANGES.md | 1 + clippy.toml | 2 +- local-channel/CHANGES.md | 2 +- local-waker/CHANGES.md | 2 +- 13 files changed, 21 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5013ba1f..120c64c9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: - { name: Windows (MinGW), os: windows-latest, triple: x86_64-pc-windows-gnu } - { name: Windows (32-bit), os: windows-latest, triple: i686-pc-windows-msvc } version: - - 1.57.0 + - 1.59.0 - stable name: ${{ matrix.target.name }} / ${{ matrix.version }} @@ -68,10 +68,13 @@ jobs: # uses: Swatinem/rust-cache@v1.2.0 - name: Install cargo-hack - uses: actions-rs/cargo@v1 - with: - command: install - args: cargo-hack + if: matrix.version != '1.59.0' + run: cargo install cargo-hack + + # newer cargo-hack versions require 1.60 or above + - name: Install cargo-hack (1.59.0) + if: matrix.version == '1.59.0' + run: cargo install cargo-hack --version=0.5.21 - name: Generate Cargo.lock uses: actions-rs/cargo@v1 @@ -123,7 +126,7 @@ jobs: sudo bash -c "ulimit -Sl 512 && ulimit -Hl 512 && PATH=$PATH:/usr/share/rust/.cargo/bin && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-linux" - name: Clear the cargo caches - if: matrix.version == 'stable' # MSRV(1.58) cargo-cache now fails to install on 1.57 + if: matrix.version == 'stable' # MSRV(1.58) cargo-cache now fails to install on 1.59 run: | cargo install cargo-cache --version 0.6.2 --no-default-features --features ci-autoclean cargo-cache diff --git a/actix-codec/CHANGES.md b/actix-codec/CHANGES.md index 2de0bcf6..16246be0 100644 --- a/actix-codec/CHANGES.md +++ b/actix-codec/CHANGES.md @@ -1,7 +1,7 @@ # Changes ## Unreleased - 2022-xx-xx -- Minimum supported Rust version (MSRV) is now 1.57. +- Minimum supported Rust version (MSRV) is now 1.59. ## 0.5.1 - 2022-03-15 diff --git a/actix-macros/CHANGES.md b/actix-macros/CHANGES.md index 9a25f7ed..a319f8c3 100644 --- a/actix-macros/CHANGES.md +++ b/actix-macros/CHANGES.md @@ -1,7 +1,7 @@ # Changes ## Unreleased - 2022-xx-xx -- Minimum supported Rust version (MSRV) is now 1.57. +- Minimum supported Rust version (MSRV) is now 1.59. ## 0.2.3 - 2021-10-19 diff --git a/actix-rt/CHANGES.md b/actix-rt/CHANGES.md index b19b2b7d..d3ad535f 100644 --- a/actix-rt/CHANGES.md +++ b/actix-rt/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2022-xx-xx - Add `#[track_caller]` attribute to `spawn` functions and methods. [#454] -- Minimum supported Rust version (MSRV) is now 1.57. +- Minimum supported Rust version (MSRV) is now 1.59. [#454]: https://github.com/actix/actix-net/pull/454 diff --git a/actix-server/CHANGES.md b/actix-server/CHANGES.md index 1fdb63fd..54364edd 100644 --- a/actix-server/CHANGES.md +++ b/actix-server/CHANGES.md @@ -1,7 +1,7 @@ # Changes ## Unreleased - 2022-xx-xx -- Minimum supported Rust version (MSRV) is now 1.57. +- Minimum supported Rust version (MSRV) is now 1.59. ## 2.1.1 - 2022-03-09 diff --git a/actix-service/CHANGES.md b/actix-service/CHANGES.md index 5f4d5086..bd828c49 100644 --- a/actix-service/CHANGES.md +++ b/actix-service/CHANGES.md @@ -1,7 +1,7 @@ # Changes ## Unreleased - 2022-xx-xx -- Minimum supported Rust version (MSRV) is now 1.57. +- Minimum supported Rust version (MSRV) is now 1.59. ## 2.0.2 - 2021-12-18 diff --git a/actix-tls/CHANGES.md b/actix-tls/CHANGES.md index a4b7c75a..c807b74c 100644 --- a/actix-tls/CHANGES.md +++ b/actix-tls/CHANGES.md @@ -1,7 +1,7 @@ # Changes ## Unreleased - 2022-xx-xx -- Minimum supported Rust version (MSRV) is now 1.57. +- Minimum supported Rust version (MSRV) is now 1.59. ## 3.0.4 - 2022-03-15 diff --git a/actix-tracing/CHANGES.md b/actix-tracing/CHANGES.md index e4396377..938d536e 100644 --- a/actix-tracing/CHANGES.md +++ b/actix-tracing/CHANGES.md @@ -1,7 +1,7 @@ # Changes ## Unreleased - 2022-xx-xx -- Minimum supported Rust version (MSRV) is now 1.57. +- Minimum supported Rust version (MSRV) is now 1.59. ## 0.1.0 - 2020-01-15 diff --git a/actix-utils/CHANGES.md b/actix-utils/CHANGES.md index 76dace73..edd8e9c6 100644 --- a/actix-utils/CHANGES.md +++ b/actix-utils/CHANGES.md @@ -1,6 +1,7 @@ # Changes ## Unreleased - 2022-xx-xx +- Minimum supported Rust version (MSRV) is now 1.59. ## 3.0.1 - 2022-10-21 diff --git a/bytestring/CHANGES.md b/bytestring/CHANGES.md index b096ed0d..120f5a0e 100644 --- a/bytestring/CHANGES.md +++ b/bytestring/CHANGES.md @@ -1,6 +1,7 @@ # Changes ## Unreleased - 2022-xx-xx +- Minimum supported Rust version (MSRV) is now 1.59. ## 1.2.1 - 2022-11-12 diff --git a/clippy.toml b/clippy.toml index 5cccb362..abe19b3a 100644 --- a/clippy.toml +++ b/clippy.toml @@ -1 +1 @@ -msrv = "1.57" +msrv = "1.59" diff --git a/local-channel/CHANGES.md b/local-channel/CHANGES.md index 1b273273..d19848f0 100644 --- a/local-channel/CHANGES.md +++ b/local-channel/CHANGES.md @@ -1,7 +1,7 @@ # Changes ## Unreleased - 2022-xx-xx -- Minimum supported Rust version (MSRV) is now 1.57. +- Minimum supported Rust version (MSRV) is now 1.59. ## 0.1.3 - 2022-05-03 diff --git a/local-waker/CHANGES.md b/local-waker/CHANGES.md index bedfbea6..b36eacf5 100644 --- a/local-waker/CHANGES.md +++ b/local-waker/CHANGES.md @@ -1,7 +1,7 @@ # Changes ## Unreleased - 2022-xx-xx -- Minimum supported Rust version (MSRV) is now 1.57. +- Minimum supported Rust version (MSRV) is now 1.59. ## 0.1.3 - 2022-05-03 From fe38312db062264960676816e26f9295ff878d66 Mon Sep 17 00:00:00 2001 From: Riley Date: Tue, 20 Dec 2022 20:45:31 -0600 Subject: [PATCH 16/79] asonix/tokio uring 04 (#473) --- actix-rt/CHANGES.md | 2 ++ actix-rt/Cargo.toml | 2 +- actix-server/CHANGES.md | 3 +++ actix-server/Cargo.toml | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/actix-rt/CHANGES.md b/actix-rt/CHANGES.md index d3ad535f..ad54ed8d 100644 --- a/actix-rt/CHANGES.md +++ b/actix-rt/CHANGES.md @@ -3,8 +3,10 @@ ## Unreleased - 2022-xx-xx - Add `#[track_caller]` attribute to `spawn` functions and methods. [#454] - Minimum supported Rust version (MSRV) is now 1.59. +- Update tokio-uring to 0.4 [#454]: https://github.com/actix/actix-net/pull/454 +[#473]: https://github.com/actix/actix-net/pull/473 ## 2.7.0 - 2022-03-08 diff --git a/actix-rt/Cargo.toml b/actix-rt/Cargo.toml index dd5d423a..740e2e3a 100644 --- a/actix-rt/Cargo.toml +++ b/actix-rt/Cargo.toml @@ -30,7 +30,7 @@ tokio = { version = "1.13.1", features = ["rt", "net", "parking_lot", "signal", # runtime for `io-uring` feature [target.'cfg(target_os = "linux")'.dependencies] -tokio-uring = { version = "0.3", optional = true } +tokio-uring = { version = "0.4", optional = true } [dev-dependencies] tokio = { version = "1.13.1", features = ["full"] } diff --git a/actix-server/CHANGES.md b/actix-server/CHANGES.md index 54364edd..10f5376d 100644 --- a/actix-server/CHANGES.md +++ b/actix-server/CHANGES.md @@ -2,6 +2,9 @@ ## Unreleased - 2022-xx-xx - Minimum supported Rust version (MSRV) is now 1.59. +- Update tokio-uring to 0.4 + +[#473]: https://github.com/actix/actix-net/pull/473 ## 2.1.1 - 2022-03-09 diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index eb2152a3..dda7bbb8 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -37,7 +37,7 @@ tracing = { version = "0.1.30", default-features = false, features = ["log"] } # runtime for `io-uring` feature [target.'cfg(target_os = "linux")'.dependencies] -tokio-uring = { version = "0.3", optional = true } +tokio-uring = { version = "0.4", optional = true } [dev-dependencies] actix-codec = "0.5" From 8d964713c9defb9776ce78e5f152d2018d48fe3d Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Wed, 21 Dec 2022 20:36:26 +0000 Subject: [PATCH 17/79] fix futures-util version range --- actix-macros/Cargo.toml | 8 ++++---- actix-service/Cargo.toml | 4 ++-- actix-tls/Cargo.toml | 4 ++-- actix-utils/Cargo.toml | 4 ++-- local-channel/Cargo.toml | 6 +++--- local-waker/Cargo.toml | 2 +- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/actix-macros/Cargo.toml b/actix-macros/Cargo.toml index 75ac8b72..303568d5 100644 --- a/actix-macros/Cargo.toml +++ b/actix-macros/Cargo.toml @@ -16,12 +16,12 @@ edition = "2018" proc-macro = true [dependencies] -quote = "1.0.3" -syn = { version = "^1", features = ["full"] } +quote = "1" +syn = { version = "1", features = ["full"] } [dev-dependencies] -actix-rt = "2.0.0" +actix-rt = "2" -futures-util = { version = "0.3.7", default-features = false } +futures-util = { version = "0.3.17", default-features = false } rustversion = "1" trybuild = "1" diff --git a/actix-service/Cargo.toml b/actix-service/Cargo.toml index ccd2005e..5a0252db 100644 --- a/actix-service/Cargo.toml +++ b/actix-service/Cargo.toml @@ -17,11 +17,11 @@ name = "actix_service" path = "src/lib.rs" [dependencies] -futures-core = { version = "0.3.7", default-features = false } +futures-core = { version = "0.3.17", default-features = false } paste = "1" pin-project-lite = "0.2" [dev-dependencies] actix-rt = "2" actix-utils = "3" -futures-util = { version = "0.3.7", default-features = false } +futures-util = { version = "0.3.17", default-features = false } diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index 56591f35..9aef48c7 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -72,8 +72,8 @@ actix-codec = "0.5" actix-rt = "2.2" actix-server = "2" bytes = "1" -env_logger = "0.9" -futures-util = { version = "0.3.7", default-features = false, features = ["sink"] } +env_logger = "0.10" +futures-util = { version = "0.3.17", default-features = false, features = ["sink"] } log = "0.4" rcgen = "0.10" rustls-pemfile = "1" diff --git a/actix-utils/Cargo.toml b/actix-utils/Cargo.toml index bd3eb480..3ee199a2 100644 --- a/actix-utils/Cargo.toml +++ b/actix-utils/Cargo.toml @@ -21,6 +21,6 @@ pin-project-lite = "0.2" local-waker = "0.1" [dev-dependencies] -actix-rt = "2.0.0" -futures-util = { version = "0.3.7", default-features = false } +actix-rt = "2" +futures-util = { version = "0.3.17", default-features = false } static_assertions = "1.1" diff --git a/local-channel/Cargo.toml b/local-channel/Cargo.toml index 52d88c3a..f9424ccc 100644 --- a/local-channel/Cargo.toml +++ b/local-channel/Cargo.toml @@ -12,9 +12,9 @@ license = "MIT OR Apache-2.0" edition = "2018" [dependencies] -futures-core = { version = "0.3.7", default-features = false } -futures-sink = { version = "0.3.7", default-features = false } -futures-util = { version = "0.3.7", default-features = false } +futures-core = "0.3.17" +futures-sink = "0.3.17" +futures-util = { version = "0.3.17", default-features = false } local-waker = "0.1" [dev-dependencies] diff --git a/local-waker/Cargo.toml b/local-waker/Cargo.toml index 20ff299b..6a0b44cd 100644 --- a/local-waker/Cargo.toml +++ b/local-waker/Cargo.toml @@ -6,8 +6,8 @@ authors = [ "Nikolay Kim ", "Rob Ede ", ] -keywords = ["waker", "local", "futures", "no-std"] repository = "https://github.com/actix/actix-net.git" +keywords = ["waker", "local", "futures", "no-std"] categories = ["asynchronous", "no-std"] license = "MIT OR Apache-2.0" edition = "2018" From 05e7be337ee01f950e70f96945421598b2b63466 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Wed, 21 Dec 2022 20:37:04 +0000 Subject: [PATCH 18/79] prepare actix-rt release 2.8.0 --- actix-rt/CHANGES.md | 9 ++++++--- actix-rt/Cargo.toml | 2 +- actix-rt/README.md | 4 ++-- actix-server/Cargo.toml | 10 +++++----- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/actix-rt/CHANGES.md b/actix-rt/CHANGES.md index ad54ed8d..caa8659f 100644 --- a/actix-rt/CHANGES.md +++ b/actix-rt/CHANGES.md @@ -1,23 +1,26 @@ # Changes ## Unreleased - 2022-xx-xx + + +## 2.8.0 - 2022-12-21 - Add `#[track_caller]` attribute to `spawn` functions and methods. [#454] +- Update `tokio-uring` dependency to `0.4`. [#473] - Minimum supported Rust version (MSRV) is now 1.59. -- Update tokio-uring to 0.4 [#454]: https://github.com/actix/actix-net/pull/454 [#473]: https://github.com/actix/actix-net/pull/473 ## 2.7.0 - 2022-03-08 -- Update `tokio-uring` dependency to `0.3.0`. [#448] +- Update `tokio-uring` dependency to `0.3`. [#448] - Minimum supported Rust version (MSRV) is now 1.49. [#448]: https://github.com/actix/actix-net/pull/448 ## 2.6.0 - 2022-01-12 -- Update `tokio-uring` dependency to `0.2.0`. [#436] +- Update `tokio-uring` dependency to `0.2`. [#436] [#436]: https://github.com/actix/actix-net/pull/436 diff --git a/actix-rt/Cargo.toml b/actix-rt/Cargo.toml index 740e2e3a..46f9ec14 100644 --- a/actix-rt/Cargo.toml +++ b/actix-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-rt" -version = "2.7.0" +version = "2.8.0" authors = [ "Nikolay Kim ", "Rob Ede ", diff --git a/actix-rt/README.md b/actix-rt/README.md index e598f0b6..d4e0da89 100644 --- a/actix-rt/README.md +++ b/actix-rt/README.md @@ -3,11 +3,11 @@ > Tokio-based single-threaded async runtime for the Actix ecosystem. [![crates.io](https://img.shields.io/crates/v/actix-rt?label=latest)](https://crates.io/crates/actix-rt) -[![Documentation](https://docs.rs/actix-rt/badge.svg?version=2.7.0)](https://docs.rs/actix-rt/2.7.0) +[![Documentation](https://docs.rs/actix-rt/badge.svg?version=2.8.0)](https://docs.rs/actix-rt/2.8.0) [![Version](https://img.shields.io/badge/rustc-1.46+-ab6000.svg)](https://blog.rust-lang.org/2020/03/12/Rust-1.46.html) ![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-rt.svg)
-[![dependency status](https://deps.rs/crate/actix-rt/2.7.0/status.svg)](https://deps.rs/crate/actix-rt/2.7.0) +[![dependency status](https://deps.rs/crate/actix-rt/2.8.0/status.svg)](https://deps.rs/crate/actix-rt/2.8.0) ![Download](https://img.shields.io/crates/d/actix-rt.svg) [![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/WghFtEH6Hb) diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index dda7bbb8..7b157795 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -23,12 +23,12 @@ default = [] io-uring = ["tokio-uring", "actix-rt/io-uring"] [dependencies] -actix-rt = { version = "2.7", default-features = false } +actix-rt = { version = "2.8", default-features = false } actix-service = "2" actix-utils = "3" -futures-core = { version = "0.3.7", default-features = false, features = ["alloc"] } -futures-util = { version = "0.3.7", default-features = false, features = ["alloc"] } +futures-core = { version = "0.3.17", default-features = false, features = ["alloc"] } +futures-util = { version = "0.3.17", default-features = false, features = ["alloc"] } mio = { version = "0.8", features = ["os-poll", "net"] } num_cpus = "1.13" socket2 = "0.4.2" @@ -41,9 +41,9 @@ tokio-uring = { version = "0.4", optional = true } [dev-dependencies] actix-codec = "0.5" -actix-rt = "2.6" +actix-rt = "2.8" bytes = "1" env_logger = "0.9" -futures-util = { version = "0.3.7", default-features = false, features = ["sink", "async-await-macro"] } +futures-util = { version = "0.3.17", default-features = false, features = ["sink", "async-await-macro"] } tokio = { version = "1.13.1", features = ["io-util", "rt-multi-thread", "macros", "fs"] } From 7e47bf40552eb38f417babfeb28a9ba0850441f4 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Wed, 21 Dec 2022 20:37:51 +0000 Subject: [PATCH 19/79] prepare actix-server release 2.2.0 --- actix-server/CHANGES.md | 9 ++++++--- actix-server/Cargo.toml | 2 +- actix-server/README.md | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/actix-server/CHANGES.md b/actix-server/CHANGES.md index 10f5376d..f3919a16 100644 --- a/actix-server/CHANGES.md +++ b/actix-server/CHANGES.md @@ -1,8 +1,11 @@ # Changes ## Unreleased - 2022-xx-xx + + +## 2.2.0 - 2022-12-21 - Minimum supported Rust version (MSRV) is now 1.59. -- Update tokio-uring to 0.4 +- Update `tokio-uring` dependency to `0.4`. [#473] [#473]: https://github.com/actix/actix-net/pull/473 @@ -12,7 +15,7 @@ ## 2.1.0 - 2022-03-08 -- Update `tokio-uring` dependency to `0.3.0`. [#448] +- Update `tokio-uring` dependency to `0.3`. [#448] - Logs emitted now use the `tracing` crate with `log` compatibility. [#448] - Wait for accept thread to stop before sending completion signal. [#443] @@ -25,7 +28,7 @@ ## 2.0.0-rc.4 - 2022-01-12 -- Update `tokio-uring` dependency to `0.2.0`. [#436] +- Update `tokio-uring` dependency to `0.2`. [#436] [#436]: https://github.com/actix/actix-net/pull/436 diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index 7b157795..de3638a2 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-server" -version = "2.1.1" +version = "2.2.0" authors = [ "Nikolay Kim ", "Rob Ede ", diff --git a/actix-server/README.md b/actix-server/README.md index 8fdef1f5..9b500765 100644 --- a/actix-server/README.md +++ b/actix-server/README.md @@ -3,10 +3,10 @@ > General purpose TCP server built for the Actix ecosystem. [![crates.io](https://img.shields.io/crates/v/actix-server?label=latest)](https://crates.io/crates/actix-server) -[![Documentation](https://docs.rs/actix-server/badge.svg?version=2.1.1)](https://docs.rs/actix-server/2.1.1) +[![Documentation](https://docs.rs/actix-server/badge.svg?version=2.2.0)](https://docs.rs/actix-server/2.2.0) [![Version](https://img.shields.io/badge/rustc-1.52+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.52.0.html) ![License](https://img.shields.io/crates/l/actix-server.svg) -[![Dependency Status](https://deps.rs/crate/actix-server/2.1.1/status.svg)](https://deps.rs/crate/actix-server/2.1.1) +[![Dependency Status](https://deps.rs/crate/actix-server/2.2.0/status.svg)](https://deps.rs/crate/actix-server/2.2.0) ![Download](https://img.shields.io/crates/d/actix-server.svg) [![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x) From d7afd60606668ca411968924cf9f09ceac7841de Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Wed, 21 Dec 2022 21:17:21 +0000 Subject: [PATCH 20/79] workaround env-logger msrv --- .github/workflows/ci.yml | 7 +++++++ actix-server/Cargo.toml | 2 +- actix-tls/examples/accept-rustls.rs | 3 +-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 120c64c9..47d474ef 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,6 +76,13 @@ jobs: if: matrix.version == '1.59.0' run: cargo install cargo-hack --version=0.5.21 + - name: workaround MSRV issues + if: matrix.version == 'stable' + run: | + cargo install cargo-edit --version=0.8.0 + cargo add env_logger@0.9 --dev -p=actix-tls + cargo add env_logger@0.9 --dev -p=actix-server + - name: Generate Cargo.lock uses: actions-rs/cargo@v1 with: { command: generate-lockfile } diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index de3638a2..e23880f3 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -44,6 +44,6 @@ actix-codec = "0.5" actix-rt = "2.8" bytes = "1" -env_logger = "0.9" +env_logger = "0.10" futures-util = { version = "0.3.17", default-features = false, features = ["sink", "async-await-macro"] } tokio = { version = "1.13.1", features = ["io-util", "rt-multi-thread", "macros", "fs"] } diff --git a/actix-tls/examples/accept-rustls.rs b/actix-tls/examples/accept-rustls.rs index 6a90616d..7d964d10 100644 --- a/actix-tls/examples/accept-rustls.rs +++ b/actix-tls/examples/accept-rustls.rs @@ -41,8 +41,7 @@ use tracing::info; #[actix_rt::main] async fn main() -> io::Result<()> { - env::set_var("RUST_LOG", "info"); - env_logger::init(); + env_logger::init_from_env(env_logger::Env::default().default_filter_or("info")); // Load TLS key and cert files let cert_file = &mut BufReader::new(File::open("./examples/cert.pem").unwrap()); From d973d5974ad8fe5ee76c200ca88b91c498c47ec0 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Wed, 21 Dec 2022 23:09:16 +0000 Subject: [PATCH 21/79] fix msrv ci --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 47d474ef..a087e884 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -77,7 +77,7 @@ jobs: run: cargo install cargo-hack --version=0.5.21 - name: workaround MSRV issues - if: matrix.version == 'stable' + if: matrix.version == '1.59.0' run: | cargo install cargo-edit --version=0.8.0 cargo add env_logger@0.9 --dev -p=actix-tls From dde38bbe064e2676622316170ad2c8456a6fc8e1 Mon Sep 17 00:00:00 2001 From: Juan Aguilar Santillana Date: Mon, 2 Jan 2023 14:36:46 +0100 Subject: [PATCH 22/79] remove unnecessary Pin in poll_recv calls (#475) --- actix-rt/src/arbiter.rs | 2 +- actix-rt/src/system.rs | 2 +- actix-server/src/server.rs | 2 +- actix-server/src/signals.rs | 2 +- actix-server/src/worker.rs | 8 +++----- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/actix-rt/src/arbiter.rs b/actix-rt/src/arbiter.rs index 4c9a588e..a84e25ea 100644 --- a/actix-rt/src/arbiter.rs +++ b/actix-rt/src/arbiter.rs @@ -303,7 +303,7 @@ impl Future for ArbiterRunner { fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { // process all items currently buffered in channel loop { - match ready!(Pin::new(&mut self.rx).poll_recv(cx)) { + match ready!(self.rx.poll_recv(cx)) { // channel closed; no more messages can be received None => return Poll::Ready(()), diff --git a/actix-rt/src/system.rs b/actix-rt/src/system.rs index f3a5a4d8..d0494a22 100644 --- a/actix-rt/src/system.rs +++ b/actix-rt/src/system.rs @@ -292,7 +292,7 @@ impl Future for SystemController { fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { // process all items currently buffered in channel loop { - match ready!(Pin::new(&mut self.cmd_rx).poll_recv(cx)) { + match ready!(self.cmd_rx.poll_recv(cx)) { // channel closed; no more messages can be received None => return Poll::Ready(()), diff --git a/actix-server/src/server.rs b/actix-server/src/server.rs index a7bd5b53..7e092e2b 100644 --- a/actix-server/src/server.rs +++ b/actix-server/src/server.rs @@ -363,6 +363,6 @@ impl Stream for ServerEventMultiplexer { } } - Pin::new(&mut this.cmd_rx).poll_recv(cx) + this.cmd_rx.poll_recv(cx) } } diff --git a/actix-server/src/signals.rs b/actix-server/src/signals.rs index 6a212d83..2b01f015 100644 --- a/actix-server/src/signals.rs +++ b/actix-server/src/signals.rs @@ -96,7 +96,7 @@ impl Future for Signals { #[cfg(unix)] { for (sig, fut) in self.signals.iter_mut() { - if Pin::new(fut).poll_recv(cx).is_ready() { + if fut.poll_recv(cx).is_ready() { trace!("{} received", sig); return Poll::Ready(*sig); } diff --git a/actix-server/src/worker.rs b/actix-server/src/worker.rs index 35ba1366..2765ae4a 100644 --- a/actix-server/src/worker.rs +++ b/actix-server/src/worker.rs @@ -585,9 +585,7 @@ impl Future for ServerWorker { let this = self.as_mut().get_mut(); // `StopWorker` message handler - if let Poll::Ready(Some(Stop { graceful, tx })) = - Pin::new(&mut this.stop_rx).poll_recv(cx) - { + if let Poll::Ready(Some(Stop { graceful, tx })) = this.stop_rx.poll_recv(cx) { let num = this.counter.total(); if num == 0 { info!("shutting down idle worker"); @@ -649,7 +647,7 @@ impl Future for ServerWorker { } WorkerState::Shutdown(ref mut shutdown) => { // drop all pending connections in rx channel. - while let Poll::Ready(Some(conn)) = Pin::new(&mut this.conn_rx).poll_recv(cx) { + while let Poll::Ready(Some(conn)) = this.conn_rx.poll_recv(cx) { // WorkerCounterGuard is needed as Accept thread has incremented counter. // It's guard's job to decrement the counter together with drop of Conn. let guard = this.counter.guard(); @@ -696,7 +694,7 @@ impl Future for ServerWorker { } // handle incoming io stream - match ready!(Pin::new(&mut this.conn_rx).poll_recv(cx)) { + match ready!(this.conn_rx.poll_recv(cx)) { Some(msg) => { let guard = this.counter.guard(); let _ = this.services[msg.token].service.call((guard, msg.io)); From d13461b33749ebeee78539f01c8d4931d4433295 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Tue, 10 Jan 2023 08:56:38 +0000 Subject: [PATCH 23/79] use secure tokio version range see RUSTSEC-2023-0001 part of actix/actix-web#2962 --- actix-codec/Cargo.toml | 2 +- actix-rt/Cargo.toml | 4 ++-- actix-server/Cargo.toml | 4 ++-- actix-tls/Cargo.toml | 2 +- local-channel/Cargo.toml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/actix-codec/Cargo.toml b/actix-codec/Cargo.toml index 0b63d214..900873f2 100644 --- a/actix-codec/Cargo.toml +++ b/actix-codec/Cargo.toml @@ -23,7 +23,7 @@ futures-core = { version = "0.3.7", default-features = false } futures-sink = { version = "0.3.7", default-features = false } memchr = "2.3" pin-project-lite = "0.2" -tokio = "1.13.1" +tokio = "1.18.4" tokio-util = { version = "0.7", features = ["codec", "io"] } tracing = { version = "0.1.30", default-features = false, features = ["log"] } diff --git a/actix-rt/Cargo.toml b/actix-rt/Cargo.toml index 46f9ec14..70716888 100644 --- a/actix-rt/Cargo.toml +++ b/actix-rt/Cargo.toml @@ -26,12 +26,12 @@ io-uring = ["tokio-uring"] actix-macros = { version = "0.2.3", optional = true } futures-core = { version = "0.3", default-features = false } -tokio = { version = "1.13.1", features = ["rt", "net", "parking_lot", "signal", "sync", "time"] } +tokio = { version = "1.18.4", features = ["rt", "net", "parking_lot", "signal", "sync", "time"] } # runtime for `io-uring` feature [target.'cfg(target_os = "linux")'.dependencies] tokio-uring = { version = "0.4", optional = true } [dev-dependencies] -tokio = { version = "1.13.1", features = ["full"] } +tokio = { version = "1.18.4", features = ["full"] } hyper = { version = "0.14.10", default-features = false, features = ["server", "tcp", "http1"] } diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index e23880f3..bc0187e8 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -32,7 +32,7 @@ futures-util = { version = "0.3.17", default-features = false, features = ["allo mio = { version = "0.8", features = ["os-poll", "net"] } num_cpus = "1.13" socket2 = "0.4.2" -tokio = { version = "1.13.1", features = ["sync"] } +tokio = { version = "1.18.4", features = ["sync"] } tracing = { version = "0.1.30", default-features = false, features = ["log"] } # runtime for `io-uring` feature @@ -46,4 +46,4 @@ actix-rt = "2.8" bytes = "1" env_logger = "0.10" futures-util = { version = "0.3.17", default-features = false, features = ["sink", "async-await-macro"] } -tokio = { version = "1.13.1", features = ["io-util", "rt-multi-thread", "macros", "fs"] } +tokio = { version = "1.18.4", features = ["io-util", "rt-multi-thread", "macros", "fs"] } diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index 9aef48c7..f7df5430 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -49,7 +49,7 @@ actix-utils = "3" futures-core = { version = "0.3.7", default-features = false, features = ["alloc"] } impl-more = "0.1" pin-project-lite = "0.2.7" -tokio = "1.13.1" +tokio = "1.18.4" tokio-util = "0.7" tracing = { version = "0.1.30", default-features = false, features = ["log"] } diff --git a/local-channel/Cargo.toml b/local-channel/Cargo.toml index f9424ccc..8484577d 100644 --- a/local-channel/Cargo.toml +++ b/local-channel/Cargo.toml @@ -18,4 +18,4 @@ futures-util = { version = "0.3.17", default-features = false } local-waker = "0.1" [dev-dependencies] -tokio = { version = "1.13.1", features = ["rt", "macros"] } +tokio = { version = "1.18.4", features = ["rt", "macros"] } From 045cf3f3e8fd6a86e04dde10e096cc3b8a9dd49c Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sat, 28 Jan 2023 05:36:05 +0900 Subject: [PATCH 24/79] Upgrade GHA workflows to remove deprecation warnings (#477) --- .github/workflows/ci-master.yml | 117 ++++++++++++------------------- .github/workflows/ci.yml | 50 ++++++------- .github/workflows/clippy-fmt.yml | 39 +++++------ .github/workflows/upload-doc.yml | 22 +++--- 4 files changed, 88 insertions(+), 140 deletions(-) diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml index 29c5d8c7..d77be7b0 100644 --- a/.github/workflows/ci-master.yml +++ b/.github/workflows/ci-master.yml @@ -29,7 +29,7 @@ jobs: if: matrix.target.os == 'macos-latest' run: sudo ifconfig lo0 alias 127.0.0.3 - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 # install OpenSSL on Windows - name: Set vcpkg root @@ -43,11 +43,10 @@ jobs: run: vcpkg install openssl:x86-windows - name: Install ${{ matrix.version }} - uses: actions-rs/toolchain@v1 - with: - toolchain: ${{ matrix.version }}-${{ matrix.target.triple }} - profile: minimal - override: true + run: | + rustup set profile minimal + rustup install ${{ matrix.version }}-${{ matrix.target.triple }} + rustup override set ${{ matrix.version }}-${{ matrix.target.triple }} # - name: Install MSYS2 # if: matrix.target.triple == 'x86_64-pc-windows-gnu' @@ -59,43 +58,34 @@ jobs: # msys2 -c 'pacman --noconfirm -S base-devel pkg-config' # - name: Generate Cargo.lock - # uses: actions-rs/cargo@v1 - # with: { command: generate-lockfile } + # run: cargo generate-lockfile # - name: Cache Dependencies - # uses: Swatinem/rust-cache@v1.2.0 + # uses: Swatinem/rust-cache@v2.2.0 - name: Install cargo-hack - uses: actions-rs/cargo@v1 - with: - command: install - args: cargo-hack + run: cargo install cargo-hack - name: check lib if: > matrix.target.os != 'ubuntu-latest' && matrix.target.triple != 'x86_64-pc-windows-gnu' - uses: actions-rs/cargo@v1 - with: { command: ci-check-lib } + run: cargo ci-check-lib - name: check lib if: matrix.target.os == 'ubuntu-latest' - uses: actions-rs/cargo@v1 - with: { command: ci-check-lib-linux } + run: cargo ci-check-lib-linux - name: check lib if: matrix.target.triple == 'x86_64-pc-windows-gnu' - uses: actions-rs/cargo@v1 - with: { command: ci-check-min } - + run: cargo ci-check-min + - name: check full # TODO: compile OpenSSL and run tests on MinGW if: > matrix.target.os != 'ubuntu-latest' && matrix.target.triple != 'x86_64-pc-windows-gnu' - uses: actions-rs/cargo@v1 - with: { command: ci-check } + run: cargo ci-check - name: check all if: matrix.target.os == 'ubuntu-latest' - uses: actions-rs/cargo@v1 - with: { command: ci-check-linux } + run: cargo ci-check-linux - name: tests if: > @@ -116,21 +106,19 @@ jobs: name: coverage runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Rust (nightly) - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - profile: minimal - override: true + run: | + rustup set profile minimal + rustup install nightly + rustup override set nightly - name: Generate Cargo.lock - uses: actions-rs/cargo@v1 - with: { command: generate-lockfile } + run: cargo generate-lockfile - name: Cache Dependencies - uses: Swatinem/rust-cache@v1.3.0 - + uses: Swatinem/rust-cache@v2.2.0 + - name: Generate coverage file if: github.ref == 'refs/heads/master' run: | @@ -138,73 +126,54 @@ jobs: cargo tarpaulin --out Xml --verbose - name: Upload to Codecov if: github.ref == 'refs/heads/master' - uses: codecov/codecov-action@v1 - with: { file: cobertura.xml } + uses: codecov/codecov-action@v3 + with: { files: cobertura.xml } minimal-versions: name: minimal versions runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Rust (nightly) - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - profile: minimal - override: true + run: | + rustup set profile minimal + rustup install nightly + rustup override set nightly - name: Generate Cargo.lock - uses: actions-rs/cargo@v1 - with: { command: generate-lockfile } + run: cargo generate-lockfile - name: Cache Dependencies - uses: Swatinem/rust-cache@v1.3.0 + uses: Swatinem/rust-cache@v2.2.0 - name: Install cargo-minimal-versions - uses: actions-rs/cargo@v1 - with: - command: install - args: cargo-minimal-versions + run: cargo install cargo-minimal-versions - name: Install cargo-hack - uses: actions-rs/cargo@v1 - with: - command: install - args: cargo-hack + run: cargo install cargo-hack - name: Check With Minimal Versions - uses: actions-rs/cargo@v1 - with: - command: minimal-versions - args: check + run: cargo minimal-versions check nextest: name: nextest runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - profile: minimal - override: true + run: | + rustup set profile minimal + rustup install stable + rustup override set stable - name: Generate Cargo.lock - uses: actions-rs/cargo@v1 - with: { command: generate-lockfile } + run: cargo generate-lockfile - name: Cache Dependencies - uses: Swatinem/rust-cache@v1.3.0 + uses: Swatinem/rust-cache@v2.2.0 - name: Install cargo-nextest - uses: actions-rs/cargo@v1 - with: - command: install - args: cargo-nextest + run: cargo install cargo-nextest - name: Test with cargo-nextest - uses: actions-rs/cargo@v1 - with: - command: nextest - args: run + run: cargo nextest run diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a087e884..2434ea28 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: if: matrix.target.os == 'macos-latest' run: sudo ifconfig lo0 alias 127.0.0.3 - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 # install OpenSSL on Windows - name: Set vcpkg root @@ -46,11 +46,10 @@ jobs: run: vcpkg install openssl:x86-windows - name: Install ${{ matrix.version }} - uses: actions-rs/toolchain@v1 - with: - toolchain: ${{ matrix.version }}-${{ matrix.target.triple }} - profile: minimal - override: true + run: | + rustup set profile minimal + rustup install ${{ matrix.version }}-${{ matrix.target.triple }} + rustup override set ${{ matrix.version }}-${{ matrix.target.triple }} # - name: Install MSYS2 # if: matrix.target.triple == 'x86_64-pc-windows-gnu' @@ -62,10 +61,9 @@ jobs: # msys2 -c 'pacman --noconfirm -S base-devel pkg-config' # - name: Generate Cargo.lock - # uses: actions-rs/cargo@v1 - # with: { command: generate-lockfile } + # run: cargo generate-lockfile # - name: Cache Dependencies - # uses: Swatinem/rust-cache@v1.2.0 + # uses: Swatinem/rust-cache@v2.2.0 - name: Install cargo-hack if: matrix.version != '1.59.0' @@ -84,8 +82,7 @@ jobs: cargo add env_logger@0.9 --dev -p=actix-server - name: Generate Cargo.lock - uses: actions-rs/cargo@v1 - with: { command: generate-lockfile } + run: cargo generate-lockfile - name: workaround MSRV issues if: matrix.version != 'stable' @@ -96,28 +93,23 @@ jobs: if: > matrix.target.os != 'ubuntu-latest' && matrix.target.triple != 'x86_64-pc-windows-gnu' - uses: actions-rs/cargo@v1 - with: { command: ci-check-lib } + run: cargo ci-check-lib - name: check lib if: matrix.target.os == 'ubuntu-latest' - uses: actions-rs/cargo@v1 - with: { command: ci-check-lib-linux } + run: cargo ci-check-lib-linux - name: check lib if: matrix.target.triple == 'x86_64-pc-windows-gnu' - uses: actions-rs/cargo@v1 - with: { command: ci-check-min } + run: cargo ci-check-min - name: check full # TODO: compile OpenSSL and run tests on MinGW if: > matrix.target.os != 'ubuntu-latest' && matrix.target.triple != 'x86_64-pc-windows-gnu' - uses: actions-rs/cargo@v1 - with: { command: ci-check } + run: cargo ci-check - name: check all if: matrix.target.os == 'ubuntu-latest' - uses: actions-rs/cargo@v1 - with: { command: ci-check-linux } + run: cargo ci-check-linux - name: tests if: matrix.target.os == 'macos-latest' @@ -143,20 +135,18 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Rust (nightly) - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly-x86_64-unknown-linux-gnu - profile: minimal - override: true + run: | + rustup set profile minimal + rustup install nightly + rustup override set nightly - name: Generate Cargo.lock - uses: actions-rs/cargo@v1 - with: { command: generate-lockfile } + run: cargo generate-lockfile - name: Cache Dependencies - uses: Swatinem/rust-cache@v1.3.0 + uses: Swatinem/rust-cache@v2.2.0 - name: doc tests io-uring run: | diff --git a/.github/workflows/clippy-fmt.yml b/.github/workflows/clippy-fmt.yml index ca637beb..978a1a38 100644 --- a/.github/workflows/clippy-fmt.yml +++ b/.github/workflows/clippy-fmt.yml @@ -8,35 +8,30 @@ jobs: fmt: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - profile: minimal - components: rustfmt - override: true + run: | + rustup set profile minimal + rustup install stable + rustup override set stable + rustup component add rustfmt - name: Rustfmt Check - uses: actions-rs/cargo@v1 - with: - command: fmt - args: --all -- --check + run: cargo fmt --all -- --check clippy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Rust - uses: actions-rs/toolchain@v1 + run: | + rustup set profile minimal + rustup install stable + rustup override set stable + rustup component add clippy + - uses: giraffate/clippy-action@v1 with: - toolchain: stable - profile: minimal - components: clippy - override: true - - name: Clippy Check - uses: actions-rs/clippy-check@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - args: --workspace --all-features --tests --examples --bins -- -Dclippy::todo + reporter: "github-pr-check" + github_token: ${{ secrets.GITHUB_TOKEN }} + clippy_flags: --workspace --all-features --tests --examples --bins -- -Dclippy::todo diff --git a/.github/workflows/upload-doc.yml b/.github/workflows/upload-doc.yml index 36044230..a4f3928d 100644 --- a/.github/workflows/upload-doc.yml +++ b/.github/workflows/upload-doc.yml @@ -9,27 +9,21 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly-x86_64-unknown-linux-gnu - profile: minimal - override: true + run: | + rustup set profile minimal + rustup install nightly + rustup override set nightly - name: Build Docs - uses: actions-rs/cargo@v1 - with: - command: doc - args: --workspace --all-features --no-deps + run: cargo doc --workspace --all-features --no-deps - name: Tweak HTML run: echo '' > target/doc/index.html - name: Deploy to GitHub Pages - uses: JamesIves/github-pages-deploy-action@3.7.1 + uses: JamesIves/github-pages-deploy-action@v4 with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - BRANCH: gh-pages - FOLDER: target/doc + folder: target/doc From 878d3a1c748a4c287dfe0c02eb8ea84ac4c1af5c Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 26 Feb 2023 16:24:48 +0000 Subject: [PATCH 25/79] impl AsRef --- bytestring/CHANGES.md | 1 + bytestring/src/lib.rs | 56 ++++++++++++++++++++++++++++++------------- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/bytestring/CHANGES.md b/bytestring/CHANGES.md index 120f5a0e..826ff3b8 100644 --- a/bytestring/CHANGES.md +++ b/bytestring/CHANGES.md @@ -1,6 +1,7 @@ # Changes ## Unreleased - 2022-xx-xx +- Implement `AsRef` for `ByteString`. - Minimum supported Rust version (MSRV) is now 1.59. diff --git a/bytestring/src/lib.rs b/bytestring/src/lib.rs index 7058c106..d75a05f5 100644 --- a/bytestring/src/lib.rs +++ b/bytestring/src/lib.rs @@ -51,22 +51,26 @@ impl ByteString { Self(src) } - /// Returns a byte string that is equivalent to the given `subset`. + /// Returns a new byte string that is equivalent to the given `subset`. /// /// When processing a `ByteString` buffer with other tools, one often gets a `&str` which is in - /// fact a slice of the `ByteString`; i.e., a subset of it. This function turns that `&str` into - /// another `ByteString`, as if one had sliced the `ByteString` with the offsets that correspond - /// to `subset`. + /// fact a slice of the original `ByteString`; i.e., a subset of it. This function turns that + /// `&str` into another `ByteString`, as if one had sliced the `ByteString` with the offsets + /// that correspond to `subset`. /// /// Corresponds to [`Bytes::slice_ref`]. /// /// This operation is `O(1)`. /// /// # Panics - /// Requires that the given `subset` str is in fact contained within the `ByteString` buffer; - /// otherwise this function will panic. + /// + /// Panics if `subset` is not a sub-slice of this byte string. + /// + /// Note that strings which are only subsets from an equality perspective do not uphold this + /// requirement; see examples. /// /// # Examples + /// /// ``` /// # use bytestring::ByteString; /// let string = ByteString::from_static(" foo "); @@ -74,6 +78,13 @@ impl ByteString { /// let substring = string.slice_ref(subset); /// assert_eq!(substring, "foo"); /// ``` + /// + /// ```should_panic + /// # use bytestring::ByteString; + /// // panics because the given slice is not derived from the original byte string, despite + /// // being a logical subset of the string + /// ByteString::from_static("foo bar").slice_ref("foo"); + /// ``` pub fn slice_ref(&self, subset: &str) -> Self { Self(self.0.slice_ref(subset.as_bytes())) } @@ -91,6 +102,12 @@ impl> PartialEq for ByteString { } } +impl AsRef for ByteString { + fn as_ref(&self) -> &ByteString { + self + } +} + impl AsRef<[u8]> for ByteString { fn as_ref(&self) -> &[u8] { self.0.as_ref() @@ -276,7 +293,10 @@ mod serde { #[cfg(test)] mod test { use alloc::borrow::ToOwned; - use core::hash::{Hash, Hasher}; + use core::{ + hash::{Hash, Hasher}, + panic::{RefUnwindSafe, UnwindSafe}, + }; use ahash::AHasher; use static_assertions::assert_impl_all; @@ -286,16 +306,7 @@ mod test { assert_impl_all!(ByteString: Send, Sync, Unpin, Sized); assert_impl_all!(ByteString: Clone, Default, Eq, PartialOrd, Ord); assert_impl_all!(ByteString: fmt::Debug, fmt::Display); - - #[rustversion::since(1.56)] - mod above_1_56_impls { - // `[Ref]UnwindSafe` traits were only in std until rust 1.56 - - use core::panic::{RefUnwindSafe, UnwindSafe}; - - use super::*; - assert_impl_all!(ByteString: UnwindSafe, RefUnwindSafe); - } + assert_impl_all!(ByteString: UnwindSafe, RefUnwindSafe); #[test] fn test_partial_eq() { @@ -377,9 +388,20 @@ mod test { assert_eq!(s, r#""nice bytes""#); } + #[test] + fn slice_ref() { + let string = ByteString::from_static(" foo "); + let subset = string.trim(); + // subset is derived from original byte string + let substring = string.slice_ref(subset); + assert_eq!(substring, "foo"); + } + #[test] #[should_panic] fn test_slice_ref_catches_not_a_subset() { + // panics because the given slice is not derived from the original byte string, despite + // being a logical subset of the string ByteString::from_static("foo bar").slice_ref("foo"); } } From 9b388a83c91111b28c41a95329b3e31dce056dae Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 26 Feb 2023 16:26:19 +0000 Subject: [PATCH 26/79] reinstate actix-macros trybuild tests --- actix-macros/tests/trybuild.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actix-macros/tests/trybuild.rs b/actix-macros/tests/trybuild.rs index 2af99636..666769df 100644 --- a/actix-macros/tests/trybuild.rs +++ b/actix-macros/tests/trybuild.rs @@ -1,4 +1,4 @@ -#[rustversion::stable(1.46)] // MSRV +#[rustversion::stable(1.59)] // MSRV #[test] fn compile_macros() { let t = trybuild::TestCases::new(); From fbb53f54efc89cd116c1c24f9c7f776cfecdf90f Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Fri, 3 Mar 2023 22:36:13 +0000 Subject: [PATCH 27/79] format changelogs with prettier --- CODE_OF_CONDUCT.md | 22 ++++----- README.md | 2 +- actix-codec/CHANGES.md | 33 +++++++------- actix-macros/CHANGES.md | 15 +++--- actix-rt/CHANGES.md | 71 ++++++++++++++--------------- actix-server/CHANGES.md | 98 +++++++++++++++++++--------------------- actix-service/CHANGES.md | 92 ++++++++++++++++++------------------- actix-tls/CHANGES.md | 63 +++++++++++++------------- actix-tracing/CHANGES.md | 3 +- actix-utils/CHANGES.md | 79 ++++++++++++++++---------------- bytestring/CHANGES.md | 21 +++++---- local-channel/CHANGES.md | 7 +-- local-waker/CHANGES.md | 7 +-- 13 files changed, 255 insertions(+), 258 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index ae97b324..9628fb82 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -8,19 +8,19 @@ In the interest of fostering an open and welcoming environment, we as contributo Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities @@ -39,7 +39,7 @@ Instances of abusive, harassing, or otherwise unacceptable behavior may be repor Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. [@robjtede]: https://github.com/robjtede -[@JohnTitor]: https://github.com/JohnTitor +[@johntitor]: https://github.com/JohnTitor ## Attribution diff --git a/README.md b/README.md index 0e122cc4..30fb2091 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ See example folders for [`actix-server`](./actix-server/examples) and [`actix-tl ## MSRV -Most crates in this repo's have a Minimum Supported Rust Version (MSRV) of 1.49.0. Only `actix-tls` and `actix-server` have MSRV of 1.54.0. As a policy, we permit MSRV increases in non-breaking releases. +Crates in this repo currently have a Minimum Supported Rust Version (MSRV) of 1.59. As a policy, we permit MSRV increases in non-breaking releases. ## License diff --git a/actix-codec/CHANGES.md b/actix-codec/CHANGES.md index 16246be0..50861701 100644 --- a/actix-codec/CHANGES.md +++ b/actix-codec/CHANGES.md @@ -1,39 +1,40 @@ # Changes ## Unreleased - 2022-xx-xx + - Minimum supported Rust version (MSRV) is now 1.59. - ## 0.5.1 - 2022-03-15 + - Logs emitted now use the `tracing` crate with `log` compatibility. [#451] - Minimum supported Rust version (MSRV) is now 1.49. [#451]: https://github.com/actix/actix-net/pull/451 - ## 0.5.0 - 2022-02-15 + - Updated `tokio-util` dependency to `0.7.0`. [#446] [#446]: https://github.com/actix/actix-net/pull/446 - ## 0.4.2 - 2021-12-31 + - No significant changes since `0.4.1`. - ## 0.4.1 - 2021-11-05 + - Added `LinesCodec.` [#338] - `Framed::poll_ready` flushes when the buffer is full. [#409] [#338]: https://github.com/actix/actix-net/pull/338 [#409]: https://github.com/actix/actix-net/pull/409 - ## 0.4.0 - 2021-04-20 + - No significant changes since v0.4.0-beta.1. - ## 0.4.0-beta.1 - 2020-12-28 + - Replace `pin-project` with `pin-project-lite`. [#237] - Upgrade `tokio` dependency to `1`. [#237] - Upgrade `tokio-util` dependency to `0.6`. [#237] @@ -41,16 +42,16 @@ [#237]: https://github.com/actix/actix-net/pull/237 - ## 0.3.0 - 2020-08-23 + - No changes from beta 2. - ## 0.3.0-beta.2 - 2020-08-19 + - Remove unused type parameter from `Framed::replace_codec`. - ## 0.3.0-beta.1 - 2020-08-19 + - Use `.advance()` instead of `.split_to()`. - Upgrade `tokio-util` to `0.3`. - Improve `BytesCodec::encode()` performance. @@ -59,31 +60,31 @@ - Add method on `Framed` to get a pinned reference to the underlying I/O. - Add method on `Framed` check emptiness of read buffer. - ## 0.2.0 - 2019-12-10 + - Use specific futures dependencies. - ## 0.2.0-alpha.4 + - Fix buffer remaining capacity calculation. - ## 0.2.0-alpha.3 + - Use tokio 0.2. - Fix low/high watermark for write/read buffers. - ## 0.2.0-alpha.2 + - Migrated to `std::future`. - ## 0.1.2 - 2019-03-27 + - Added `Framed::map_io()` method. - ## 0.1.1 - 2019-03-06 + - Added `FramedParts::with_read_buffer()` method. - ## 0.1.0 - 2018-12-09 + - Move codec to separate crate. diff --git a/actix-macros/CHANGES.md b/actix-macros/CHANGES.md index a319f8c3..bb75cb47 100644 --- a/actix-macros/CHANGES.md +++ b/actix-macros/CHANGES.md @@ -1,47 +1,48 @@ # Changes ## Unreleased - 2022-xx-xx + - Minimum supported Rust version (MSRV) is now 1.59. - ## 0.2.3 - 2021-10-19 + - Fix test macro in presence of other imports named "test". [#399] [#399]: https://github.com/actix/actix-net/pull/399 - ## 0.2.2 - 2021-10-14 + - Improve error recovery potential when macro input is invalid. [#391] - Allow custom `System`s on test macro. [#391] [#391]: https://github.com/actix/actix-net/pull/391 - ## 0.2.1 - 2021-02-02 + - Add optional argument `system` to `main` macro which can be used to specify the path to `actix_rt::System` (useful for re-exports). [#363] [#363]: https://github.com/actix/actix-net/pull/363 - ## 0.2.0 - 2021-02-02 + - Update to latest `actix_rt::System::new` signature. [#261] [#261]: https://github.com/actix/actix-net/pull/261 - ## 0.2.0-beta.1 - 2021-01-09 + - Remove `actix-reexport` feature. [#218] [#218]: https://github.com/actix/actix-net/pull/218 - ## 0.1.3 - 2020-12-03 + - Add `actix-reexport` feature. [#218] [#218]: https://github.com/actix/actix-net/pull/218 - ## 0.1.2 - 2020-05-18 + - Forward actix_rt::test arguments to test function [#127] [#127]: https://github.com/actix/actix-net/pull/127 diff --git a/actix-rt/CHANGES.md b/actix-rt/CHANGES.md index caa8659f..2d7a4da6 100644 --- a/actix-rt/CHANGES.md +++ b/actix-rt/CHANGES.md @@ -2,8 +2,8 @@ ## Unreleased - 2022-xx-xx - ## 2.8.0 - 2022-12-21 + - Add `#[track_caller]` attribute to `spawn` functions and methods. [#454] - Update `tokio-uring` dependency to `0.4`. [#473] - Minimum supported Rust version (MSRV) is now 1.59. @@ -11,86 +11,85 @@ [#454]: https://github.com/actix/actix-net/pull/454 [#473]: https://github.com/actix/actix-net/pull/473 - ## 2.7.0 - 2022-03-08 + - Update `tokio-uring` dependency to `0.3`. [#448] - Minimum supported Rust version (MSRV) is now 1.49. [#448]: https://github.com/actix/actix-net/pull/448 - ## 2.6.0 - 2022-01-12 + - Update `tokio-uring` dependency to `0.2`. [#436] [#436]: https://github.com/actix/actix-net/pull/436 - ## 2.5.1 - 2021-12-31 + - Expose `System::with_tokio_rt` and `Arbiter::with_tokio_rt`. [#430] [#430]: https://github.com/actix/actix-net/pull/430 - ## 2.5.0 - 2021-11-22 + - Add `System::run_with_code` to allow retrieving the exit code on stop. [#411] [#411]: https://github.com/actix/actix-net/pull/411 - ## 2.4.0 - 2021-11-05 + - Add `Arbiter::try_current` for situations where thread may or may not have Arbiter context. [#408] - Start io-uring with `System::new` when feature is enabled. [#395] [#395]: https://github.com/actix/actix-net/pull/395 [#408]: https://github.com/actix/actix-net/pull/408 - ## 2.3.0 - 2021-10-11 + - The `spawn` method can now resolve with non-unit outputs. [#369] - Add experimental (semver-exempt) `io-uring` feature for enabling async file I/O on linux. [#374] [#369]: https://github.com/actix/actix-net/pull/369 [#374]: https://github.com/actix/actix-net/pull/374 - ## 2.2.0 - 2021-03-29 -- **BREAKING** `ActixStream::{poll_read_ready, poll_write_ready}` methods now return - `Ready` object in ok variant. [#293] - * Breakage is acceptable since `ActixStream` was not intended to be public. + +- **BREAKING** `ActixStream::{poll_read_ready, poll_write_ready}` methods now return `Ready` object in ok variant. [#293] + - Breakage is acceptable since `ActixStream` was not intended to be public. [#293]: https://github.com/actix/actix-net/pull/293 - ## 2.1.0 - 2021-02-24 + - Add `ActixStream` extension trait to include readiness methods. [#276] - Re-export `tokio::net::TcpSocket` in `net` module [#282] [#276]: https://github.com/actix/actix-net/pull/276 [#282]: https://github.com/actix/actix-net/pull/282 - ## 2.0.2 - 2021-02-06 + - Add `Arbiter::handle` to get a handle of an owned Arbiter. [#274] - Add `System::try_current` for situations where actix may or may not be running a System. [#275] [#274]: https://github.com/actix/actix-net/pull/274 [#275]: https://github.com/actix/actix-net/pull/275 - ## 2.0.1 - 2021-02-06 + - Expose `JoinError` from Tokio. [#271] [#271]: https://github.com/actix/actix-net/pull/271 - ## 2.0.0 - 2021-02-02 + - Remove all Arbiter-local storage methods. [#262] - Re-export `tokio::pin`. [#262] [#262]: https://github.com/actix/actix-net/pull/262 - ## 2.0.0-beta.3 - 2021-01-31 + - Remove `run_in_tokio`, `attach_to_tokio` and `AsyncSystemRunner`. [#253] - Return `JoinHandle` from `actix_rt::spawn`. [#253] - Remove old `Arbiter::spawn`. Implementation is now inlined into `actix_rt::spawn`. [#253] @@ -113,21 +112,20 @@ [#256]: https://github.com/actix/actix-net/pull/256 [#257]: https://github.com/actix/actix-net/pull/257 - ## 2.0.0-beta.2 - 2021-01-09 + - Add `task` mod with re-export of `tokio::task::{spawn_blocking, yield_now, JoinHandle}` [#245] - Add default "macros" feature to allow faster compile times when using `default-features=false`. [#245]: https://github.com/actix/actix-net/pull/245 - ## 2.0.0-beta.1 - 2020-12-28 + - Add `System::attach_to_tokio` method. [#173] - Update `tokio` dependency to `1.0`. [#236] -- Rename `time` module `delay_for` to `sleep`, `delay_until` to `sleep_until`, `Delay` to `Sleep` - to stay aligned with Tokio's naming. [#236] +- Rename `time` module `delay_for` to `sleep`, `delay_until` to `sleep_until`, `Delay` to `Sleep` to stay aligned with Tokio's naming. [#236] - Remove `'static` lifetime requirement for `Runtime::block_on` and `SystemRunner::block_on`. - * These methods now accept `&self` when calling. [#236] + - These methods now accept `&self` when calling. [#236] - Remove `'static` lifetime requirement for `System::run` and `Builder::run`. [#236] - `Arbiter::spawn` now panics when `System` is not in scope. [#207] - Fix work load issue by removing `PENDING` thread local. [#207] @@ -135,74 +133,73 @@ [#207]: https://github.com/actix/actix-net/pull/207 [#236]: https://github.com/actix/actix-net/pull/236 - ## 1.1.1 - 2020-04-30 + - Fix memory leak due to [#94] (see [#129] for more detail) [#129]: https://github.com/actix/actix-net/issues/129 - ## 1.1.0 - 2020-04-08 _(YANKED)_ + - Expose `System::is_set` to check if current system has ben started [#99] - Add `Arbiter::is_running` to check if event loop is running [#124] -- Add `Arbiter::local_join` associated function - to get be able to `await` for spawned futures [#94] +- Add `Arbiter::local_join` associated function to get be able to `await` for spawned futures [#94] [#94]: https://github.com/actix/actix-net/pull/94 [#99]: https://github.com/actix/actix-net/pull/99 [#124]: https://github.com/actix/actix-net/pull/124 - ## 1.0.0 - 2019-12-11 + - Update dependencies - ## 1.0.0-alpha.3 - 2019-12-07 + - Migrate to tokio 0.2 - Fix compilation on non-unix platforms - ## 1.0.0-alpha.2 - 2019-12-02 + - Export `main` and `test` attribute macros - Export `time` module (re-export of tokio-timer) - Export `net` module (re-export of tokio-net) - ## 1.0.0-alpha.1 - 2019-11-22 + - Migrate to std::future and tokio 0.2 - ## 0.2.6 - 2019-11-14 + - Allow to join arbiter's thread. #60 - Fix arbiter's thread panic message. - ## 0.2.5 - 2019-09-02 + - Add arbiter specific storage - ## 0.2.4 - 2019-07-17 + - Avoid a copy of the Future when initializing the Box. #29 - ## 0.2.3 - 2019-06-22 + - Allow to start System using existing CurrentThread Handle #22 - ## 0.2.2 - 2019-03-28 + - Moved `blocking` module to `actix-threadpool` crate - ## 0.2.1 - 2019-03-11 + - Added `blocking` module - Added `Arbiter::exec_fn` - execute fn on the arbiter's thread - Added `Arbiter::exec` - execute fn on the arbiter's thread and wait result - ## 0.2.0 - 2019-03-06 + - `run` method returns `io::Result<()>` - Removed `Handle` - ## 0.1.0 - 2018-12-09 + - Initial release diff --git a/actix-server/CHANGES.md b/actix-server/CHANGES.md index f3919a16..cde39f7f 100644 --- a/actix-server/CHANGES.md +++ b/actix-server/CHANGES.md @@ -2,19 +2,19 @@ ## Unreleased - 2022-xx-xx - ## 2.2.0 - 2022-12-21 + - Minimum supported Rust version (MSRV) is now 1.59. - Update `tokio-uring` dependency to `0.4`. [#473] [#473]: https://github.com/actix/actix-net/pull/473 - ## 2.1.1 - 2022-03-09 + - No significant changes since `2.1.0`. - ## 2.1.0 - 2022-03-08 + - Update `tokio-uring` dependency to `0.3`. [#448] - Logs emitted now use the `tracing` crate with `log` compatibility. [#448] - Wait for accept thread to stop before sending completion signal. [#443] @@ -22,48 +22,48 @@ [#443]: https://github.com/actix/actix-net/pull/443 [#448]: https://github.com/actix/actix-net/pull/448 - ## 2.0.0 - 2022-01-19 + - No significant changes since `2.0.0-rc.4`. - ## 2.0.0-rc.4 - 2022-01-12 + - Update `tokio-uring` dependency to `0.2`. [#436] [#436]: https://github.com/actix/actix-net/pull/436 - ## 2.0.0-rc.3 - 2021-12-31 + - No significant changes since `2.0.0-rc.2`. - ## 2.0.0-rc.2 - 2021-12-27 + - Simplify `TestServer`. [#431] [#431]: https://github.com/actix/actix-net/pull/431 - ## 2.0.0-rc.1 - 2021-12-05 + - Hide implementation details of `Server`. [#424] - `Server` now runs only after awaiting it. [#425] [#424]: https://github.com/actix/actix-net/pull/424 [#425]: https://github.com/actix/actix-net/pull/425 - ## 2.0.0-beta.9 - 2021-11-15 + - Restore `Arbiter` support lost in `beta.8`. [#417] [#417]: https://github.com/actix/actix-net/pull/417 - ## 2.0.0-beta.8 - 2021-11-05 _(YANKED)_ + - Fix non-unix signal handler. [#410] [#410]: https://github.com/actix/actix-net/pull/410 - ## 2.0.0-beta.7 - 2021-11-05 _(YANKED)_ + - Server can be started in regular Tokio runtime. [#408] - Expose new `Server` type whose `Future` impl resolves when server stops. [#408] - Rename `Server` to `ServerHandle`. [#407] @@ -75,34 +75,31 @@ [#407]: https://github.com/actix/actix-net/pull/407 [#408]: https://github.com/actix/actix-net/pull/408 - ## 2.0.0-beta.6 - 2021-10-11 + - Add experimental (semver-exempt) `io-uring` feature for enabling async file I/O on linux. [#374] -- Server no long listens to `SIGHUP` signal. Previously, the received was not used but did block - subsequent exit signals from working. [#389] -- Remove `config` module. `ServiceConfig`, `ServiceRuntime` public types are removed due to - this change. [#349] +- Server no long listens to `SIGHUP` signal. Previously, the received was not used but did block subsequent exit signals from working. [#389] +- Remove `config` module. `ServiceConfig`, `ServiceRuntime` public types are removed due to this change. [#349] - Remove `ServerBuilder::configure` [#349] [#374]: https://github.com/actix/actix-net/pull/374 [#349]: https://github.com/actix/actix-net/pull/349 [#389]: https://github.com/actix/actix-net/pull/389 - ## 2.0.0-beta.5 - 2021-04-20 -- Server shutdown notifies all workers to exit regardless if shutdown is graceful. This causes all - workers to shutdown immediately in force shutdown case. [#333] + +- Server shutdown notifies all workers to exit regardless if shutdown is graceful. This causes all workers to shutdown immediately in force shutdown case. [#333] [#333]: https://github.com/actix/actix-net/pull/333 - ## 2.0.0-beta.4 - 2021-04-01 + - Prevent panic when `shutdown_timeout` is very large. [f9262db] [f9262db]: https://github.com/actix/actix-net/commit/f9262db - ## 2.0.0-beta.3 - 2021-02-06 + - Hidden `ServerBuilder::start` method has been removed. Use `ServerBuilder::run`. [#246] - Add retry for EINTR signal (`io::Interrupted`) in `Accept`'s poll loop. [#264] - Add `ServerBuilder::worker_max_blocking_threads` to customize blocking thread pool size. [#265] @@ -113,149 +110,148 @@ [#265]: https://github.com/actix/actix-net/pull/265 [#273]: https://github.com/actix/actix-net/pull/273 - ## 2.0.0-beta.2 - 2021-01-03 + - Merge `actix-testing` to `actix-server` as `test_server` mod. [#242] [#242]: https://github.com/actix/actix-net/pull/242 - ## 2.0.0-beta.1 - 2020-12-28 + - Added explicit info log message on accept queue pause. [#215] - Prevent double registration of sockets when back-pressure is resolved. [#223] - Update `mio` dependency to `0.7.3`. [#239] - Remove `socket2` dependency. [#239] - `ServerBuilder::backlog` now accepts `u32` instead of `i32`. [#239] - Remove `AcceptNotify` type and pass `WakerQueue` to `Worker` to wake up `Accept`'s `Poll`. [#239] -- Convert `mio::net::TcpStream` to `actix_rt::net::TcpStream`(`UnixStream` for uds) using - `FromRawFd` and `IntoRawFd`(`FromRawSocket` and `IntoRawSocket` on windows). [#239] +- Convert `mio::net::TcpStream` to `actix_rt::net::TcpStream`(`UnixStream` for uds) using `FromRawFd` and `IntoRawFd`(`FromRawSocket` and `IntoRawSocket` on windows). [#239] - Remove `AsyncRead` and `AsyncWrite` trait bound for `socket::FromStream` trait. [#239] [#215]: https://github.com/actix/actix-net/pull/215 [#223]: https://github.com/actix/actix-net/pull/223 [#239]: https://github.com/actix/actix-net/pull/239 - ## 1.0.4 - 2020-09-12 + - Update actix-codec to 0.3.0. - Workers must be greater than 0. [#167] [#167]: https://github.com/actix/actix-net/pull/167 - ## 1.0.3 - 2020-05-19 + - Replace deprecated `net2` crate with `socket2` [#140] [#140]: https://github.com/actix/actix-net/pull/140 - ## 1.0.2 - 2020-02-26 + - Avoid error by calling `reregister()` on Windows [#103] [#103]: https://github.com/actix/actix-net/pull/103 - ## 1.0.1 - 2019-12-29 + - Rename `.start()` method to `.run()` - ## 1.0.0 - 2019-12-11 + - Use actix-net releases - ## 1.0.0-alpha.4 - 2019-12-08 + - Use actix-service 1.0.0-alpha.4 - ## 1.0.0-alpha.3 - 2019-12-07 + - Migrate to tokio 0.2 - Fix compilation on non-unix platforms - Better handling server configuration - ## 1.0.0-alpha.2 - 2019-12-02 + - Simplify server service (remove actix-server-config) - Allow to wait on `Server` until server stops - ## 0.8.0-alpha.1 - 2019-11-22 + - Migrate to `std::future` - ## 0.7.0 - 2019-10-04 + - Update `rustls` to 0.16 - Minimum required Rust version upped to 1.37.0 - ## 0.6.1 - 2019-09-25 + - Add UDS listening support to `ServerBuilder` - ## 0.6.0 - 2019-07-18 + - Support Unix domain sockets #3 - ## 0.5.1 - 2019-05-18 + - ServerBuilder::shutdown_timeout() accepts u64 - ## 0.5.0 - 2019-05-12 + - Add `Debug` impl for `SslError` - Derive debug for `Server` and `ServerCommand` - Upgrade to actix-service 0.4 - ## 0.4.3 - 2019-04-16 + - Re-export `IoStream` trait - Depend on `ssl` and `rust-tls` features from actix-server-config - ## 0.4.2 - 2019-03-30 + - Fix SIGINT force shutdown - ## 0.4.1 - 2019-03-14 + - `SystemRuntime::on_start()` - allow to run future before server service initialization - ## 0.4.0 - 2019-03-12 + - Use `ServerConfig` for service factory - Wrap tcp socket to `Io` type - Upgrade actix-service - ## 0.3.1 - 2019-03-04 + - Add `ServerBuilder::maxconnrate` sets the maximum per-worker number of concurrent connections - Add helper ssl error `SslError` - Rename `StreamServiceFactory` to `ServiceFactory` - Deprecate `StreamServiceFactory` - ## 0.3.0 - 2019-03-02 + - Use new `NewService` trait - ## 0.2.1 - 2019-02-09 + - Drop service response - ## 0.2.0 - 2019-02-01 + - Migrate to actix-service 0.2 - Updated rustls dependency - ## 0.1.3 - 2018-12-21 + - Fix max concurrent connections handling - ## 0.1.2 - 2018-12-12 + - rename ServiceConfig::rt() to ServiceConfig::apply() - Fix back-pressure for concurrent ssl handshakes - ## 0.1.1 - 2018-12-11 + - Fix signal handling on windows - ## 0.1.0 - 2018-12-09 + - Move server to separate crate diff --git a/actix-service/CHANGES.md b/actix-service/CHANGES.md index bd828c49..b67a231f 100644 --- a/actix-service/CHANGES.md +++ b/actix-service/CHANGES.md @@ -1,36 +1,37 @@ # Changes ## Unreleased - 2022-xx-xx + - Minimum supported Rust version (MSRV) is now 1.59. - ## 2.0.2 - 2021-12-18 + - Service types can now be `Send` and `'static` regardless of request, response, and config types, etc. [#397] [#397]: https://github.com/actix/actix-net/pull/397 - ## 2.0.1 - 2021-10-11 + - Documentation fix. [#388] [#388]: https://github.com/actix/actix-net/pull/388 - ## 2.0.0 - 2021-04-16 + - Removed pipeline and related structs/functions. [#335] [#335]: https://github.com/actix/actix-net/pull/335 - ## 2.0.0-beta.5 - 2021-03-15 + - Add default `Service` trait impl for `Rc` and `&S: Service`. [#288] - Add `boxed::rc_service` function for constructing `boxed::RcService` type [#290] [#288]: https://github.com/actix/actix-net/pull/288 [#290]: https://github.com/actix/actix-net/pull/290 - ## 2.0.0-beta.4 - 2021-02-04 + - `Service::poll_ready` and `Service::call` receive `&self`. [#247] - `apply_fn` and `apply_fn_factory` now receive `Fn(Req, &Service)` function type. [#247] - `apply_cfg` and `apply_cfg_factory` now receive `Fn(Req, &Service)` function type. [#247] @@ -38,158 +39,153 @@ [#247]: https://github.com/actix/actix-net/pull/247 - ## 2.0.0-beta.3 - 2021-01-09 + - The `forward_ready!` macro converts errors. [#246] [#246]: https://github.com/actix/actix-net/pull/246 - ## 2.0.0-beta.2 - 2021-01-03 + - Remove redundant type parameter from `map_config`. - ## 2.0.0-beta.1 - 2020-12-28 -- `Service`, other traits, and many type signatures now take the the request type as a type - parameter instead of an associated type. [#232] + +- `Service`, other traits, and many type signatures now take the the request type as a type parameter instead of an associated type. [#232] - Add `always_ready!` and `forward_ready!` macros. [#233] - Crate is now `no_std`. [#233] - Migrate pin projections to `pin-project-lite`. [#233] -- Remove `AndThenApplyFn` and Pipeline `and_then_apply_fn`. Use the - `.and_then(apply_fn(...))` construction. [#233] +- Remove `AndThenApplyFn` and Pipeline `and_then_apply_fn`. Use the `.and_then(apply_fn(...))` construction. [#233] - Move non-vital methods to `ServiceExt` and `ServiceFactoryExt` extension traits. [#235] [#232]: https://github.com/actix/actix-net/pull/232 [#233]: https://github.com/actix/actix-net/pull/233 [#235]: https://github.com/actix/actix-net/pull/235 - ## 1.0.6 - 2020-08-09 -- Removed unsound custom Cell implementation that allowed obtaining several mutable references to - the same data, which is undefined behavior in Rust and could lead to violations of memory safety. External code could obtain several mutable references to the same data through - service combinators. Attempts to acquire several mutable references to the same data will instead - result in a panic. +- Removed unsound custom Cell implementation that allowed obtaining several mutable references to the same data, which is undefined behavior in Rust and could lead to violations of memory safety. External code could obtain several mutable references to the same data through service combinators. Attempts to acquire several mutable references to the same data will instead result in a panic. ## 1.0.5 - 2020-01-16 + - Fixed unsoundness in .and_then()/.then() service combinators. - ## 1.0.4 - 2020-01-15 + - Revert 1.0.3 change - ## 1.0.3 - 2020-01-15 + - Fixed unsoundness in `AndThenService` impl. - ## 1.0.2 - 2020-01-08 + - Add `into_service` helper function. - ## 1.0.1 - 2019-12-22 + - `map_config()` and `unit_config()` now accept `IntoServiceFactory` type. - ## 1.0.0 - 2019-12-11 + - Add Clone impl for Apply service - ## 1.0.0-alpha.4 - 2019-12-08 + - Renamed `service_fn` to `fn_service` - Renamed `factory_fn` to `fn_factory` - Renamed `factory_fn_cfg` to `fn_factory_with_config` - ## 1.0.0-alpha.3 - 2019-12-06 + - Add missing Clone impls - Restore `Transform::map_init_err()` combinator - Restore `Service/Factory::apply_fn()` in form of `Pipeline/Factory::and_then_apply_fn()` - Optimize service combinators and futures memory layout - ## 1.0.0-alpha.2 - 2019-12-02 + - Use owned config value for service factory - Renamed BoxedNewService/BoxedService to BoxServiceFactory/BoxService - ## 1.0.0-alpha.1 - 2019-11-25 + - Migrated to `std::future` - `NewService` renamed to `ServiceFactory` - Added `pipeline` and `pipeline_factory` function - ## 0.4.2 - 2019-08-27 + - Check service readiness for `new_apply_cfg` combinator - ## 0.4.1 - 2019-06-06 + - Add `new_apply_cfg` function - ## 0.4.0 - 2019-05-12 + - Add `NewService::map_config` and `NewService::unit_config` combinators. - Use associated type for `NewService` config. - Change `apply_cfg` function. - Renamed helper functions. - ## 0.3.6 - 2019-04-07 + - Poll boxed service call result immediately - ## 0.3.5 - 2019-03-29 + - Add `impl Service for Rc>`. - ## 0.3.4 - 2019-03-12 + - Add `Transform::from_err()` combinator - Add `apply_fn` helper - Add `apply_fn_factory` helper - Add `apply_transform` helper - Add `apply_cfg` helper - ## 0.3.3 - 2019-03-09 + - Add `ApplyTransform` new service for transform and new service. - Add `NewService::apply_cfg()` combinator, allows to use nested `NewService` with different config parameter. - Revert IntoFuture change - ## 0.3.2 - 2019-03-04 + - Change `NewService::Future` and `Transform::Future` to the `IntoFuture` trait. - Export `AndThenTransform` type - ## 0.3.1 - 2019-03-04 + - Simplify Transform trait - ## 0.3.0 - 2019-03-02 + - Added boxed NewService and Service. - Added `Config` parameter to `NewService` trait. - Added `Config` parameter to `NewTransform` trait. - ## 0.2.2 - 2019-02-19 + - Added `NewService` impl for `Rc where S: NewService` - Added `NewService` impl for `Arc where S: NewService` - ## 0.2.1 - 2019-02-03 + - Generalize `.apply` combinator with Transform trait - ## 0.2.0 - 2019-02-01 + - Use associated type instead of generic for Service definition. - * Before: + - Before: ```rust impl Service for Client { type Response = Response; // ... } ``` - * After: + - After: ```rust impl Service for Client { type Request = Request; @@ -198,31 +194,31 @@ } ``` - ## 0.1.6 - 2019-01-24 + - Use `FnMut` instead of `Fn` for .apply() and .map() combinators and `FnService` type - Change `.apply()` error semantic, new service's error is `From` - ## 0.1.5 - 2019-01-13 + - Make `Out::Error` convertible from `T::Error` for apply combinator - ## 0.1.4 - 2019-01-11 + - Use `FnMut` instead of `Fn` for `FnService` - ## 0.1.3 - 2018-12-12 + - Split service combinators to separate trait - ## 0.1.2 - 2018-12-12 + - Release future early for `.and_then()` and `.then()` combinators - ## 0.1.1 - 2018-12-09 + - Added Service impl for `Box` - ## 0.1.0 - 2018-12-09 + - Initial import diff --git a/actix-tls/CHANGES.md b/actix-tls/CHANGES.md index c807b74c..886cc062 100644 --- a/actix-tls/CHANGES.md +++ b/actix-tls/CHANGES.md @@ -1,41 +1,43 @@ # Changes ## Unreleased - 2022-xx-xx + - Minimum supported Rust version (MSRV) is now 1.59. - ## 3.0.4 - 2022-03-15 + - Logs emitted now use the `tracing` crate with `log` compatibility. [#451] [#451]: https://github.com/actix/actix-net/pull/451 - ## 3.0.3 - 2022-02-15 + - No significant changes since `3.0.2`. - ## 3.0.2 - 2022-01-28 + - Expose `connect::Connection::new`. [#439] [#439]: https://github.com/actix/actix-net/pull/439 - ## 3.0.1 - 2022-01-11 + - No significant changes since `3.0.0`. - ## 3.0.0 - 2021-12-26 + - No significant changes since `3.0.0-rc.2`. - ## 3.0.0-rc.2 - 2021-12-10 + - Re-export `openssl::SslConnectorBuilder` in `connect::openssl::reexports`. [#429] [#429]: https://github.com/actix/actix-net/pull/429 - ## 3.0.0-rc.1 - 2021-11-29 + ### Added + - Derive `Debug` for `connect::Connection`. [#422] - Implement `Display` for `accept::TlsError`. [#422] - Implement `Error` for `accept::TlsError` where both types also implement `Error`. [#422] @@ -45,6 +47,7 @@ - Implement `Default` for `connect::ConnectorService`. [#423] ### Changed + - The crate's default features flags no longer include `uri`. [#422] - Useful re-exports from underlying TLS crates are exposed in a `reexports` modules in all acceptors and connectors. - Convert `connect::ResolverService` from enum to struct. [#422] @@ -61,6 +64,7 @@ - Inline modules in `connect::tls` to `connect` module. [#422] ### Removed + - Remove `connect::{new_connector, new_connector_factory, default_connector, default_connector_factory}` methods. [#422] - Remove `connect::native_tls::Connector::service` method. [#422] - Remove redundant `connect::Connection::from_parts` method. [#422] @@ -68,8 +72,8 @@ [#422]: https://github.com/actix/actix-net/pull/422 [#423]: https://github.com/actix/actix-net/pull/423 - ## 3.0.0-beta.9 - 2021-11-22 + - Add configurable timeout for accepting TLS connection. [#393] - Added `TlsError::Timeout` variant. [#393] - All TLS acceptor services now use `TlsError` for their error types. [#393] @@ -78,31 +82,30 @@ [#393]: https://github.com/actix/actix-net/pull/393 [#420]: https://github.com/actix/actix-net/pull/420 - ## 3.0.0-beta.8 - 2021-11-15 + - Add `Connect::request` for getting a reference to the connection request. [#415] [#415]: https://github.com/actix/actix-net/pull/415 - ## 3.0.0-beta.7 - 2021-10-20 + - Add `webpki_roots_cert_store()` to get rustls compatible webpki roots cert store. [#401] - Alias `connect::ssl` to `connect::tls`. [#401] [#401]: https://github.com/actix/actix-net/pull/401 - ## 3.0.0-beta.6 - 2021-10-19 + - Update `tokio-rustls` to `0.23` which uses `rustls` `0.20`. [#396] - Removed a re-export of `Session` from `rustls` as it no longer exist. [#396] - Minimum supported Rust version (MSRV) is now 1.52. [#396]: https://github.com/actix/actix-net/pull/396 - ## 3.0.0-beta.5 - 2021-03-29 -- Changed `connect::ssl::rustls::RustlsConnectorService` to return error when `DNSNameRef` - generation failed instead of panic. [#296] + +- Changed `connect::ssl::rustls::RustlsConnectorService` to return error when `DNSNameRef` generation failed instead of panic. [#296] - Remove `connect::ssl::openssl::OpensslConnectServiceFactory`. [#297] - Remove `connect::ssl::openssl::OpensslConnectService`. [#297] - Add `connect::ssl::native_tls` module for native tls support. [#295] @@ -114,74 +117,72 @@ [#297]: https://github.com/actix/actix-net/pull/297 [#299]: https://github.com/actix/actix-net/pull/299 - ## 3.0.0-beta.4 - 2021-02-24 + - Rename `accept::openssl::{SslStream => TlsStream}`. - Add `connect::Connect::set_local_addr` to attach local `IpAddr`. [#282] - `connector::TcpConnector` service will try to bind to local_addr of `IpAddr` when given. [#282] [#282]: https://github.com/actix/actix-net/pull/282 - ## 3.0.0-beta.3 - 2021-02-06 + - Remove `trust-dns-proto` and `trust-dns-resolver`. [#248] - Use `std::net::ToSocketAddrs` as simple and basic default resolver. [#248] - Add `Resolve` trait for custom DNS resolvers. [#248] - Add `Resolver::new_custom` function to construct custom resolvers. [#248] -- Export `webpki_roots::TLS_SERVER_ROOTS` in `actix_tls::connect` mod and remove - the export from `actix_tls::accept` [#248] -- Remove `ConnectTakeAddrsIter`. `Connect::take_addrs` now returns `ConnectAddrsIter<'static>` - as owned iterator. [#248] +- Export `webpki_roots::TLS_SERVER_ROOTS` in `actix_tls::connect` mod and remove the export from `actix_tls::accept` [#248] +- Remove `ConnectTakeAddrsIter`. `Connect::take_addrs` now returns `ConnectAddrsIter<'static>` as owned iterator. [#248] - Rename `Address::{host => hostname}` to more accurately describe which URL segment is returned. - Update `actix-rt` to `2.0.0`. [#273] [#248]: https://github.com/actix/actix-net/pull/248 [#273]: https://github.com/actix/actix-net/pull/273 - ## 3.0.0-beta.2 - 2022-xx-xx + - Depend on stable trust-dns packages. [#204] [#204]: https://github.com/actix/actix-net/pull/204 - ## 3.0.0-beta.1 - 2020-12-29 + - Move acceptors under `accept` module. [#238] - Merge `actix-connect` crate under `connect` module. [#238] - Add feature flags to enable acceptors and/or connectors individually. [#238] [#238]: https://github.com/actix/actix-net/pull/238 - ## 2.0.0 - 2020-09-03 + - `nativetls::NativeTlsAcceptor` is renamed to `nativetls::Acceptor`. - Where possible, "SSL" terminology is replaced with "TLS". - * `SslError` is renamed to `TlsError`. - * `TlsError::Ssl` enum variant is renamed to `TlsError::Tls`. - * `max_concurrent_ssl_connect` is renamed to `max_concurrent_tls_connect`. - + - `SslError` is renamed to `TlsError`. + - `TlsError::Ssl` enum variant is renamed to `TlsError::Tls`. + - `max_concurrent_ssl_connect` is renamed to `max_concurrent_tls_connect`. ## 2.0.0-alpha.2 - 2020-08-17 + - Update `rustls` dependency to 0.18 - Update `tokio-rustls` dependency to 0.14 - Update `webpki-roots` dependency to 0.20 - ## [2.0.0-alpha.1] - 2020-03-03 + - Update `rustls` dependency to 0.17 - Update `tokio-rustls` dependency to 0.13 - Update `webpki-roots` dependency to 0.19 - ## [1.0.0] - 2019-12-11 + - 1.0.0 release - ## [1.0.0-alpha.3] - 2019-12-07 + - Migrate to tokio 0.2 - Enable rustls acceptor service - Enable native-tls acceptor service - ## [1.0.0-alpha.1] - 2019-12-02 + - Split openssl acceptor from actix-server package diff --git a/actix-tracing/CHANGES.md b/actix-tracing/CHANGES.md index 938d536e..dd5c2d01 100644 --- a/actix-tracing/CHANGES.md +++ b/actix-tracing/CHANGES.md @@ -1,8 +1,9 @@ # Changes ## Unreleased - 2022-xx-xx + - Minimum supported Rust version (MSRV) is now 1.59. - ## 0.1.0 - 2020-01-15 + - Initial release diff --git a/actix-utils/CHANGES.md b/actix-utils/CHANGES.md index edd8e9c6..03bca650 100644 --- a/actix-utils/CHANGES.md +++ b/actix-utils/CHANGES.md @@ -1,24 +1,25 @@ # Changes ## Unreleased - 2022-xx-xx + - Minimum supported Rust version (MSRV) is now 1.59. - ## 3.0.1 - 2022-10-21 + - Minimum supported Rust version (MSRV) is now 1.57. - ## 3.0.0 - 2021-04-16 + - No significant changes from `3.0.0-beta.4`. - ## 3.0.0-beta.4 - 2021-04-01 + - Add `future::Either` type. [#305] [#305]: https://github.com/actix/actix-net/pull/305 - ## 3.0.0-beta.3 - 2021-04-01 + - Moved `mpsc` to own crate `local-channel`. [#301] - Moved `task::LocalWaker` to own crate `local-waker`. [#301] - Remove `timeout` module. [#301] @@ -27,14 +28,14 @@ [#301]: https://github.com/actix/actix-net/pull/301 - ## 3.0.0-beta.2 - 2021-02-06 + - Update `actix-rt` to `2.0.0`. [#273] [#273]: https://github.com/actix/actix-net/pull/273 - ## 3.0.0-beta.1 - 2020-12-28 + - Update `bytes` dependency to `1`. [#237] - Use `pin-project-lite` to replace `pin-project`. [#229] - Remove `condition`,`either`,`inflight`,`keepalive`,`oneshot`,`order`,`stream` and `time` mods. [#229] @@ -42,146 +43,146 @@ [#229]: https://github.com/actix/actix-net/pull/229 [#237]: https://github.com/actix/actix-net/pull/237 - ## 2.0.0 - 2020-08-23 + - No changes from beta 1. - ## 2.0.0-beta.1 - 2020-08-19 + - Upgrade `tokio-util` to `0.3`. - Remove unsound custom Cell and use `std::cell::RefCell` instead, as well as `actix-service`. - Rename method to correctly spelled `LocalWaker::is_registered`. - ## 1.0.6 - 2020-01-08 + - Add `Clone` impl for `condition::Waiter`. - ## 1.0.5 - 2020-01-08 + - Add `Condition` type. - Add `Pool` of one-shot's. - ## 1.0.4 - 2019-12-20 + - Add methods to check `LocalWaker` registration state. - ## 1.0.3 - 2019-12-11 + - Revert InOrder service changes - ## 1.0.2 - 2019-12-11 + - Allow to create `framed::Dispatcher` with custom `mpsc::Receiver`. - Add `oneshot::Sender::is_canceled()` method. - ## 1.0.1 - 2019-12-11 + - Optimize InOrder service. - ## 1.0.0 - 2019-12-11 + - Simplify oneshot and mpsc implementations. - ## 1.0.0-alpha.3 - 2019-12-07 + - Migrate to tokio 0.2. - Fix oneshot. - ## 1.0.0-alpha.2 - 2019-12-02 + - Migrate to `std::future`. - ## 0.4.7 - 2019-10-14 + - Re-register task on every framed transport poll. - ## 0.4.6 - 2019-10-08 + - Refactor `Counter` type. register current task in available method. - ## 0.4.5 - 2019-07-19 + - Deprecated `CloneableService` as it is not safe. - ## 0.4.4 - 2019-07-17 + - Undeprecate `FramedTransport` as it is actually useful. - ## 0.4.3 - 2019-07-17 + - Deprecate `CloneableService` as it is not safe and in general not very useful. - Deprecate `FramedTransport` in favor of `actix-ioframe`. - ## 0.4.2 - 2019-06-26 + - Do not block on sink drop for FramedTransport. - ## 0.4.1 - 2019-05-15 + - Change `Either` constructor. - ## 0.4.0 - 2019-05-11 + - Change `Either` to handle two nexted services. - Upgrade actix-service 0.4. - Removed framed related services. - Removed stream related services. - ## 0.3.5 - 2019-04-04 + - Allow to send messages to `FramedTransport` via mpsc channel. - Remove `'static` constraint from Clonable service. - ## 0.3.4 - 2019-03-12 + - `TimeoutService`, `InOrderService`, `InFlightService` accepts generic IntoService services. - Fix `InFlightService::poll_ready()` nested service readiness check. - Fix `InOrderService::poll_ready()` nested service readiness check. - ## 0.3.3 - 2019-03-09 + - Revert IntoFuture change. - Add generic config param for IntoFramed and TakeOne new services. - ## 0.3.2 - 2019-03-04 + - Use IntoFuture for new services. ## 0.3.1 - 2019-03-04 + - Use new type of transform trait. - ## 0.3.0 - 2019-03-02 -- Use new `NewService` trait -- BoxedNewService` and `BoxedService` types moved to actix-service crate. +- Use new `NewService` trait +- BoxedNewService`and`BoxedService` types moved to actix-service crate. ## 0.2.4 - 2019-02-21 + - Custom `BoxedNewService` implementation. - ## 0.2.3 - 2019-02-21 + - Add `BoxedNewService` and `BoxedService`. - ## 0.2.2 - 2019-02-11 + - Add `Display` impl for `TimeoutError`. - Add `Display` impl for `InOrderError`. - ## 0.2.1 - 2019-02-06 -- Add `InOrder` service. the service yields responses as they become available, - in the order that their originating requests were submitted to the service. + +- Add `InOrder` service. the service yields responses as they become available, in the order that their originating requests were submitted to the service. - Convert `Timeout` and `InFlight` services to a transforms. - ## 0.2.0 - 2019-02-01 + - Fix framed transport error handling. - Added Clone impl for Either service. - Added Clone impl for Timeout service factory. - Added Service and NewService for Stream dispatcher. - Switch to actix-service 0.2. - ## 0.1.0 - 2018-12-09 + - Move utils services to separate crate. diff --git a/bytestring/CHANGES.md b/bytestring/CHANGES.md index 826ff3b8..0b6955ca 100644 --- a/bytestring/CHANGES.md +++ b/bytestring/CHANGES.md @@ -1,59 +1,60 @@ # Changes ## Unreleased - 2022-xx-xx + - Implement `AsRef` for `ByteString`. - Minimum supported Rust version (MSRV) is now 1.59. - ## 1.2.1 - 2022-11-12 + - Fix `#[no_std]` compatibility. [#471] [#471]: https://github.com/actix/actix-net/pull/471 - ## 1.2.0 - 2022-11-07 + - Add `ByteString::slice_ref` which can safely slice a `ByteString` into a new one with zero copy. [#470] - Minimum supported Rust version (MSRV) is now 1.57. [#470]: https://github.com/actix/actix-net/pull/470 - ## 1.1.0 - 2022-06-11 + - Implement `From>` for `ByteString`. [#458] - Implement `Into` for `ByteString`. [#458] - Minimum supported Rust version (MSRV) is now 1.49. [#458]: https://github.com/actix/actix-net/pull/458 - ## 1.0.0 - 2020-12-31 + - Update `bytes` dependency to `1`. - Add array and slice of `u8` impls of `TryFrom` up to 32 in length. - Rename `get_ref` to `as_bytes` and rename `into_inner` to `into_bytes`. - `ByteString::new` is now a `const fn`. - Crate is now `#[no_std]` compatible. - ## 0.1.5 - 2020-03-30 + - Serde support - ## 0.1.4 - 2020-01-14 + - Fix `AsRef` impl - ## 0.1.3 - 2020-01-13 + - Add `PartialEq>`, `AsRef<[u8]>` impls - ## 0.1.2 - 2019-12-22 + - Fix `new()` method - Make `ByteString::from_static()` and `ByteString::from_bytes_unchecked()` methods const. - ## 0.1.1 - 2019-12-07 + - Fix hash impl - ## 0.1.0 - 2019-12-07 + - Initial release diff --git a/local-channel/CHANGES.md b/local-channel/CHANGES.md index d19848f0..53530ff4 100644 --- a/local-channel/CHANGES.md +++ b/local-channel/CHANGES.md @@ -1,16 +1,17 @@ # Changes ## Unreleased - 2022-xx-xx + - Minimum supported Rust version (MSRV) is now 1.59. - ## 0.1.3 - 2022-05-03 + - Minimum supported Rust version (MSRV) is now 1.49. - ## 0.1.2 - 2021-04-01 + - No significant changes from `0.1.1`. - ## 0.1.1 - 2021-03-29 + - Move local mpsc channel to it's own crate. diff --git a/local-waker/CHANGES.md b/local-waker/CHANGES.md index b36eacf5..5204259c 100644 --- a/local-waker/CHANGES.md +++ b/local-waker/CHANGES.md @@ -1,16 +1,17 @@ # Changes ## Unreleased - 2022-xx-xx + - Minimum supported Rust version (MSRV) is now 1.59. - ## 0.1.3 - 2022-05-03 + - Minimum supported Rust version (MSRV) is now 1.49. - ## 0.1.2 - 2021-12-18 + - Fix crate metadata. - ## 0.1.1 - 2021-03-29 + - Move `LocalWaker` to it's own crate. From a6bece7b330e5089b82c89c86a7fa62baa4c6682 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Fri, 3 Mar 2023 22:41:09 +0000 Subject: [PATCH 28/79] prepare bytestring release 1.3.0 --- bytestring/CHANGES.md | 3 ++- bytestring/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bytestring/CHANGES.md b/bytestring/CHANGES.md index 0b6955ca..c93a5429 100644 --- a/bytestring/CHANGES.md +++ b/bytestring/CHANGES.md @@ -2,8 +2,9 @@ ## Unreleased - 2022-xx-xx +## 1.3.0 - 2023-03-03 + - Implement `AsRef` for `ByteString`. -- Minimum supported Rust version (MSRV) is now 1.59. ## 1.2.1 - 2022-11-12 diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index 1cf7bbe6..0720c7bf 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bytestring" -version = "1.2.1" +version = "1.3.0" authors = [ "Nikolay Kim ", "Rob Ede ", From c60d2f9ddbf3f743a8b501f2f87ddb2bcd8b06b3 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 1 Apr 2023 05:18:22 +0100 Subject: [PATCH 29/79] use doc_auto_cfg --- actix-tls/Cargo.toml | 2 +- actix-tls/examples/accept-rustls.rs | 1 - actix-tls/src/accept/mod.rs | 3 --- actix-tls/src/connect/mod.rs | 4 ---- actix-tls/src/lib.rs | 5 +---- 5 files changed, 2 insertions(+), 13 deletions(-) diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index f7df5430..b5f71695 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -42,7 +42,7 @@ native-tls = ["tokio-native-tls"] uri = ["http"] [dependencies] -actix-rt = { version = "2.2.0", default-features = false } +actix-rt = { version = "2.2", default-features = false } actix-service = "2" actix-utils = "3" diff --git a/actix-tls/examples/accept-rustls.rs b/actix-tls/examples/accept-rustls.rs index 7d964d10..6424e64a 100644 --- a/actix-tls/examples/accept-rustls.rs +++ b/actix-tls/examples/accept-rustls.rs @@ -21,7 +21,6 @@ use tokio_rustls::rustls; use std::{ - env, fs::File, io::{self, BufReader}, sync::{ diff --git a/actix-tls/src/accept/mod.rs b/actix-tls/src/accept/mod.rs index 46710df8..13c4db37 100644 --- a/actix-tls/src/accept/mod.rs +++ b/actix-tls/src/accept/mod.rs @@ -10,15 +10,12 @@ use std::{ use actix_utils::counter::Counter; #[cfg(feature = "openssl")] -#[cfg_attr(docsrs, doc(cfg(feature = "openssl")))] pub mod openssl; #[cfg(feature = "rustls")] -#[cfg_attr(docsrs, doc(cfg(feature = "rustls")))] pub mod rustls; #[cfg(feature = "native-tls")] -#[cfg_attr(docsrs, doc(cfg(feature = "native-tls")))] pub mod native_tls; pub(crate) static MAX_CONN: AtomicUsize = AtomicUsize::new(256); diff --git a/actix-tls/src/connect/mod.rs b/actix-tls/src/connect/mod.rs index 3511dd58..df002585 100644 --- a/actix-tls/src/connect/mod.rs +++ b/actix-tls/src/connect/mod.rs @@ -22,19 +22,15 @@ mod resolver; pub mod tcp; #[cfg(feature = "uri")] -#[cfg_attr(docsrs, doc(cfg(feature = "uri")))] mod uri; #[cfg(feature = "openssl")] -#[cfg_attr(docsrs, doc(cfg(feature = "openssl")))] pub mod openssl; #[cfg(feature = "rustls")] -#[cfg_attr(docsrs, doc(cfg(feature = "rustls")))] pub mod rustls; #[cfg(feature = "native-tls")] -#[cfg_attr(docsrs, doc(cfg(feature = "native-tls")))] pub mod native_tls; pub use self::connection::Connection; diff --git a/actix-tls/src/lib.rs b/actix-tls/src/lib.rs index 39714dca..64bdcd00 100644 --- a/actix-tls/src/lib.rs +++ b/actix-tls/src/lib.rs @@ -4,17 +4,14 @@ #![warn(future_incompatible, missing_docs)] #![doc(html_logo_url = "https://actix.rs/img/logo.png")] #![doc(html_favicon_url = "https://actix.rs/favicon.ico")] -// enable unstable doc_cfg feature only on on docs.rs where nightly compiler is used -#![cfg_attr(docsrs, feature(doc_cfg))] +#![cfg_attr(docsrs, feature(doc_auto_cfg))] #[cfg(feature = "openssl")] #[allow(unused_extern_crates)] extern crate tls_openssl as openssl; #[cfg(feature = "accept")] -#[cfg_attr(docsrs, doc(cfg(feature = "accept")))] pub mod accept; #[cfg(feature = "connect")] -#[cfg_attr(docsrs, doc(cfg(feature = "connect")))] pub mod connect; From c6ebbcf21b49ed8f6920f7eb2d7978301e87bafc Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 1 Apr 2023 05:24:00 +0100 Subject: [PATCH 30/79] clippy run on -tls --- actix-server/src/test_server.rs | 2 +- actix-server/tests/server.rs | 2 ++ actix-tls/src/accept/native_tls.rs | 6 +++--- actix-tls/src/accept/openssl.rs | 6 +++--- actix-tls/src/accept/rustls.rs | 6 +++--- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/actix-server/src/test_server.rs b/actix-server/src/test_server.rs index 67659948..828e0216 100644 --- a/actix-server/src/test_server.rs +++ b/actix-server/src/test_server.rs @@ -117,7 +117,7 @@ impl TestServerHandle { /// Stop server. fn stop(&mut self) { - let _ = self.server_handle.stop(false); + drop(self.server_handle.stop(false)); self.thread_handle.take().unwrap().join().unwrap().unwrap(); } diff --git a/actix-server/tests/server.rs b/actix-server/tests/server.rs index dc0c57ca..a46652d1 100644 --- a/actix-server/tests/server.rs +++ b/actix-server/tests/server.rs @@ -1,3 +1,5 @@ +#![allow(clippy::let_underscore_future)] + use std::{ net, sync::{ diff --git a/actix-tls/src/accept/native_tls.rs b/actix-tls/src/accept/native_tls.rs index ce98e687..aad9c4c8 100644 --- a/actix-tls/src/accept/native_tls.rs +++ b/actix-tls/src/accept/native_tls.rs @@ -73,17 +73,17 @@ impl AsyncWrite for TlsStream { } fn is_write_vectored(&self) -> bool { - (&**self).is_write_vectored() + (**self).is_write_vectored() } } impl ActixStream for TlsStream { fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll> { - IO::poll_read_ready((&**self).get_ref().get_ref().get_ref(), cx) + IO::poll_read_ready((**self).get_ref().get_ref().get_ref(), cx) } fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll> { - IO::poll_write_ready((&**self).get_ref().get_ref().get_ref(), cx) + IO::poll_write_ready((**self).get_ref().get_ref().get_ref(), cx) } } diff --git a/actix-tls/src/accept/openssl.rs b/actix-tls/src/accept/openssl.rs index 32973b66..81c207ee 100644 --- a/actix-tls/src/accept/openssl.rs +++ b/actix-tls/src/accept/openssl.rs @@ -76,17 +76,17 @@ impl AsyncWrite for TlsStream { } fn is_write_vectored(&self) -> bool { - (&**self).is_write_vectored() + (**self).is_write_vectored() } } impl ActixStream for TlsStream { fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll> { - IO::poll_read_ready((&**self).get_ref(), cx) + IO::poll_read_ready((**self).get_ref(), cx) } fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll> { - IO::poll_write_ready((&**self).get_ref(), cx) + IO::poll_write_ready((**self).get_ref(), cx) } } diff --git a/actix-tls/src/accept/rustls.rs b/actix-tls/src/accept/rustls.rs index fd0ebfb0..bf324e3c 100644 --- a/actix-tls/src/accept/rustls.rs +++ b/actix-tls/src/accept/rustls.rs @@ -76,17 +76,17 @@ impl AsyncWrite for TlsStream { } fn is_write_vectored(&self) -> bool { - (&**self).is_write_vectored() + (**self).is_write_vectored() } } impl ActixStream for TlsStream { fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll> { - IO::poll_read_ready((&**self).get_ref().0, cx) + IO::poll_read_ready((**self).get_ref().0, cx) } fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll> { - IO::poll_write_ready((&**self).get_ref().0, cx) + IO::poll_write_ready((**self).get_ref().0, cx) } } From 28f36e4e3087344d4a3984a60e7fdd12d4d047bd Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 1 Apr 2023 05:24:40 +0100 Subject: [PATCH 31/79] update unreleased sections date --- actix-codec/CHANGES.md | 2 +- actix-macros/CHANGES.md | 2 +- actix-rt/CHANGES.md | 2 +- actix-server/CHANGES.md | 2 +- actix-service/CHANGES.md | 2 +- actix-tls/CHANGES.md | 2 +- actix-tracing/CHANGES.md | 2 +- actix-utils/CHANGES.md | 2 +- bytestring/CHANGES.md | 2 +- local-channel/CHANGES.md | 2 +- local-waker/CHANGES.md | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/actix-codec/CHANGES.md b/actix-codec/CHANGES.md index 50861701..cbbcb578 100644 --- a/actix-codec/CHANGES.md +++ b/actix-codec/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2022-xx-xx +## Unreleased - 2023-xx-xx - Minimum supported Rust version (MSRV) is now 1.59. diff --git a/actix-macros/CHANGES.md b/actix-macros/CHANGES.md index bb75cb47..79ff37c9 100644 --- a/actix-macros/CHANGES.md +++ b/actix-macros/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2022-xx-xx +## Unreleased - 2023-xx-xx - Minimum supported Rust version (MSRV) is now 1.59. diff --git a/actix-rt/CHANGES.md b/actix-rt/CHANGES.md index 2d7a4da6..75aeea92 100644 --- a/actix-rt/CHANGES.md +++ b/actix-rt/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2022-xx-xx +## Unreleased - 2023-xx-xx ## 2.8.0 - 2022-12-21 diff --git a/actix-server/CHANGES.md b/actix-server/CHANGES.md index cde39f7f..a60c0d42 100644 --- a/actix-server/CHANGES.md +++ b/actix-server/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2022-xx-xx +## Unreleased - 2023-xx-xx ## 2.2.0 - 2022-12-21 diff --git a/actix-service/CHANGES.md b/actix-service/CHANGES.md index b67a231f..a5822915 100644 --- a/actix-service/CHANGES.md +++ b/actix-service/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2022-xx-xx +## Unreleased - 2023-xx-xx - Minimum supported Rust version (MSRV) is now 1.59. diff --git a/actix-tls/CHANGES.md b/actix-tls/CHANGES.md index 886cc062..ff023ce4 100644 --- a/actix-tls/CHANGES.md +++ b/actix-tls/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2022-xx-xx +## Unreleased - 2023-xx-xx - Minimum supported Rust version (MSRV) is now 1.59. diff --git a/actix-tracing/CHANGES.md b/actix-tracing/CHANGES.md index dd5c2d01..73f87101 100644 --- a/actix-tracing/CHANGES.md +++ b/actix-tracing/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2022-xx-xx +## Unreleased - 2023-xx-xx - Minimum supported Rust version (MSRV) is now 1.59. diff --git a/actix-utils/CHANGES.md b/actix-utils/CHANGES.md index 03bca650..f00d29b8 100644 --- a/actix-utils/CHANGES.md +++ b/actix-utils/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2022-xx-xx +## Unreleased - 2023-xx-xx - Minimum supported Rust version (MSRV) is now 1.59. diff --git a/bytestring/CHANGES.md b/bytestring/CHANGES.md index c93a5429..a66b9e12 100644 --- a/bytestring/CHANGES.md +++ b/bytestring/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2022-xx-xx +## Unreleased - 2023-xx-xx ## 1.3.0 - 2023-03-03 diff --git a/local-channel/CHANGES.md b/local-channel/CHANGES.md index 53530ff4..90e14e95 100644 --- a/local-channel/CHANGES.md +++ b/local-channel/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2022-xx-xx +## Unreleased - 2023-xx-xx - Minimum supported Rust version (MSRV) is now 1.59. diff --git a/local-waker/CHANGES.md b/local-waker/CHANGES.md index 5204259c..e7294eb3 100644 --- a/local-waker/CHANGES.md +++ b/local-waker/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2022-xx-xx +## Unreleased - 2023-xx-xx - Minimum supported Rust version (MSRV) is now 1.59. From c0693da9ba5a2de7be7627cdd4e666c5505a6bc5 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 1 Apr 2023 21:39:19 +0100 Subject: [PATCH 32/79] update msrv to 1.60 (#482 * update msrv to 1.60 * inherit workspace msrv --- .github/workflows/ci-master.yml | 79 +++++++++--------------------- .github/workflows/ci.yml | 82 +++++++++----------------------- .github/workflows/clippy-fmt.yml | 38 ++++++++------- .github/workflows/upload-doc.yml | 13 +++-- Cargo.toml | 1 + README.md | 2 +- actix-codec/CHANGES.md | 2 +- actix-codec/Cargo.toml | 7 +-- actix-macros/CHANGES.md | 2 +- actix-macros/Cargo.toml | 3 +- actix-macros/tests/trybuild.rs | 2 +- actix-rt/CHANGES.md | 2 + actix-rt/Cargo.toml | 7 +-- actix-server/CHANGES.md | 2 + actix-server/Cargo.toml | 7 +-- actix-service/CHANGES.md | 2 +- actix-service/Cargo.toml | 7 +-- actix-tls/CHANGES.md | 2 +- actix-tls/Cargo.toml | 7 +-- actix-tracing/CHANGES.md | 2 +- actix-tracing/Cargo.toml | 7 +-- actix-utils/CHANGES.md | 2 +- actix-utils/Cargo.toml | 7 +-- bytestring/Cargo.toml | 7 +-- clippy.toml | 1 - local-channel/CHANGES.md | 2 +- local-channel/Cargo.toml | 3 +- local-waker/CHANGES.md | 2 +- local-waker/Cargo.toml | 3 +- 29 files changed, 110 insertions(+), 193 deletions(-) delete mode 100644 clippy.toml diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml index d77be7b0..5f4b7428 100644 --- a/.github/workflows/ci-master.yml +++ b/.github/workflows/ci-master.yml @@ -4,6 +4,13 @@ on: push: branches: [master] +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build_and_test_nightly: strategy: @@ -21,8 +28,7 @@ jobs: name: ${{ matrix.target.name }} / ${{ matrix.version }} runs-on: ${{ matrix.target.os }} - env: - VCPKGRS_DYNAMIC: 1 + env: {} steps: - name: Setup Routing @@ -31,36 +37,17 @@ jobs: - uses: actions/checkout@v3 - # install OpenSSL on Windows - - name: Set vcpkg root - if: matrix.target.triple == 'x86_64-pc-windows-msvc' || matrix.target.triple == 'i686-pc-windows-msvc' - run: echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append - name: Install OpenSSL - if: matrix.target.triple == 'x86_64-pc-windows-msvc' - run: vcpkg install openssl:x64-windows - - name: Install OpenSSL - if: matrix.target.triple == 'i686-pc-windows-msvc' - run: vcpkg install openssl:x86-windows + if: matrix.target.os == 'windows-latest' + run: choco install openssl + - name: Set OpenSSL dir in env + if: matrix.target.os == 'windows-latest' + run: echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append - - name: Install ${{ matrix.version }} - run: | - rustup set profile minimal - rustup install ${{ matrix.version }}-${{ matrix.target.triple }} - rustup override set ${{ matrix.version }}-${{ matrix.target.triple }} - - # - name: Install MSYS2 - # if: matrix.target.triple == 'x86_64-pc-windows-gnu' - # uses: msys2/setup-msys2@v2 - # - name: Install MinGW Packages - # if: matrix.target.triple == 'x86_64-pc-windows-gnu' - # run: | - # msys2 -c 'pacman -Sy --noconfirm pacman' - # msys2 -c 'pacman --noconfirm -S base-devel pkg-config' - - # - name: Generate Cargo.lock - # run: cargo generate-lockfile - # - name: Cache Dependencies - # uses: Swatinem/rust-cache@v2.2.0 + - name: Install Rust (${{ matrix.version }}) + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: ${{ matrix.version }} - name: Install cargo-hack run: cargo install cargo-hack @@ -109,15 +96,8 @@ jobs: - uses: actions/checkout@v3 - name: Install Rust (nightly) - run: | - rustup set profile minimal - rustup install nightly - rustup override set nightly - - - name: Generate Cargo.lock - run: cargo generate-lockfile - - name: Cache Dependencies - uses: Swatinem/rust-cache@v2.2.0 + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: { toolchain: nightly } - name: Generate coverage file if: github.ref == 'refs/heads/master' @@ -136,15 +116,8 @@ jobs: - uses: actions/checkout@v3 - name: Install Rust (nightly) - run: | - rustup set profile minimal - rustup install nightly - rustup override set nightly - - - name: Generate Cargo.lock - run: cargo generate-lockfile - - name: Cache Dependencies - uses: Swatinem/rust-cache@v2.2.0 + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: { toolchain: nightly } - name: Install cargo-minimal-versions run: cargo install cargo-minimal-versions @@ -162,15 +135,7 @@ jobs: - uses: actions/checkout@v3 - name: Install Rust - run: | - rustup set profile minimal - rustup install stable - rustup override set stable - - - name: Generate Cargo.lock - run: cargo generate-lockfile - - name: Cache Dependencies - uses: Swatinem/rust-cache@v2.2.0 + uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Install cargo-nextest run: cargo install cargo-nextest diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2434ea28..80f3f9a1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,10 +1,15 @@ name: CI -on: - pull_request: - types: [opened, synchronize, reopened] - push: - branches: [master] +on: + pull_request: {} + push: { branches: [master] } + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: build_and_test: @@ -18,14 +23,13 @@ jobs: - { name: Windows (MinGW), os: windows-latest, triple: x86_64-pc-windows-gnu } - { name: Windows (32-bit), os: windows-latest, triple: i686-pc-windows-msvc } version: - - 1.59.0 + - 1.60.0 - stable name: ${{ matrix.target.name }} / ${{ matrix.version }} runs-on: ${{ matrix.target.os }} - env: - VCPKGRS_DYNAMIC: 1 + env: {} steps: - name: Setup Routing @@ -34,60 +38,28 @@ jobs: - uses: actions/checkout@v3 - # install OpenSSL on Windows - - name: Set vcpkg root - if: matrix.target.triple == 'x86_64-pc-windows-msvc' || matrix.target.triple == 'i686-pc-windows-msvc' - run: echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append - name: Install OpenSSL - if: matrix.target.triple == 'x86_64-pc-windows-msvc' - run: vcpkg install openssl:x64-windows - - name: Install OpenSSL - if: matrix.target.triple == 'i686-pc-windows-msvc' - run: vcpkg install openssl:x86-windows + if: matrix.target.os == 'windows-latest' + run: choco install openssl + - name: Set OpenSSL dir in env + if: matrix.target.os == 'windows-latest' + run: echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append - name: Install ${{ matrix.version }} - run: | - rustup set profile minimal - rustup install ${{ matrix.version }}-${{ matrix.target.triple }} - rustup override set ${{ matrix.version }}-${{ matrix.target.triple }} - - # - name: Install MSYS2 - # if: matrix.target.triple == 'x86_64-pc-windows-gnu' - # uses: msys2/setup-msys2@v2 - # - name: Install MinGW Packages - # if: matrix.target.triple == 'x86_64-pc-windows-gnu' - # run: | - # msys2 -c 'pacman -Sy --noconfirm pacman' - # msys2 -c 'pacman --noconfirm -S base-devel pkg-config' - - # - name: Generate Cargo.lock - # run: cargo generate-lockfile - # - name: Cache Dependencies - # uses: Swatinem/rust-cache@v2.2.0 + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: ${{ matrix.version }} - name: Install cargo-hack - if: matrix.version != '1.59.0' run: cargo install cargo-hack - # newer cargo-hack versions require 1.60 or above - - name: Install cargo-hack (1.59.0) - if: matrix.version == '1.59.0' - run: cargo install cargo-hack --version=0.5.21 - - - name: workaround MSRV issues - if: matrix.version == '1.59.0' - run: | - cargo install cargo-edit --version=0.8.0 - cargo add env_logger@0.9 --dev -p=actix-tls - cargo add env_logger@0.9 --dev -p=actix-server - - name: Generate Cargo.lock run: cargo generate-lockfile - name: workaround MSRV issues if: matrix.version != 'stable' run: | - cargo update -p=time --precise=0.3.13 # time is only a dev dep so shouldn't affect msrv + cargo update -p=time --precise=0.3.16 # time is only a dev dep so shouldn't affect msrv - name: check lib if: > @@ -125,7 +97,6 @@ jobs: sudo bash -c "ulimit -Sl 512 && ulimit -Hl 512 && PATH=$PATH:/usr/share/rust/.cargo/bin && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-linux" - name: Clear the cargo caches - if: matrix.version == 'stable' # MSRV(1.58) cargo-cache now fails to install on 1.59 run: | cargo install cargo-cache --version 0.6.2 --no-default-features --features ci-autoclean cargo-cache @@ -138,15 +109,8 @@ jobs: - uses: actions/checkout@v3 - name: Install Rust (nightly) - run: | - rustup set profile minimal - rustup install nightly - rustup override set nightly - - - name: Generate Cargo.lock - run: cargo generate-lockfile - - name: Cache Dependencies - uses: Swatinem/rust-cache@v2.2.0 + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: { toolchain: nightly } - name: doc tests io-uring run: | diff --git a/.github/workflows/clippy-fmt.yml b/.github/workflows/clippy-fmt.yml index 978a1a38..b26b1282 100644 --- a/.github/workflows/clippy-fmt.yml +++ b/.github/workflows/clippy-fmt.yml @@ -1,37 +1,43 @@ name: Lint -on: - pull_request: - types: [opened, synchronize, reopened] +on: [pull_request] + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: fmt: runs-on: ubuntu-latest + steps: - uses: actions/checkout@v3 - - name: Install Rust - run: | - rustup set profile minimal - rustup install stable - rustup override set stable - rustup component add rustfmt + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: nightly + components: rustfmt + - name: Rustfmt Check run: cargo fmt --all -- --check clippy: + permissions: + contents: write + runs-on: ubuntu-latest + steps: - uses: actions/checkout@v3 - - name: Install Rust - run: | - rustup set profile minimal - rustup install stable - rustup override set stable - rustup component add clippy + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: { components: clippy } + - uses: giraffate/clippy-action@v1 with: - reporter: "github-pr-check" + reporter: 'github-pr-check' github_token: ${{ secrets.GITHUB_TOKEN }} clippy_flags: --workspace --all-features --tests --examples --bins -- -Dclippy::todo diff --git a/.github/workflows/upload-doc.yml b/.github/workflows/upload-doc.yml index a4f3928d..f36cb138 100644 --- a/.github/workflows/upload-doc.yml +++ b/.github/workflows/upload-doc.yml @@ -1,21 +1,20 @@ name: Upload documentation on: - push: - branches: [master] + push: { branches: [master] } jobs: build: + permissions: + contents: write + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Install Rust - run: | - rustup set profile minimal - rustup install nightly - rustup override set nightly + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: { toolchain: nightly } - name: Build Docs run: cargo doc --workspace --all-features --no-deps diff --git a/Cargo.toml b/Cargo.toml index eb452e1a..ccd36595 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ members = [ "local-channel", "local-waker", ] +resolver = "2" [patch.crates-io] actix-codec = { path = "actix-codec" } diff --git a/README.md b/README.md index 30fb2091..fdf829f5 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ See example folders for [`actix-server`](./actix-server/examples) and [`actix-tl ## MSRV -Crates in this repo currently have a Minimum Supported Rust Version (MSRV) of 1.59. As a policy, we permit MSRV increases in non-breaking releases. +Crates in this repo currently have a Minimum Supported Rust Version (MSRV) of 1.60. As a policy, we permit MSRV increases in non-breaking releases. ## License diff --git a/actix-codec/CHANGES.md b/actix-codec/CHANGES.md index cbbcb578..ebb867cf 100644 --- a/actix-codec/CHANGES.md +++ b/actix-codec/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.59. +- Minimum supported Rust version (MSRV) is now 1.60. ## 0.5.1 - 2022-03-15 diff --git a/actix-codec/Cargo.toml b/actix-codec/Cargo.toml index 900873f2..0aa128bb 100644 --- a/actix-codec/Cargo.toml +++ b/actix-codec/Cargo.toml @@ -10,11 +10,8 @@ keywords = ["network", "framework", "async", "futures"] repository = "https://github.com/actix/actix-net" categories = ["network-programming", "asynchronous"] license = "MIT OR Apache-2.0" -edition = "2018" - -[lib] -name = "actix_codec" -path = "src/lib.rs" +edition = "2021" +rust-version = "1.60" [dependencies] bitflags = "1.2" diff --git a/actix-macros/CHANGES.md b/actix-macros/CHANGES.md index 79ff37c9..20efed15 100644 --- a/actix-macros/CHANGES.md +++ b/actix-macros/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.59. +- Minimum supported Rust version (MSRV) is now 1.60. ## 0.2.3 - 2021-10-19 diff --git a/actix-macros/Cargo.toml b/actix-macros/Cargo.toml index 303568d5..023fa1a8 100644 --- a/actix-macros/Cargo.toml +++ b/actix-macros/Cargo.toml @@ -10,7 +10,8 @@ description = "Macros for Actix system and runtime" repository = "https://github.com/actix/actix-net.git" categories = ["network-programming", "asynchronous"] license = "MIT OR Apache-2.0" -edition = "2018" +edition = "2021" +rust-version = "1.60" [lib] proc-macro = true diff --git a/actix-macros/tests/trybuild.rs b/actix-macros/tests/trybuild.rs index 666769df..51d152a4 100644 --- a/actix-macros/tests/trybuild.rs +++ b/actix-macros/tests/trybuild.rs @@ -1,4 +1,4 @@ -#[rustversion::stable(1.59)] // MSRV +#[rustversion::stable(1.60)] // MSRV #[test] fn compile_macros() { let t = trybuild::TestCases::new(); diff --git a/actix-rt/CHANGES.md b/actix-rt/CHANGES.md index 75aeea92..547b7524 100644 --- a/actix-rt/CHANGES.md +++ b/actix-rt/CHANGES.md @@ -2,6 +2,8 @@ ## Unreleased - 2023-xx-xx +- Minimum supported Rust version (MSRV) is now 1.60. + ## 2.8.0 - 2022-12-21 - Add `#[track_caller]` attribute to `spawn` functions and methods. [#454] diff --git a/actix-rt/Cargo.toml b/actix-rt/Cargo.toml index 70716888..8e967405 100644 --- a/actix-rt/Cargo.toml +++ b/actix-rt/Cargo.toml @@ -11,11 +11,8 @@ homepage = "https://actix.rs" repository = "https://github.com/actix/actix-net.git" categories = ["network-programming", "asynchronous"] license = "MIT OR Apache-2.0" -edition = "2018" - -[lib] -name = "actix_rt" -path = "src/lib.rs" +edition = "2021" +rust-version = "1.60" [features] default = ["macros"] diff --git a/actix-server/CHANGES.md b/actix-server/CHANGES.md index a60c0d42..1147dcbd 100644 --- a/actix-server/CHANGES.md +++ b/actix-server/CHANGES.md @@ -2,6 +2,8 @@ ## Unreleased - 2023-xx-xx +- Minimum supported Rust version (MSRV) is now 1.60. + ## 2.2.0 - 2022-12-21 - Minimum supported Rust version (MSRV) is now 1.59. diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index bc0187e8..05bfd0b1 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -12,11 +12,8 @@ categories = ["network-programming", "asynchronous"] homepage = "https://actix.rs" repository = "https://github.com/actix/actix-net.git" license = "MIT OR Apache-2.0" -edition = "2018" - -[lib] -name = "actix_server" -path = "src/lib.rs" +edition = "2021" +rust-version = "1.60" [features] default = [] diff --git a/actix-service/CHANGES.md b/actix-service/CHANGES.md index a5822915..0640c1cd 100644 --- a/actix-service/CHANGES.md +++ b/actix-service/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.59. +- Minimum supported Rust version (MSRV) is now 1.60. ## 2.0.2 - 2021-12-18 diff --git a/actix-service/Cargo.toml b/actix-service/Cargo.toml index 5a0252db..74904634 100644 --- a/actix-service/Cargo.toml +++ b/actix-service/Cargo.toml @@ -10,11 +10,8 @@ keywords = ["network", "framework", "async", "futures", "service"] categories = ["network-programming", "asynchronous", "no-std"] repository = "https://github.com/actix/actix-net" license = "MIT OR Apache-2.0" -edition = "2018" - -[lib] -name = "actix_service" -path = "src/lib.rs" +edition = "2021" +rust-version = "1.60" [dependencies] futures-core = { version = "0.3.17", default-features = false } diff --git a/actix-tls/CHANGES.md b/actix-tls/CHANGES.md index ff023ce4..f4f248b2 100644 --- a/actix-tls/CHANGES.md +++ b/actix-tls/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.59. +- Minimum supported Rust version (MSRV) is now 1.60. ## 3.0.4 - 2022-03-15 diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index b5f71695..bf90ff46 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -10,16 +10,13 @@ keywords = ["network", "tls", "ssl", "async", "transport"] repository = "https://github.com/actix/actix-net.git" categories = ["network-programming", "asynchronous", "cryptography"] license = "MIT OR Apache-2.0" -edition = "2018" +edition = "2021" +rust-version = "1.60" [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] -[lib] -name = "actix_tls" -path = "src/lib.rs" - [features] default = ["accept", "connect"] diff --git a/actix-tracing/CHANGES.md b/actix-tracing/CHANGES.md index 73f87101..f672659a 100644 --- a/actix-tracing/CHANGES.md +++ b/actix-tracing/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.59. +- Minimum supported Rust version (MSRV) is now 1.60. ## 0.1.0 - 2020-01-15 diff --git a/actix-tracing/Cargo.toml b/actix-tracing/Cargo.toml index 279ffc28..27dfbc22 100644 --- a/actix-tracing/Cargo.toml +++ b/actix-tracing/Cargo.toml @@ -9,11 +9,8 @@ repository = "https://github.com/actix/actix-net.git" documentation = "https://docs.rs/actix-tracing" categories = ["network-programming", "asynchronous"] license = "MIT OR Apache-2.0" -edition = "2018" - -[lib] -name = "actix_tracing" -path = "src/lib.rs" +edition = "2021" +rust-version = "1.60" [dependencies] actix-service = "2" diff --git a/actix-utils/CHANGES.md b/actix-utils/CHANGES.md index f00d29b8..af6434ab 100644 --- a/actix-utils/CHANGES.md +++ b/actix-utils/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.59. +- Minimum supported Rust version (MSRV) is now 1.60. ## 3.0.1 - 2022-10-21 diff --git a/actix-utils/Cargo.toml b/actix-utils/Cargo.toml index 3ee199a2..38d8af5e 100644 --- a/actix-utils/Cargo.toml +++ b/actix-utils/Cargo.toml @@ -10,11 +10,8 @@ keywords = ["network", "framework", "async", "futures"] categories = ["network-programming", "asynchronous"] repository = "https://github.com/actix/actix-net" license = "MIT OR Apache-2.0" -edition = "2018" - -[lib] -name = "actix_utils" -path = "src/lib.rs" +edition = "2021" +rust-version = "1.60" [dependencies] pin-project-lite = "0.2" diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index 0720c7bf..21da5a95 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -11,11 +11,8 @@ categories = ["no-std", "web-programming"] homepage = "https://actix.rs" repository = "https://github.com/actix/actix-net.git" license = "MIT OR Apache-2.0" -edition = "2018" - -[lib] -name = "bytestring" -path = "src/lib.rs" +edition = "2021" +rust-version = "1.60" [dependencies] bytes = { version = "1.2", default-features = false } diff --git a/clippy.toml b/clippy.toml deleted file mode 100644 index abe19b3a..00000000 --- a/clippy.toml +++ /dev/null @@ -1 +0,0 @@ -msrv = "1.59" diff --git a/local-channel/CHANGES.md b/local-channel/CHANGES.md index 90e14e95..b1bad2f5 100644 --- a/local-channel/CHANGES.md +++ b/local-channel/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.59. +- Minimum supported Rust version (MSRV) is now 1.60. ## 0.1.3 - 2022-05-03 diff --git a/local-channel/Cargo.toml b/local-channel/Cargo.toml index 8484577d..b99b397c 100644 --- a/local-channel/Cargo.toml +++ b/local-channel/Cargo.toml @@ -9,7 +9,8 @@ authors = [ repository = "https://github.com/actix/actix-net.git" keywords = ["channel", "local", "futures"] license = "MIT OR Apache-2.0" -edition = "2018" +edition = "2021" +rust-version = "1.60" [dependencies] futures-core = "0.3.17" diff --git a/local-waker/CHANGES.md b/local-waker/CHANGES.md index e7294eb3..68f4348b 100644 --- a/local-waker/CHANGES.md +++ b/local-waker/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.59. +- Minimum supported Rust version (MSRV) is now 1.60. ## 0.1.3 - 2022-05-03 diff --git a/local-waker/Cargo.toml b/local-waker/Cargo.toml index 6a0b44cd..1baa08c0 100644 --- a/local-waker/Cargo.toml +++ b/local-waker/Cargo.toml @@ -10,6 +10,7 @@ repository = "https://github.com/actix/actix-net.git" keywords = ["waker", "local", "futures", "no-std"] categories = ["asynchronous", "no-std"] license = "MIT OR Apache-2.0" -edition = "2018" +edition = "2021" +rust-version = "1.60" [dependencies] From 54ec06cd2393d4cd8b5bfc376935f08f58dbd554 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 1 Apr 2023 21:57:10 +0100 Subject: [PATCH 33/79] update bitflags to v2 --- .github/workflows/ci.yml | 2 +- .github/workflows/upload-doc.yml | 7 +++++++ actix-codec/Cargo.toml | 2 +- actix-codec/src/framed.rs | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 80f3f9a1..9e0fcf11 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,7 +45,7 @@ jobs: if: matrix.target.os == 'windows-latest' run: echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append - - name: Install ${{ matrix.version }} + - name: Install Rust (${{ matrix.version }}) uses: actions-rust-lang/setup-rust-toolchain@v1 with: toolchain: ${{ matrix.version }} diff --git a/.github/workflows/upload-doc.yml b/.github/workflows/upload-doc.yml index f36cb138..66147949 100644 --- a/.github/workflows/upload-doc.yml +++ b/.github/workflows/upload-doc.yml @@ -3,6 +3,13 @@ name: Upload documentation on: push: { branches: [master] } +permissions: + contents: write + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build: permissions: diff --git a/actix-codec/Cargo.toml b/actix-codec/Cargo.toml index 0aa128bb..84f964c3 100644 --- a/actix-codec/Cargo.toml +++ b/actix-codec/Cargo.toml @@ -14,7 +14,7 @@ edition = "2021" rust-version = "1.60" [dependencies] -bitflags = "1.2" +bitflags = "2" bytes = "1" futures-core = { version = "0.3.7", default-features = false } futures-sink = { version = "0.3.7", default-features = false } diff --git a/actix-codec/src/framed.rs b/actix-codec/src/framed.rs index c03ea02d..0d62a61c 100644 --- a/actix-codec/src/framed.rs +++ b/actix-codec/src/framed.rs @@ -18,6 +18,7 @@ const LW: usize = 1024; const HW: usize = 8 * 1024; bitflags! { + #[derive(Debug, Clone, Copy)] struct Flags: u8 { const EOF = 0b0001; const READABLE = 0b0010; From dbce15099363c50cd4b3c47d8e3f56b9b1eac21c Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 1 Apr 2023 22:21:14 +0100 Subject: [PATCH 34/79] update syn to v2 (#481 * update syn to v2 * update changelog --- actix-macros/CHANGES.md | 1 + actix-macros/Cargo.toml | 2 +- actix-macros/src/lib.rs | 42 +++++++++++++++++++++++++--------- actix-macros/tests/trybuild.rs | 1 + 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/actix-macros/CHANGES.md b/actix-macros/CHANGES.md index 20efed15..1badd6b7 100644 --- a/actix-macros/CHANGES.md +++ b/actix-macros/CHANGES.md @@ -2,6 +2,7 @@ ## Unreleased - 2023-xx-xx +- Update `syn` dependency to `2`. - Minimum supported Rust version (MSRV) is now 1.60. ## 0.2.3 - 2021-10-19 diff --git a/actix-macros/Cargo.toml b/actix-macros/Cargo.toml index 023fa1a8..902a6dd1 100644 --- a/actix-macros/Cargo.toml +++ b/actix-macros/Cargo.toml @@ -18,7 +18,7 @@ proc-macro = true [dependencies] quote = "1" -syn = { version = "1", features = ["full"] } +syn = { version = "2", features = ["full"] } [dev-dependencies] actix-rt = "2" diff --git a/actix-macros/src/lib.rs b/actix-macros/src/lib.rs index 284f6920..020b16db 100644 --- a/actix-macros/src/lib.rs +++ b/actix-macros/src/lib.rs @@ -15,6 +15,9 @@ use proc_macro::TokenStream; use quote::quote; +use syn::parse::Parser as _; + +type AttributeArgs = syn::punctuated::Punctuated; /// Marks async entry-point function to be executed by Actix system. /// @@ -25,9 +28,9 @@ use quote::quote; /// println!("Hello world"); /// } /// ``` -#[allow(clippy::needless_doctest_main)] +// #[allow(clippy::needless_doctest_main)] +// #[cfg(not(test))] // Work around for rust-lang/rust#62127 #[proc_macro_attribute] -#[cfg(not(test))] // Work around for rust-lang/rust#62127 pub fn main(args: TokenStream, item: TokenStream) -> TokenStream { let mut input = match syn::parse::(item.clone()) { Ok(input) => input, @@ -35,7 +38,11 @@ pub fn main(args: TokenStream, item: TokenStream) -> TokenStream { Err(err) => return input_and_compile_error(item, err), }; - let args = syn::parse_macro_input!(args as syn::AttributeArgs); + let parser = AttributeArgs::parse_terminated; + let args = match parser.parse(args.clone()) { + Ok(args) => args, + Err(err) => return input_and_compile_error(args, err), + }; let attrs = &input.attrs; let vis = &input.vis; @@ -55,11 +62,15 @@ pub fn main(args: TokenStream, item: TokenStream) -> TokenStream { for arg in &args { match arg { - syn::NestedMeta::Meta(syn::Meta::NameValue(syn::MetaNameValue { - lit: syn::Lit::Str(lit), + syn::Meta::NameValue(syn::MetaNameValue { path, + value: + syn::Expr::Lit(syn::ExprLit { + lit: syn::Lit::Str(lit), + .. + }), .. - })) => match path + }) => match path .get_ident() .map(|i| i.to_string().to_lowercase()) .as_deref() @@ -78,6 +89,7 @@ pub fn main(args: TokenStream, item: TokenStream) -> TokenStream { .into(); } }, + _ => { return syn::Error::new_spanned(arg, "Unknown attribute specified") .to_compile_error() @@ -114,7 +126,11 @@ pub fn test(args: TokenStream, item: TokenStream) -> TokenStream { Err(err) => return input_and_compile_error(item, err), }; - let args = syn::parse_macro_input!(args as syn::AttributeArgs); + let parser = AttributeArgs::parse_terminated; + let args = match parser.parse(args.clone()) { + Ok(args) => args, + Err(err) => return input_and_compile_error(args, err), + }; let attrs = &input.attrs; let vis = &input.vis; @@ -123,7 +139,7 @@ pub fn test(args: TokenStream, item: TokenStream) -> TokenStream { let mut has_test_attr = false; for attr in attrs { - if attr.path.is_ident("test") { + if attr.path().is_ident("test") { has_test_attr = true; } } @@ -149,11 +165,15 @@ pub fn test(args: TokenStream, item: TokenStream) -> TokenStream { for arg in &args { match arg { - syn::NestedMeta::Meta(syn::Meta::NameValue(syn::MetaNameValue { - lit: syn::Lit::Str(lit), + syn::Meta::NameValue(syn::MetaNameValue { path, + value: + syn::Expr::Lit(syn::ExprLit { + lit: syn::Lit::Str(lit), + .. + }), .. - })) => match path + }) => match path .get_ident() .map(|i| i.to_string().to_lowercase()) .as_deref() diff --git a/actix-macros/tests/trybuild.rs b/actix-macros/tests/trybuild.rs index 51d152a4..7e399d49 100644 --- a/actix-macros/tests/trybuild.rs +++ b/actix-macros/tests/trybuild.rs @@ -2,6 +2,7 @@ #[test] fn compile_macros() { let t = trybuild::TestCases::new(); + t.pass("tests/trybuild/main-01-basic.rs"); t.compile_fail("tests/trybuild/main-02-only-async.rs"); t.pass("tests/trybuild/main-03-fn-params.rs"); From 6d0dc9628bfe3d02d69c3937e5e2633dbe80f614 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 1 Apr 2023 22:21:57 +0100 Subject: [PATCH 35/79] install cargo-hack faster --- .github/workflows/ci-master.yml | 12 ++++++------ .github/workflows/ci.yml | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml index 5f4b7428..66bc042e 100644 --- a/.github/workflows/ci-master.yml +++ b/.github/workflows/ci-master.yml @@ -49,8 +49,8 @@ jobs: with: toolchain: ${{ matrix.version }} - - name: Install cargo-hack - run: cargo install cargo-hack + - uses: taiki-e/cache-cargo-install-action@v1 + with: { tool: cargo-hack } - name: check lib if: > @@ -119,11 +119,11 @@ jobs: uses: actions-rust-lang/setup-rust-toolchain@v1 with: { toolchain: nightly } - - name: Install cargo-minimal-versions - run: cargo install cargo-minimal-versions + - uses: taiki-e/cache-cargo-install-action@v1 + with: { tool: cargo-minimal-versions } - - name: Install cargo-hack - run: cargo install cargo-hack + - uses: taiki-e/cache-cargo-install-action@v1 + with: { tool: cargo-hack } - name: Check With Minimal Versions run: cargo minimal-versions check diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9e0fcf11..f59d79e9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,8 +50,8 @@ jobs: with: toolchain: ${{ matrix.version }} - - name: Install cargo-hack - run: cargo install cargo-hack + - uses: taiki-e/cache-cargo-install-action@v1 + with: { tool: cargo-hack } - name: Generate Cargo.lock run: cargo generate-lockfile From 80320a0325eed10057b3ef0dcdb3ad2c9a754edb Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 1 Apr 2023 22:24:10 +0100 Subject: [PATCH 36/79] use secure tokio version range --- actix-codec/Cargo.toml | 2 +- actix-rt/Cargo.toml | 4 ++-- actix-server/Cargo.toml | 4 ++-- actix-tls/Cargo.toml | 2 +- local-channel/Cargo.toml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/actix-codec/Cargo.toml b/actix-codec/Cargo.toml index 84f964c3..565bc830 100644 --- a/actix-codec/Cargo.toml +++ b/actix-codec/Cargo.toml @@ -20,7 +20,7 @@ futures-core = { version = "0.3.7", default-features = false } futures-sink = { version = "0.3.7", default-features = false } memchr = "2.3" pin-project-lite = "0.2" -tokio = "1.18.4" +tokio = "1.23.1" tokio-util = { version = "0.7", features = ["codec", "io"] } tracing = { version = "0.1.30", default-features = false, features = ["log"] } diff --git a/actix-rt/Cargo.toml b/actix-rt/Cargo.toml index 8e967405..fa5fc204 100644 --- a/actix-rt/Cargo.toml +++ b/actix-rt/Cargo.toml @@ -23,12 +23,12 @@ io-uring = ["tokio-uring"] actix-macros = { version = "0.2.3", optional = true } futures-core = { version = "0.3", default-features = false } -tokio = { version = "1.18.4", features = ["rt", "net", "parking_lot", "signal", "sync", "time"] } +tokio = { version = "1.23.1", features = ["rt", "net", "parking_lot", "signal", "sync", "time"] } # runtime for `io-uring` feature [target.'cfg(target_os = "linux")'.dependencies] tokio-uring = { version = "0.4", optional = true } [dev-dependencies] -tokio = { version = "1.18.4", features = ["full"] } +tokio = { version = "1.23.1", features = ["full"] } hyper = { version = "0.14.10", default-features = false, features = ["server", "tcp", "http1"] } diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index 05bfd0b1..ba9ef03c 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -29,7 +29,7 @@ futures-util = { version = "0.3.17", default-features = false, features = ["allo mio = { version = "0.8", features = ["os-poll", "net"] } num_cpus = "1.13" socket2 = "0.4.2" -tokio = { version = "1.18.4", features = ["sync"] } +tokio = { version = "1.23.1", features = ["sync"] } tracing = { version = "0.1.30", default-features = false, features = ["log"] } # runtime for `io-uring` feature @@ -43,4 +43,4 @@ actix-rt = "2.8" bytes = "1" env_logger = "0.10" futures-util = { version = "0.3.17", default-features = false, features = ["sink", "async-await-macro"] } -tokio = { version = "1.18.4", features = ["io-util", "rt-multi-thread", "macros", "fs"] } +tokio = { version = "1.23.1", features = ["io-util", "rt-multi-thread", "macros", "fs"] } diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index bf90ff46..64ac1d7c 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -46,7 +46,7 @@ actix-utils = "3" futures-core = { version = "0.3.7", default-features = false, features = ["alloc"] } impl-more = "0.1" pin-project-lite = "0.2.7" -tokio = "1.18.4" +tokio = "1.23.1" tokio-util = "0.7" tracing = { version = "0.1.30", default-features = false, features = ["log"] } diff --git a/local-channel/Cargo.toml b/local-channel/Cargo.toml index b99b397c..04a4b9b5 100644 --- a/local-channel/Cargo.toml +++ b/local-channel/Cargo.toml @@ -19,4 +19,4 @@ futures-util = { version = "0.3.17", default-features = false } local-waker = "0.1" [dev-dependencies] -tokio = { version = "1.18.4", features = ["rt", "macros"] } +tokio = { version = "1.23.1", features = ["rt", "macros"] } From 4cbe7412307ac662d33259d033d89468999c54e7 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 1 Apr 2023 22:26:08 +0100 Subject: [PATCH 37/79] use secure openssl version --- actix-server/Cargo.toml | 2 +- actix-tls/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index ba9ef03c..ade711f4 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -28,7 +28,7 @@ futures-core = { version = "0.3.17", default-features = false, features = ["allo futures-util = { version = "0.3.17", default-features = false, features = ["alloc"] } mio = { version = "0.8", features = ["os-poll", "net"] } num_cpus = "1.13" -socket2 = "0.4.2" +socket2 = "0.4.2" # TODO(MSRV 1.64) update to 0.5 tokio = { version = "1.23.1", features = ["sync"] } tracing = { version = "0.1.30", default-features = false, features = ["log"] } diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index 64ac1d7c..9c463e2c 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -54,7 +54,7 @@ tracing = { version = "0.1.30", default-features = false, features = ["log"] } http = { version = "0.2.3", optional = true } # openssl -tls-openssl = { package = "openssl", version = "0.10.9", optional = true } +tls-openssl = { package = "openssl", version = "0.10.48", optional = true } tokio-openssl = { version = "0.6", optional = true } # rustls From 177590a7d86c77fca5719f90fd63acc9d5002b67 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 1 Apr 2023 22:45:18 +0100 Subject: [PATCH 38/79] increase bytestring test coverage --- bytestring/src/lib.rs | 93 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 75 insertions(+), 18 deletions(-) diff --git a/bytestring/src/lib.rs b/bytestring/src/lib.rs index d75a05f5..3892d09e 100644 --- a/bytestring/src/lib.rs +++ b/bytestring/src/lib.rs @@ -11,7 +11,7 @@ use alloc::{ string::{String, ToString}, vec::Vec, }; -use core::{borrow, convert::TryFrom, fmt, hash, ops, str}; +use core::{borrow::Borrow, convert::TryFrom, fmt, hash, ops, str}; use bytes::Bytes; @@ -132,13 +132,12 @@ impl ops::Deref for ByteString { #[inline] fn deref(&self) -> &str { let bytes = self.0.as_ref(); - // SAFETY: - // UTF-8 validity is guaranteed at during construction. + // SAFETY: UTF-8 validity is guaranteed during construction. unsafe { str::from_utf8_unchecked(bytes) } } } -impl borrow::Borrow for ByteString { +impl Borrow for ByteString { fn borrow(&self) -> &str { self } @@ -292,7 +291,7 @@ mod serde { #[cfg(test)] mod test { - use alloc::borrow::ToOwned; + use alloc::{borrow::ToOwned, format, vec}; use core::{ hash::{Hash, Hasher}, panic::{RefUnwindSafe, UnwindSafe}, @@ -309,7 +308,7 @@ mod test { assert_impl_all!(ByteString: UnwindSafe, RefUnwindSafe); #[test] - fn test_partial_eq() { + fn eq() { let s: ByteString = ByteString::from_static("test"); assert_eq!(s, "test"); assert_eq!(s, *"test"); @@ -317,12 +316,45 @@ mod test { } #[test] - fn test_new() { + fn new() { let _: ByteString = ByteString::new(); } #[test] - fn test_hash() { + fn as_bytes() { + let buf = ByteString::new(); + assert!(buf.as_bytes().is_empty()); + + let buf = ByteString::from("hello"); + assert_eq!(buf.as_bytes(), "hello"); + } + + #[test] + fn from_bytes_unchecked() { + let buf = unsafe { ByteString::from_bytes_unchecked(Bytes::new()) }; + assert!(buf.is_empty()); + + let buf = unsafe { ByteString::from_bytes_unchecked(Bytes::from("hello")) }; + assert_eq!(buf, "hello"); + } + + #[test] + fn as_ref() { + let buf = ByteString::new(); + + let _: &ByteString = buf.as_ref(); + let _: &[u8] = buf.as_ref(); + } + + #[test] + fn borrow() { + let buf = ByteString::new(); + + let _: &str = buf.borrow(); + } + + #[test] + fn hash() { let mut hasher1 = AHasher::default(); "str".hash(&mut hasher1); @@ -333,7 +365,7 @@ mod test { } #[test] - fn test_from_string() { + fn from_string() { let s: ByteString = "hello".to_owned().into(); assert_eq!(&s, "hello"); let t: &str = s.as_ref(); @@ -341,23 +373,30 @@ mod test { } #[test] - fn test_from_str() { + fn from_str() { let _: ByteString = "str".into(); + let _: ByteString = "str".to_owned().into_boxed_str().into(); } #[test] - fn test_from_static_str() { + fn to_string() { + let buf = ByteString::from("foo"); + assert_eq!(String::from(buf), "foo"); + } + + #[test] + fn from_static_str() { static _S: ByteString = ByteString::from_static("hello"); let _ = ByteString::from_static("str"); } #[test] - fn test_try_from_slice() { + fn try_from_slice() { let _ = ByteString::try_from(b"nice bytes").unwrap(); } #[test] - fn test_try_from_array() { + fn try_from_array() { assert_eq!( ByteString::try_from([b'h', b'i']).unwrap(), ByteString::from_static("hi") @@ -365,25 +404,43 @@ mod test { } #[test] - fn test_try_from_bytes() { + fn try_from_vec() { + let _ = ByteString::try_from(vec![b'f', b'o', b'o']).unwrap(); + ByteString::try_from(vec![0, 159, 146, 150]).unwrap_err(); + } + + #[test] + fn try_from_bytes() { let _ = ByteString::try_from(Bytes::from_static(b"nice bytes")).unwrap(); } #[test] - fn test_try_from_bytes_mut() { + fn try_from_bytes_mut() { let _ = ByteString::try_from(bytes::BytesMut::from(&b"nice bytes"[..])).unwrap(); } + #[test] + fn display() { + let buf = ByteString::from("bar"); + assert_eq!(format!("{buf}"), "bar"); + } + + #[test] + fn debug() { + let buf = ByteString::from("baz"); + assert_eq!(format!("{buf:?}"), r#""baz""#); + } + #[cfg(feature = "serde")] #[test] - fn test_serialize() { + fn serialize() { let s: ByteString = serde_json::from_str(r#""nice bytes""#).unwrap(); assert_eq!(s, "nice bytes"); } #[cfg(feature = "serde")] #[test] - fn test_deserialize() { + fn deserialize() { let s = serde_json::to_string(&ByteString::from_static("nice bytes")).unwrap(); assert_eq!(s, r#""nice bytes""#); } @@ -399,7 +456,7 @@ mod test { #[test] #[should_panic] - fn test_slice_ref_catches_not_a_subset() { + fn slice_ref_catches_not_a_subset() { // panics because the given slice is not derived from the original byte string, despite // being a logical subset of the string ByteString::from_static("foo bar").slice_ref("foo"); From 8d5d1dbf6ffedefc73d0ad7fe01494a0c0175626 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Mon, 17 Jul 2023 03:05:39 +0100 Subject: [PATCH 39/79] bump MSRV to 1.65 (#485) --- .github/workflows/ci.yml | 2 +- .rustfmt.toml | 3 ++ Cargo.toml | 4 ++ README.md | 2 +- actix-codec/CHANGES.md | 2 +- actix-codec/Cargo.toml | 4 +- actix-codec/src/framed.rs | 10 +---- actix-codec/src/lib.rs | 18 +++++---- actix-codec/tests/test_framed_sink.rs | 5 +-- actix-macros/CHANGES.md | 2 +- actix-macros/Cargo.toml | 4 +- actix-macros/tests/trybuild.rs | 2 +- .../tests/trybuild/main-02-only-async.stderr | 11 ++---- actix-rt/CHANGES.md | 2 +- actix-rt/Cargo.toml | 4 +- actix-rt/examples/hyper.rs | 3 +- actix-rt/src/arbiter.rs | 11 ++---- actix-rt/src/lib.rs | 22 ++++++----- actix-rt/src/system.rs | 4 +- actix-server/CHANGES.md | 2 +- actix-server/Cargo.toml | 6 +-- actix-server/src/builder.rs | 7 +--- actix-server/src/lib.rs | 9 ++--- actix-server/src/service.rs | 2 +- actix-server/src/socket.rs | 5 +-- actix-server/src/worker.rs | 13 ++++--- actix-service/CHANGES.md | 2 +- actix-service/Cargo.toml | 4 +- actix-service/src/and_then.rs | 33 +++------------- actix-service/src/apply.rs | 3 +- actix-service/src/apply_cfg.rs | 3 +- actix-service/src/boxed.rs | 3 +- actix-service/src/fn_service.rs | 16 +++----- actix-service/src/lib.rs | 14 ++++--- actix-service/src/map_err.rs | 3 +- actix-service/src/pipeline.rs | 19 +++++----- actix-tls/CHANGES.md | 2 +- actix-tls/Cargo.toml | 4 +- actix-tls/src/accept/mod.rs | 38 +++++++++---------- actix-tls/src/accept/rustls.rs | 3 +- actix-tls/src/connect/mod.rs | 16 ++++---- actix-tls/src/connect/native_tls.rs | 3 +- actix-tls/src/connect/openssl.rs | 4 +- actix-tls/src/connect/rustls.rs | 11 +++--- actix-tls/tests/accept-openssl.rs | 8 ++-- actix-tls/tests/accept-rustls.rs | 14 +++---- actix-tls/tests/test_resolvers.rs | 3 +- actix-tracing/CHANGES.md | 2 +- actix-tracing/Cargo.toml | 4 +- actix-tracing/src/lib.rs | 8 ++-- actix-utils/CHANGES.md | 2 +- actix-utils/Cargo.toml | 4 +- actix-utils/src/future/mod.rs | 8 ++-- bytestring/Cargo.toml | 4 +- bytestring/src/lib.rs | 6 ++- local-channel/CHANGES.md | 2 +- local-channel/Cargo.toml | 4 +- local-waker/CHANGES.md | 2 +- local-waker/Cargo.toml | 4 +- rustfmt.toml | 2 - 60 files changed, 188 insertions(+), 229 deletions(-) create mode 100644 .rustfmt.toml delete mode 100644 rustfmt.toml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f59d79e9..cd9c5848 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: - { name: Windows (MinGW), os: windows-latest, triple: x86_64-pc-windows-gnu } - { name: Windows (32-bit), os: windows-latest, triple: i686-pc-windows-msvc } version: - - 1.60.0 + - 1.65.0 # MSRV - stable name: ${{ matrix.target.name }} / ${{ matrix.version }} diff --git a/.rustfmt.toml b/.rustfmt.toml new file mode 100644 index 00000000..71b9be3a --- /dev/null +++ b/.rustfmt.toml @@ -0,0 +1,3 @@ +group_imports = "StdExternalCrate" +imports_granularity = "Crate" +use_field_init_shorthand = true diff --git a/Cargo.toml b/Cargo.toml index ccd36595..62897764 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,10 @@ members = [ ] resolver = "2" +[workspace.package] +edition = "2021" +rust-version = "1.65" + [patch.crates-io] actix-codec = { path = "actix-codec" } actix-macros = { path = "actix-macros" } diff --git a/README.md b/README.md index fdf829f5..9d99d5ee 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ See example folders for [`actix-server`](./actix-server/examples) and [`actix-tl ## MSRV -Crates in this repo currently have a Minimum Supported Rust Version (MSRV) of 1.60. As a policy, we permit MSRV increases in non-breaking releases. +Crates in this repo currently have a Minimum Supported Rust Version (MSRV) of 1.65. As a policy, we permit MSRV increases in non-breaking releases. ## License diff --git a/actix-codec/CHANGES.md b/actix-codec/CHANGES.md index ebb867cf..14dc78c5 100644 --- a/actix-codec/CHANGES.md +++ b/actix-codec/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.60. +- Minimum supported Rust version (MSRV) is now 1.65. ## 0.5.1 - 2022-03-15 diff --git a/actix-codec/Cargo.toml b/actix-codec/Cargo.toml index 565bc830..d8f072df 100644 --- a/actix-codec/Cargo.toml +++ b/actix-codec/Cargo.toml @@ -10,8 +10,8 @@ keywords = ["network", "framework", "async", "futures"] repository = "https://github.com/actix/actix-net" categories = ["network-programming", "asynchronous"] license = "MIT OR Apache-2.0" -edition = "2021" -rust-version = "1.60" +edition.workspace = true +rust-version.workspace = true [dependencies] bitflags = "2" diff --git a/actix-codec/src/framed.rs b/actix-codec/src/framed.rs index 0d62a61c..6d6e1478 100644 --- a/actix-codec/src/framed.rs +++ b/actix-codec/src/framed.rs @@ -234,10 +234,7 @@ impl Framed { } /// Flush write buffer to underlying I/O stream. - pub fn flush( - mut self: Pin<&mut Self>, - cx: &mut Context<'_>, - ) -> Poll> + pub fn flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> where T: AsyncWrite, U: Encoder, @@ -270,10 +267,7 @@ impl Framed { } /// Flush write buffer and shutdown underlying I/O stream. - pub fn close( - mut self: Pin<&mut Self>, - cx: &mut Context<'_>, - ) -> Poll> + pub fn close(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> where T: AsyncWrite, U: Encoder, diff --git a/actix-codec/src/lib.rs b/actix-codec/src/lib.rs index 020e40e2..7dc28b35 100644 --- a/actix-codec/src/lib.rs +++ b/actix-codec/src/lib.rs @@ -11,14 +11,18 @@ #![doc(html_logo_url = "https://actix.rs/img/logo.png")] #![doc(html_favicon_url = "https://actix.rs/favicon.ico")] +pub use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; +pub use tokio_util::{ + codec::{Decoder, Encoder}, + io::poll_read_buf, +}; + mod bcodec; mod framed; mod lines; -pub use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; -pub use tokio_util::codec::{Decoder, Encoder}; -pub use tokio_util::io::poll_read_buf; - -pub use self::bcodec::BytesCodec; -pub use self::framed::{Framed, FramedParts}; -pub use self::lines::LinesCodec; +pub use self::{ + bcodec::BytesCodec, + framed::{Framed, FramedParts}, + lines::LinesCodec, +}; diff --git a/actix-codec/tests/test_framed_sink.rs b/actix-codec/tests/test_framed_sink.rs index 390aebf2..8c98ff18 100644 --- a/actix-codec/tests/test_framed_sink.rs +++ b/actix-codec/tests/test_framed_sink.rs @@ -81,10 +81,7 @@ impl AsyncWrite for Bilateral { other => Ready(other), } } - fn poll_shutdown( - self: Pin<&mut Self>, - _cx: &mut Context<'_>, - ) -> Poll> { + fn poll_shutdown(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { unimplemented!() } } diff --git a/actix-macros/CHANGES.md b/actix-macros/CHANGES.md index 1badd6b7..9385808c 100644 --- a/actix-macros/CHANGES.md +++ b/actix-macros/CHANGES.md @@ -3,7 +3,7 @@ ## Unreleased - 2023-xx-xx - Update `syn` dependency to `2`. -- Minimum supported Rust version (MSRV) is now 1.60. +- Minimum supported Rust version (MSRV) is now 1.65. ## 0.2.3 - 2021-10-19 diff --git a/actix-macros/Cargo.toml b/actix-macros/Cargo.toml index 902a6dd1..4aba5e53 100644 --- a/actix-macros/Cargo.toml +++ b/actix-macros/Cargo.toml @@ -10,8 +10,8 @@ description = "Macros for Actix system and runtime" repository = "https://github.com/actix/actix-net.git" categories = ["network-programming", "asynchronous"] license = "MIT OR Apache-2.0" -edition = "2021" -rust-version = "1.60" +edition.workspace = true +rust-version.workspace = true [lib] proc-macro = true diff --git a/actix-macros/tests/trybuild.rs b/actix-macros/tests/trybuild.rs index 7e399d49..b37b84ba 100644 --- a/actix-macros/tests/trybuild.rs +++ b/actix-macros/tests/trybuild.rs @@ -1,4 +1,4 @@ -#[rustversion::stable(1.60)] // MSRV +#[rustversion::stable(1.65)] // MSRV #[test] fn compile_macros() { let t = trybuild::TestCases::new(); diff --git a/actix-macros/tests/trybuild/main-02-only-async.stderr b/actix-macros/tests/trybuild/main-02-only-async.stderr index fc060071..2b15ecaa 100644 --- a/actix-macros/tests/trybuild/main-02-only-async.stderr +++ b/actix-macros/tests/trybuild/main-02-only-async.stderr @@ -1,14 +1,11 @@ error: the async keyword is missing from the function declaration - --> $DIR/main-02-only-async.rs:2:1 + --> tests/trybuild/main-02-only-async.rs:2:1 | 2 | fn main() { | ^^ error[E0601]: `main` function not found in crate `$CRATE` - --> $DIR/main-02-only-async.rs:1:1 + --> tests/trybuild/main-02-only-async.rs:4:2 | -1 | / #[actix_rt::main] -2 | | fn main() { -3 | | futures_util::future::ready(()).await -4 | | } - | |_^ consider adding a `main` function to `$DIR/tests/trybuild/main-02-only-async.rs` +4 | } + | ^ consider adding a `main` function to `$DIR/tests/trybuild/main-02-only-async.rs` diff --git a/actix-rt/CHANGES.md b/actix-rt/CHANGES.md index 547b7524..0cedbaa6 100644 --- a/actix-rt/CHANGES.md +++ b/actix-rt/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.60. +- Minimum supported Rust version (MSRV) is now 1.65. ## 2.8.0 - 2022-12-21 diff --git a/actix-rt/Cargo.toml b/actix-rt/Cargo.toml index fa5fc204..1256eefd 100644 --- a/actix-rt/Cargo.toml +++ b/actix-rt/Cargo.toml @@ -11,8 +11,8 @@ homepage = "https://actix.rs" repository = "https://github.com/actix/actix-net.git" categories = ["network-programming", "asynchronous"] license = "MIT OR Apache-2.0" -edition = "2021" -rust-version = "1.60" +edition.workspace = true +rust-version.workspace = true [features] default = ["macros"] diff --git a/actix-rt/examples/hyper.rs b/actix-rt/examples/hyper.rs index 45b5e551..41c5a7d8 100644 --- a/actix-rt/examples/hyper.rs +++ b/actix-rt/examples/hyper.rs @@ -20,8 +20,7 @@ fn main() { let make_service = make_service_fn(|_conn| async { Ok::<_, Infallible>(service_fn(handle)) }); - let server = - Server::bind(&SocketAddr::from(([127, 0, 0, 1], 3000))).serve(make_service); + let server = Server::bind(&SocketAddr::from(([127, 0, 0, 1], 3000))).serve(make_service); if let Err(err) = server.await { eprintln!("server error: {}", err); diff --git a/actix-rt/src/arbiter.rs b/actix-rt/src/arbiter.rs index a84e25ea..48cc752f 100644 --- a/actix-rt/src/arbiter.rs +++ b/actix-rt/src/arbiter.rs @@ -99,8 +99,7 @@ impl Arbiter { #[allow(clippy::new_without_default)] pub fn new() -> Arbiter { Self::with_tokio_rt(|| { - crate::runtime::default_tokio_runtime() - .expect("Cannot create new Arbiter's Runtime.") + crate::runtime::default_tokio_runtime().expect("Cannot create new Arbiter's Runtime.") }) } @@ -149,9 +148,7 @@ impl Arbiter { .send(SystemCommand::DeregisterArbiter(arb_id)); } }) - .unwrap_or_else(|err| { - panic!("Cannot spawn Arbiter's thread: {:?}. {:?}", &name, err) - }); + .unwrap_or_else(|err| panic!("Cannot spawn Arbiter's thread: {name:?}: {err:?}")); ready_rx.recv().unwrap(); @@ -201,9 +198,7 @@ impl Arbiter { .send(SystemCommand::DeregisterArbiter(arb_id)); } }) - .unwrap_or_else(|err| { - panic!("Cannot spawn Arbiter's thread: {:?}. {:?}", &name, err) - }); + .unwrap_or_else(|err| panic!("Cannot spawn Arbiter's thread: {name:?}: {err:?}")); ready_rx.recv().unwrap(); diff --git a/actix-rt/src/lib.rs b/actix-rt/src/lib.rs index 23dd01e8..6f8057de 100644 --- a/actix-rt/src/lib.rs +++ b/actix-rt/src/lib.rs @@ -65,9 +65,11 @@ mod system; pub use tokio::pin; use tokio::task::JoinHandle; -pub use self::arbiter::{Arbiter, ArbiterHandle}; -pub use self::runtime::Runtime; -pub use self::system::{System, SystemRunner}; +pub use self::{ + arbiter::{Arbiter, ArbiterHandle}, + runtime::Runtime, + system::{System, SystemRunner}, +}; pub mod signal { //! Asynchronous signal handling (Tokio re-exports). @@ -89,12 +91,13 @@ pub mod net { task::{Context, Poll}, }; - pub use tokio::io::Ready; use tokio::io::{AsyncRead, AsyncWrite, Interest}; - pub use tokio::net::UdpSocket; - pub use tokio::net::{TcpListener, TcpSocket, TcpStream}; #[cfg(unix)] pub use tokio::net::{UnixDatagram, UnixListener, UnixStream}; + pub use tokio::{ + io::Ready, + net::{TcpListener, TcpSocket, TcpStream, UdpSocket}, + }; /// Extension trait over async read+write types that can also signal readiness. #[doc(hidden)] @@ -153,10 +156,9 @@ pub mod net { pub mod time { //! Utilities for tracking time (Tokio re-exports). - pub use tokio::time::Instant; - pub use tokio::time::{interval, interval_at, Interval}; - pub use tokio::time::{sleep, sleep_until, Sleep}; - pub use tokio::time::{timeout, Timeout}; + pub use tokio::time::{ + interval, interval_at, sleep, sleep_until, timeout, Instant, Interval, Sleep, Timeout, + }; } pub mod task { diff --git a/actix-rt/src/system.rs b/actix-rt/src/system.rs index d0494a22..7423a01e 100644 --- a/actix-rt/src/system.rs +++ b/actix-rt/src/system.rs @@ -226,9 +226,7 @@ impl SystemRunner { /// Runs the event loop until [stopped](System::stop_with_code), returning the exit code. pub fn run_with_code(self) -> io::Result { - unimplemented!( - "SystemRunner::run_with_code is not implemented for io-uring feature yet" - ); + unimplemented!("SystemRunner::run_with_code is not implemented for io-uring feature yet"); } /// Runs the provided future, blocking the current thread until the future completes. diff --git a/actix-server/CHANGES.md b/actix-server/CHANGES.md index 1147dcbd..e98f9d2b 100644 --- a/actix-server/CHANGES.md +++ b/actix-server/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.60. +- Minimum supported Rust version (MSRV) is now 1.65. ## 2.2.0 - 2022-12-21 diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index ade711f4..62f13107 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -12,8 +12,8 @@ categories = ["network-programming", "asynchronous"] homepage = "https://actix.rs" repository = "https://github.com/actix/actix-net.git" license = "MIT OR Apache-2.0" -edition = "2021" -rust-version = "1.60" +edition.workspace = true +rust-version.workspace = true [features] default = [] @@ -28,7 +28,7 @@ futures-core = { version = "0.3.17", default-features = false, features = ["allo futures-util = { version = "0.3.17", default-features = false, features = ["alloc"] } mio = { version = "0.8", features = ["os-poll", "net"] } num_cpus = "1.13" -socket2 = "0.4.2" # TODO(MSRV 1.64) update to 0.5 +socket2 = "0.5" tokio = { version = "1.23.1", features = ["sync"] } tracing = { version = "0.1.30", default-features = false, features = ["log"] } diff --git a/actix-server/src/builder.rs b/actix-server/src/builder.rs index b6646081..badac77b 100644 --- a/actix-server/src/builder.rs +++ b/actix-server/src/builder.rs @@ -7,9 +7,7 @@ use tracing::{info, trace}; use crate::{ server::ServerCommand, service::{InternalServiceFactory, ServerServiceFactory, StreamNewService}, - socket::{ - create_mio_tcp_listener, MioListener, MioTcpListener, StdTcpListener, ToSocketAddrs, - }, + socket::{create_mio_tcp_listener, MioListener, MioTcpListener, StdTcpListener, ToSocketAddrs}, worker::ServerWorkerConfig, Server, }; @@ -246,8 +244,7 @@ impl ServerBuilder { use std::net::{IpAddr, Ipv4Addr}; lst.set_nonblocking(true)?; let token = self.next_token(); - let addr = - crate::socket::StdSocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080); + let addr = crate::socket::StdSocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080); self.factories.push(StreamNewService::create( name.as_ref().to_string(), token, diff --git a/actix-server/src/lib.rs b/actix-server/src/lib.rs index 532313b6..5e265d74 100644 --- a/actix-server/src/lib.rs +++ b/actix-server/src/lib.rs @@ -18,13 +18,12 @@ mod test_server; mod waker_queue; mod worker; -pub use self::builder::ServerBuilder; -pub use self::handle::ServerHandle; -pub use self::server::Server; -pub use self::service::ServerServiceFactory; #[doc(hidden)] pub use self::socket::FromStream; -pub use self::test_server::TestServer; +pub use self::{ + builder::ServerBuilder, handle::ServerHandle, server::Server, service::ServerServiceFactory, + test_server::TestServer, +}; /// Start server building process #[doc(hidden)] diff --git a/actix-server/src/service.rs b/actix-server/src/service.rs index f07ec3e5..eba1470e 100644 --- a/actix-server/src/service.rs +++ b/actix-server/src/service.rs @@ -78,7 +78,7 @@ where Ok(()) } Err(err) => { - error!("can not convert to an async TCP stream: {}", err); + error!("can not convert to an async TCP stream: {err}"); Err(()) } }) diff --git a/actix-server/src/socket.rs b/actix-server/src/socket.rs index 8d2ffe8f..f0942e38 100644 --- a/actix-server/src/socket.rs +++ b/actix-server/src/socket.rs @@ -8,8 +8,7 @@ pub(crate) use mio::net::TcpListener as MioTcpListener; use mio::{event::Source, Interest, Registry, Token}; #[cfg(unix)] pub(crate) use { - mio::net::UnixListener as MioUnixListener, - std::os::unix::net::UnixListener as StdUnixListener, + mio::net::UnixListener as MioUnixListener, std::os::unix::net::UnixListener as StdUnixListener, }; pub(crate) enum MioListener { @@ -105,7 +104,7 @@ impl fmt::Debug for MioListener { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match *self { MioListener::Tcp(ref lst) => write!(f, "{:?}", lst), - #[cfg(all(unix))] + #[cfg(unix)] MioListener::Uds(ref lst) => write!(f, "{:?}", lst), } } diff --git a/actix-server/src/worker.rs b/actix-server/src/worker.rs index 2765ae4a..a9ae97a0 100644 --- a/actix-server/src/worker.rs +++ b/actix-server/src/worker.rs @@ -625,8 +625,8 @@ impl Future for ServerWorker { let factory_id = restart.factory_id; let token = restart.token; - let (token_new, service) = ready!(restart.fut.as_mut().poll(cx)) - .unwrap_or_else(|_| { + let (token_new, service) = + ready!(restart.fut.as_mut().poll(cx)).unwrap_or_else(|_| { panic!( "Can not restart {:?} service", this.factories[factory_id].name(token) @@ -697,7 +697,10 @@ impl Future for ServerWorker { match ready!(this.conn_rx.poll_recv(cx)) { Some(msg) => { let guard = this.counter.guard(); - let _ = this.services[msg.token].service.call((guard, msg.io)); + let _ = this.services[msg.token] + .service + .call((guard, msg.io)) + .into_inner(); } None => return Poll::Ready(()), }; @@ -706,9 +709,7 @@ impl Future for ServerWorker { } } -fn wrap_worker_services( - services: Vec<(usize, usize, BoxedServerService)>, -) -> Vec { +fn wrap_worker_services(services: Vec<(usize, usize, BoxedServerService)>) -> Vec { services .into_iter() .fold(Vec::new(), |mut services, (idx, token, service)| { diff --git a/actix-service/CHANGES.md b/actix-service/CHANGES.md index 0640c1cd..ee549941 100644 --- a/actix-service/CHANGES.md +++ b/actix-service/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.60. +- Minimum supported Rust version (MSRV) is now 1.65. ## 2.0.2 - 2021-12-18 diff --git a/actix-service/Cargo.toml b/actix-service/Cargo.toml index 74904634..dcb6652f 100644 --- a/actix-service/Cargo.toml +++ b/actix-service/Cargo.toml @@ -10,8 +10,8 @@ keywords = ["network", "framework", "async", "futures", "service"] categories = ["network-programming", "asynchronous", "no-std"] repository = "https://github.com/actix/actix-net" license = "MIT OR Apache-2.0" -edition = "2021" -rust-version = "1.60" +edition.workspace = true +rust-version.workspace = true [dependencies] futures-core = { version = "0.3.17", default-features = false } diff --git a/actix-service/src/and_then.rs b/actix-service/src/and_then.rs index 38980079..28a17044 100644 --- a/actix-service/src/and_then.rs +++ b/actix-service/src/and_then.rs @@ -121,12 +121,7 @@ pub struct AndThenServiceFactory where A: ServiceFactory, A::Config: Clone, - B: ServiceFactory< - A::Response, - Config = A::Config, - Error = A::Error, - InitError = A::InitError, - >, + B: ServiceFactory, { inner: Rc<(A, B)>, _phantom: PhantomData, @@ -136,12 +131,7 @@ impl AndThenServiceFactory where A: ServiceFactory, A::Config: Clone, - B: ServiceFactory< - A::Response, - Config = A::Config, - Error = A::Error, - InitError = A::InitError, - >, + B: ServiceFactory, { /// Create new `AndThenFactory` combinator pub(crate) fn new(a: A, b: B) -> Self { @@ -156,12 +146,7 @@ impl ServiceFactory for AndThenServiceFactory where A: ServiceFactory, A::Config: Clone, - B: ServiceFactory< - A::Response, - Config = A::Config, - Error = A::Error, - InitError = A::InitError, - >, + B: ServiceFactory, { type Response = B::Response; type Error = A::Error; @@ -184,12 +169,7 @@ impl Clone for AndThenServiceFactory where A: ServiceFactory, A::Config: Clone, - B: ServiceFactory< - A::Response, - Config = A::Config, - Error = A::Error, - InitError = A::InitError, - >, + B: ServiceFactory, { fn clone(&self) -> Self { Self { @@ -334,9 +314,8 @@ mod tests { async fn test_new_service() { let cnt = Rc::new(Cell::new(0)); let cnt2 = cnt.clone(); - let new_srv = - pipeline_factory(fn_factory(move || ready(Ok::<_, ()>(Srv1(cnt2.clone()))))) - .and_then(move || ready(Ok(Srv2(cnt.clone())))); + let new_srv = pipeline_factory(fn_factory(move || ready(Ok::<_, ()>(Srv1(cnt2.clone()))))) + .and_then(move || ready(Ok(Srv2(cnt.clone())))); let srv = new_srv.new_service(()).await.unwrap(); let res = srv.call("srv1").await; diff --git a/actix-service/src/apply.rs b/actix-service/src/apply.rs index c77f4242..d33bdcd8 100644 --- a/actix-service/src/apply.rs +++ b/actix-service/src/apply.rs @@ -140,8 +140,7 @@ where } } -impl ServiceFactory - for ApplyFactory +impl ServiceFactory for ApplyFactory where SF: ServiceFactory, F: Fn(Req, &SF::Service) -> Fut + Clone, diff --git a/actix-service/src/apply_cfg.rs b/actix-service/src/apply_cfg.rs index 25fc5fc2..028fb317 100644 --- a/actix-service/src/apply_cfg.rs +++ b/actix-service/src/apply_cfg.rs @@ -198,8 +198,7 @@ pin_project! { } } -impl Future - for ApplyConfigServiceFactoryResponse +impl Future for ApplyConfigServiceFactoryResponse where SF: ServiceFactory, SF::InitError: From, diff --git a/actix-service/src/boxed.rs b/actix-service/src/boxed.rs index 3141c5e4..cc9ad410 100644 --- a/actix-service/src/boxed.rs +++ b/actix-service/src/boxed.rs @@ -91,8 +91,7 @@ type Inner = Box< >, >; -impl ServiceFactory - for BoxServiceFactory +impl ServiceFactory for BoxServiceFactory where Req: 'static, Res: 'static, diff --git a/actix-service/src/fn_service.rs b/actix-service/src/fn_service.rs index a2379270..2dac8697 100644 --- a/actix-service/src/fn_service.rs +++ b/actix-service/src/fn_service.rs @@ -3,9 +3,7 @@ use core::{future::Future, marker::PhantomData}; use crate::{ok, IntoService, IntoServiceFactory, Ready, Service, ServiceFactory}; /// Create `ServiceFactory` for function that can act as a `Service` -pub fn fn_service( - f: F, -) -> FnServiceFactory +pub fn fn_service(f: F) -> FnServiceFactory where F: Fn(Req) -> Fut + Clone, Fut: Future>, @@ -48,9 +46,7 @@ where /// Ok(()) /// } /// ``` -pub fn fn_factory( - f: F, -) -> FnServiceNoConfig +pub fn fn_factory(f: F) -> FnServiceNoConfig where F: Fn() -> Fut, Fut: Future>, @@ -265,8 +261,7 @@ where } } -impl ServiceFactory - for FnServiceConfig +impl ServiceFactory for FnServiceConfig where F: Fn(Cfg) -> Fut, Fut: Future>, @@ -404,9 +399,8 @@ mod tests { ok::<_, Rc>(fn_service(|_: Rc| ok::<_, Rc>(Rc::new(0u8)))) }); - let fac_2 = fn_factory(|| { - ok::<_, Rc>(fn_service(|_: Rc| ok::<_, Rc>(Rc::new(0u8)))) - }); + let fac_2 = + fn_factory(|| ok::<_, Rc>(fn_service(|_: Rc| ok::<_, Rc>(Rc::new(0u8))))); fn is_send(_: &T) {} diff --git a/actix-service/src/lib.rs b/actix-service/src/lib.rs index 091a7fd7..fbbdfeb8 100644 --- a/actix-service/src/lib.rs +++ b/actix-service/src/lib.rs @@ -33,14 +33,16 @@ mod then; mod transform; mod transform_err; -pub use self::apply::{apply_fn, apply_fn_factory}; -pub use self::apply_cfg::{apply_cfg, apply_cfg_factory}; -pub use self::ext::{ServiceExt, ServiceFactoryExt, TransformExt}; -pub use self::fn_service::{fn_factory, fn_factory_with_config, fn_service}; -pub use self::map_config::{map_config, unit_config}; #[allow(unused_imports)] use self::ready::{err, ok, ready, Ready}; -pub use self::transform::{apply, ApplyTransform, Transform}; +pub use self::{ + apply::{apply_fn, apply_fn_factory}, + apply_cfg::{apply_cfg, apply_cfg_factory}, + ext::{ServiceExt, ServiceFactoryExt, TransformExt}, + fn_service::{fn_factory, fn_factory_with_config, fn_service}, + map_config::{map_config, unit_config}, + transform::{apply, ApplyTransform, Transform}, +}; /// An asynchronous operation from `Request` to a `Response`. /// diff --git a/actix-service/src/map_err.rs b/actix-service/src/map_err.rs index 3ce6f418..780a64c7 100644 --- a/actix-service/src/map_err.rs +++ b/actix-service/src/map_err.rs @@ -206,8 +206,7 @@ mod tests { use super::*; use crate::{ - err, ok, IntoServiceFactory, Ready, Service, ServiceExt, ServiceFactory, - ServiceFactoryExt, + err, ok, IntoServiceFactory, Ready, Service, ServiceExt, ServiceFactory, ServiceFactoryExt, }; struct Srv; diff --git a/actix-service/src/pipeline.rs b/actix-service/src/pipeline.rs index 2617d0ed..118f9797 100644 --- a/actix-service/src/pipeline.rs +++ b/actix-service/src/pipeline.rs @@ -6,12 +6,14 @@ use core::{ task::{Context, Poll}, }; -use crate::and_then::{AndThenService, AndThenServiceFactory}; -use crate::map::{Map, MapServiceFactory}; -use crate::map_err::{MapErr, MapErrServiceFactory}; -use crate::map_init_err::MapInitErr; -use crate::then::{ThenService, ThenServiceFactory}; -use crate::{IntoService, IntoServiceFactory, Service, ServiceFactory}; +use crate::{ + and_then::{AndThenService, AndThenServiceFactory}, + map::{Map, MapServiceFactory}, + map_err::{MapErr, MapErrServiceFactory}, + map_init_err::MapInitErr, + then::{ThenService, ThenServiceFactory}, + IntoService, IntoServiceFactory, Service, ServiceFactory, +}; /// Construct new pipeline with one service in pipeline chain. pub(crate) fn pipeline(service: I) -> Pipeline @@ -252,10 +254,7 @@ where } /// Map this service's error to a different error, returning a new service. - pub fn map_err( - self, - f: F, - ) -> PipelineFactory, Req> + pub fn map_err(self, f: F) -> PipelineFactory, Req> where Self: Sized, F: Fn(SF::Error) -> E + Clone, diff --git a/actix-tls/CHANGES.md b/actix-tls/CHANGES.md index f4f248b2..0381e6de 100644 --- a/actix-tls/CHANGES.md +++ b/actix-tls/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.60. +- Minimum supported Rust version (MSRV) is now 1.65. ## 3.0.4 - 2022-03-15 diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index 9c463e2c..d65d675b 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -10,8 +10,8 @@ keywords = ["network", "tls", "ssl", "async", "transport"] repository = "https://github.com/actix/actix-net.git" categories = ["network-programming", "asynchronous", "cryptography"] license = "MIT OR Apache-2.0" -edition = "2021" -rust-version = "1.60" +edition.workspace = true +rust-version.workspace = true [package.metadata.docs.rs] all-features = true diff --git a/actix-tls/src/accept/mod.rs b/actix-tls/src/accept/mod.rs index 13c4db37..1eee6720 100644 --- a/actix-tls/src/accept/mod.rs +++ b/actix-tls/src/accept/mod.rs @@ -56,6 +56,25 @@ pub enum TlsError { Service(SvcErr), } +impl TlsError { + /// Casts the infallible service error type returned from acceptors into caller's type. + /// + /// # Examples + /// ``` + /// # use std::convert::Infallible; + /// # use actix_tls::accept::TlsError; + /// let a: TlsError = TlsError::Tls(42); + /// let _b: TlsError = a.into_service_error(); + /// ``` + pub fn into_service_error(self) -> TlsError { + match self { + Self::Timeout => TlsError::Timeout, + Self::Tls(err) => TlsError::Tls(err), + Self::Service(err) => match err {}, + } + } +} + impl fmt::Display for TlsError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { @@ -80,25 +99,6 @@ where } } -impl TlsError { - /// Casts the infallible service error type returned from acceptors into caller's type. - /// - /// # Examples - /// ``` - /// # use std::convert::Infallible; - /// # use actix_tls::accept::TlsError; - /// let a: TlsError = TlsError::Tls(42); - /// let _b: TlsError = a.into_service_error(); - /// ``` - pub fn into_service_error(self) -> TlsError { - match self { - Self::Timeout => TlsError::Timeout, - Self::Tls(err) => TlsError::Tls(err), - Self::Service(err) => match err {}, - } - } -} - #[cfg(test)] mod tests { use super::*; diff --git a/actix-tls/src/accept/rustls.rs b/actix-tls/src/accept/rustls.rs index bf324e3c..85cf5b00 100644 --- a/actix-tls/src/accept/rustls.rs +++ b/actix-tls/src/accept/rustls.rs @@ -23,8 +23,7 @@ use actix_utils::{ }; use pin_project_lite::pin_project; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; -use tokio_rustls::rustls::ServerConfig; -use tokio_rustls::{Accept, TlsAcceptor}; +use tokio_rustls::{rustls::ServerConfig, Accept, TlsAcceptor}; use super::{TlsError, DEFAULT_TLS_HANDSHAKE_TIMEOUT, MAX_CONN_COUNTER}; diff --git a/actix-tls/src/connect/mod.rs b/actix-tls/src/connect/mod.rs index df002585..dae1f7b1 100644 --- a/actix-tls/src/connect/mod.rs +++ b/actix-tls/src/connect/mod.rs @@ -33,10 +33,12 @@ pub mod rustls; #[cfg(feature = "native-tls")] pub mod native_tls; -pub use self::connection::Connection; -pub use self::connector::{Connector, ConnectorService}; -pub use self::error::ConnectError; -pub use self::host::Host; -pub use self::info::ConnectInfo; -pub use self::resolve::Resolve; -pub use self::resolver::{Resolver, ResolverService}; +pub use self::{ + connection::Connection, + connector::{Connector, ConnectorService}, + error::ConnectError, + host::Host, + info::ConnectInfo, + resolve::Resolve, + resolver::{Resolver, ResolverService}, +}; diff --git a/actix-tls/src/connect/native_tls.rs b/actix-tls/src/connect/native_tls.rs index 37b9ffa4..16863ce0 100644 --- a/actix-tls/src/connect/native_tls.rs +++ b/actix-tls/src/connect/native_tls.rs @@ -19,8 +19,7 @@ use crate::connect::{Connection, Host}; pub mod reexports { //! Re-exports from `native-tls` and `tokio-native-tls` that are useful for connectors. - pub use tokio_native_tls::native_tls::TlsConnector; - pub use tokio_native_tls::TlsStream as AsyncTlsStream; + pub use tokio_native_tls::{native_tls::TlsConnector, TlsStream as AsyncTlsStream}; } /// Connector service and factory using `native-tls`. diff --git a/actix-tls/src/connect/openssl.rs b/actix-tls/src/connect/openssl.rs index caff4f0f..ab2841bb 100644 --- a/actix-tls/src/connect/openssl.rs +++ b/actix-tls/src/connect/openssl.rs @@ -22,9 +22,7 @@ use crate::connect::{Connection, Host}; pub mod reexports { //! Re-exports from `openssl` and `tokio-openssl` that are useful for connectors. - pub use openssl::ssl::{ - Error, HandshakeError, SslConnector, SslConnectorBuilder, SslMethod, - }; + pub use openssl::ssl::{Error, HandshakeError, SslConnector, SslConnectorBuilder, SslMethod}; pub use tokio_openssl::SslStream as AsyncSslStream; } diff --git a/actix-tls/src/connect/rustls.rs b/actix-tls/src/connect/rustls.rs index 0a44479a..5706047d 100644 --- a/actix-tls/src/connect/rustls.rs +++ b/actix-tls/src/connect/rustls.rs @@ -15,9 +15,11 @@ use actix_rt::net::ActixStream; use actix_service::{Service, ServiceFactory}; use actix_utils::future::{ok, Ready}; use futures_core::ready; -use tokio_rustls::rustls::{client::ServerName, OwnedTrustAnchor, RootCertStore}; -use tokio_rustls::{client::TlsStream as AsyncTlsStream, rustls::ClientConfig}; -use tokio_rustls::{Connect as RustlsConnect, TlsConnector as RustlsTlsConnector}; +use tokio_rustls::{ + client::TlsStream as AsyncTlsStream, + rustls::{client::ServerName, ClientConfig, OwnedTrustAnchor, RootCertStore}, + Connect as RustlsConnect, TlsConnector as RustlsTlsConnector, +}; use tracing::trace; use webpki_roots::TLS_SERVER_ROOTS; @@ -26,8 +28,7 @@ use crate::connect::{Connection, Host}; pub mod reexports { //! Re-exports from `rustls` and `webpki_roots` that are useful for connectors. - pub use tokio_rustls::client::TlsStream as AsyncTlsStream; - pub use tokio_rustls::rustls::ClientConfig; + pub use tokio_rustls::{client::TlsStream as AsyncTlsStream, rustls::ClientConfig}; pub use webpki_roots::TLS_SERVER_ROOTS; } diff --git a/actix-tls/tests/accept-openssl.rs b/actix-tls/tests/accept-openssl.rs index a4180f4d..ff707f65 100644 --- a/actix-tls/tests/accept-openssl.rs +++ b/actix-tls/tests/accept-openssl.rs @@ -17,11 +17,9 @@ use actix_utils::future::ok; use tokio_rustls::rustls::{Certificate, ClientConfig, RootCertStore, ServerName}; fn new_cert_and_key() -> (String, String) { - let cert = rcgen::generate_simple_self_signed(vec![ - "127.0.0.1".to_owned(), - "localhost".to_owned(), - ]) - .unwrap(); + let cert = + rcgen::generate_simple_self_signed(vec!["127.0.0.1".to_owned(), "localhost".to_owned()]) + .unwrap(); let key = cert.serialize_private_key_pem(); let cert = cert.serialize_pem().unwrap(); diff --git a/actix-tls/tests/accept-rustls.rs b/actix-tls/tests/accept-rustls.rs index 521af7f9..7955b36f 100644 --- a/actix-tls/tests/accept-rustls.rs +++ b/actix-tls/tests/accept-rustls.rs @@ -14,19 +14,19 @@ use std::io::{BufReader, Write}; use actix_rt::net::TcpStream; use actix_server::TestServer; use actix_service::ServiceFactoryExt as _; -use actix_tls::accept::rustls::{Acceptor, TlsStream}; -use actix_tls::connect::openssl::reexports::SslConnector; +use actix_tls::{ + accept::rustls::{Acceptor, TlsStream}, + connect::openssl::reexports::SslConnector, +}; use actix_utils::future::ok; use rustls_pemfile::{certs, pkcs8_private_keys}; use tls_openssl::ssl::SslVerifyMode; use tokio_rustls::rustls::{self, Certificate, PrivateKey, ServerConfig}; fn new_cert_and_key() -> (String, String) { - let cert = rcgen::generate_simple_self_signed(vec![ - "127.0.0.1".to_owned(), - "localhost".to_owned(), - ]) - .unwrap(); + let cert = + rcgen::generate_simple_self_signed(vec!["127.0.0.1".to_owned(), "localhost".to_owned()]) + .unwrap(); let key = cert.serialize_private_key_pem(); let cert = cert.serialize_pem().unwrap(); diff --git a/actix-tls/tests/test_resolvers.rs b/actix-tls/tests/test_resolvers.rs index f0674383..24f22732 100644 --- a/actix-tls/tests/test_resolvers.rs +++ b/actix-tls/tests/test_resolvers.rs @@ -51,8 +51,7 @@ async fn custom_resolver_connect() { use trust_dns_resolver::TokioAsyncResolver; - let srv = - TestServer::start(|| fn_service(|_io: TcpStream| async { Ok::<_, io::Error>(()) })); + let srv = TestServer::start(|| fn_service(|_io: TcpStream| async { Ok::<_, io::Error>(()) })); struct MyResolver { trust_dns: TokioAsyncResolver, diff --git a/actix-tracing/CHANGES.md b/actix-tracing/CHANGES.md index f672659a..f61d3f2b 100644 --- a/actix-tracing/CHANGES.md +++ b/actix-tracing/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.60. +- Minimum supported Rust version (MSRV) is now 1.65. ## 0.1.0 - 2020-01-15 diff --git a/actix-tracing/Cargo.toml b/actix-tracing/Cargo.toml index 27dfbc22..829a4b85 100644 --- a/actix-tracing/Cargo.toml +++ b/actix-tracing/Cargo.toml @@ -9,8 +9,8 @@ repository = "https://github.com/actix/actix-net.git" documentation = "https://docs.rs/actix-tracing" categories = ["network-programming", "asynchronous"] license = "MIT OR Apache-2.0" -edition = "2021" -rust-version = "1.60" +edition.workspace = true +rust-version.workspace = true [dependencies] actix-service = "2" diff --git a/actix-tracing/src/lib.rs b/actix-tracing/src/lib.rs index f5b08927..b1b9061b 100644 --- a/actix-tracing/src/lib.rs +++ b/actix-tracing/src/lib.rs @@ -118,9 +118,11 @@ where #[cfg(test)] mod test { - use std::cell::RefCell; - use std::collections::{BTreeMap, BTreeSet}; - use std::sync::{Arc, RwLock}; + use std::{ + cell::RefCell, + collections::{BTreeMap, BTreeSet}, + sync::{Arc, RwLock}, + }; use actix_service::{fn_factory, fn_service}; use slab::Slab; diff --git a/actix-utils/CHANGES.md b/actix-utils/CHANGES.md index af6434ab..fc7df208 100644 --- a/actix-utils/CHANGES.md +++ b/actix-utils/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.60. +- Minimum supported Rust version (MSRV) is now 1.65. ## 3.0.1 - 2022-10-21 diff --git a/actix-utils/Cargo.toml b/actix-utils/Cargo.toml index 38d8af5e..e3c2553f 100644 --- a/actix-utils/Cargo.toml +++ b/actix-utils/Cargo.toml @@ -10,8 +10,8 @@ keywords = ["network", "framework", "async", "futures"] categories = ["network-programming", "asynchronous"] repository = "https://github.com/actix/actix-net" license = "MIT OR Apache-2.0" -edition = "2021" -rust-version = "1.60" +edition.workspace = true +rust-version.workspace = true [dependencies] pin-project-lite = "0.2" diff --git a/actix-utils/src/future/mod.rs b/actix-utils/src/future/mod.rs index 399b54d2..ec87428d 100644 --- a/actix-utils/src/future/mod.rs +++ b/actix-utils/src/future/mod.rs @@ -4,6 +4,8 @@ mod either; mod poll_fn; mod ready; -pub use self::either::Either; -pub use self::poll_fn::{poll_fn, PollFn}; -pub use self::ready::{err, ok, ready, Ready}; +pub use self::{ + either::Either, + poll_fn::{poll_fn, PollFn}, + ready::{err, ok, ready, Ready}, +}; diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index 21da5a95..ab0e43c6 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -11,8 +11,8 @@ categories = ["no-std", "web-programming"] homepage = "https://actix.rs" repository = "https://github.com/actix/actix-net.git" license = "MIT OR Apache-2.0" -edition = "2021" -rust-version = "1.60" +edition.workspace = true +rust-version.workspace = true [dependencies] bytes = { version = "1.2", default-features = false } diff --git a/bytestring/src/lib.rs b/bytestring/src/lib.rs index 3892d09e..9c0007a2 100644 --- a/bytestring/src/lib.rs +++ b/bytestring/src/lib.rs @@ -253,8 +253,10 @@ impl fmt::Display for ByteString { mod serde { use alloc::string::String; - use serde::de::{Deserialize, Deserializer}; - use serde::ser::{Serialize, Serializer}; + use serde::{ + de::{Deserialize, Deserializer}, + ser::{Serialize, Serializer}, + }; use super::ByteString; diff --git a/local-channel/CHANGES.md b/local-channel/CHANGES.md index b1bad2f5..957adfd9 100644 --- a/local-channel/CHANGES.md +++ b/local-channel/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.60. +- Minimum supported Rust version (MSRV) is now 1.65. ## 0.1.3 - 2022-05-03 diff --git a/local-channel/Cargo.toml b/local-channel/Cargo.toml index 04a4b9b5..9e0f21b4 100644 --- a/local-channel/Cargo.toml +++ b/local-channel/Cargo.toml @@ -9,8 +9,8 @@ authors = [ repository = "https://github.com/actix/actix-net.git" keywords = ["channel", "local", "futures"] license = "MIT OR Apache-2.0" -edition = "2021" -rust-version = "1.60" +edition.workspace = true +rust-version.workspace = true [dependencies] futures-core = "0.3.17" diff --git a/local-waker/CHANGES.md b/local-waker/CHANGES.md index 68f4348b..f8aadaa6 100644 --- a/local-waker/CHANGES.md +++ b/local-waker/CHANGES.md @@ -2,7 +2,7 @@ ## Unreleased - 2023-xx-xx -- Minimum supported Rust version (MSRV) is now 1.60. +- Minimum supported Rust version (MSRV) is now 1.65. ## 0.1.3 - 2022-05-03 diff --git a/local-waker/Cargo.toml b/local-waker/Cargo.toml index 1baa08c0..640c47e1 100644 --- a/local-waker/Cargo.toml +++ b/local-waker/Cargo.toml @@ -10,7 +10,7 @@ repository = "https://github.com/actix/actix-net.git" keywords = ["waker", "local", "futures", "no-std"] categories = ["asynchronous", "no-std"] license = "MIT OR Apache-2.0" -edition = "2021" -rust-version = "1.60" +edition.workspace = true +rust-version.workspace = true [dependencies] diff --git a/rustfmt.toml b/rustfmt.toml deleted file mode 100644 index a8758a07..00000000 --- a/rustfmt.toml +++ /dev/null @@ -1,2 +0,0 @@ -max_width = 96 -group_imports = "StdExternalCrate" From 755b231e0049e31706141d4da2aeec6109f52555 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Andr=C3=A9?= Date: Mon, 17 Jul 2023 05:10:36 +0200 Subject: [PATCH 40/79] add MPTCP socket protocol (optional) (#466) Co-authored-by: Rob Ede --- actix-server/CHANGES.md | 1 + actix-server/src/builder.rs | 41 +++++++++++++++++++++++++++++++++++-- actix-server/src/lib.rs | 5 ++++- actix-server/src/socket.rs | 26 +++++++++++++++++++++-- 4 files changed, 68 insertions(+), 5 deletions(-) diff --git a/actix-server/CHANGES.md b/actix-server/CHANGES.md index e98f9d2b..1f9f7b3c 100644 --- a/actix-server/CHANGES.md +++ b/actix-server/CHANGES.md @@ -2,6 +2,7 @@ ## Unreleased - 2023-xx-xx +- Add support for MultiPath TCP (MPTCP) with `MpTcp` enum and `ServerBuilder::mptcp()` method. - Minimum supported Rust version (MSRV) is now 1.65. ## 2.2.0 - 2022-12-21 diff --git a/actix-server/src/builder.rs b/actix-server/src/builder.rs index badac77b..e1d3a2d3 100644 --- a/actix-server/src/builder.rs +++ b/actix-server/src/builder.rs @@ -12,6 +12,22 @@ use crate::{ Server, }; +/// Multipath TCP (MPTCP) preference. +/// +/// Also see [`ServerBuilder::mptcp()`]. +#[derive(Debug, Clone)] +pub enum MpTcp { + /// MPTCP will not be used when binding sockets. + Disabled, + + /// MPTCP will be attempted when binding sockets. If errors occur, regular TCP will be + /// attempted, too. + TcpFallback, + + /// MPTCP will be used when binding sockets (with no fallback). + NoFallback, +} + /// [Server] builder. pub struct ServerBuilder { pub(crate) threads: usize, @@ -19,6 +35,7 @@ pub struct ServerBuilder { pub(crate) backlog: u32, pub(crate) factories: Vec>, pub(crate) sockets: Vec<(usize, String, MioListener)>, + pub(crate) mptcp: MpTcp, pub(crate) exit: bool, pub(crate) listen_os_signals: bool, pub(crate) cmd_tx: UnboundedSender, @@ -43,6 +60,7 @@ impl ServerBuilder { factories: Vec::new(), sockets: Vec::new(), backlog: 2048, + mptcp: MpTcp::Disabled, exit: false, listen_os_signals: true, cmd_tx, @@ -96,6 +114,24 @@ impl ServerBuilder { self } + /// Sets MultiPath TCP (MPTCP) preference on bound sockets. + /// + /// Multipath TCP (MPTCP) builds on top of TCP to improve connection redundancy and performance + /// by sharing a network data stream across multiple underlying TCP sessions. See [mptcp.dev] + /// for more info about MPTCP itself. + /// + /// MPTCP is available on Linux kernel version 5.6 and higher. In addition, you'll also need to + /// ensure the kernel option is enabled using `sysctl net.mptcp.enabled=1`. + /// + /// This method will have no effect if called after a `bind()`. + /// + /// [mptcp.dev]: https://www.mptcp.dev + #[cfg(target_os = "linux")] + pub fn mptcp(mut self, mptcp_enabled: MpTcp) -> Self { + self.mptcp = mptcp_enabled; + self + } + /// Sets the maximum per-worker number of concurrent connections. /// /// All socket listeners will stop accepting connections when this limit is reached for @@ -144,7 +180,7 @@ impl ServerBuilder { U: ToSocketAddrs, N: AsRef, { - let sockets = bind_addr(addr, self.backlog)?; + let sockets = bind_addr(addr, self.backlog, &self.mptcp)?; trace!("binding server to: {:?}", &sockets); @@ -260,13 +296,14 @@ impl ServerBuilder { pub(super) fn bind_addr( addr: S, backlog: u32, + mptcp: &MpTcp, ) -> io::Result> { let mut opt_err = None; let mut success = false; let mut sockets = Vec::new(); for addr in addr.to_socket_addrs()? { - match create_mio_tcp_listener(addr, backlog) { + match create_mio_tcp_listener(addr, backlog, mptcp) { Ok(lst) => { success = true; sockets.push(lst); diff --git a/actix-server/src/lib.rs b/actix-server/src/lib.rs index 5e265d74..24adf8ff 100644 --- a/actix-server/src/lib.rs +++ b/actix-server/src/lib.rs @@ -21,7 +21,10 @@ mod worker; #[doc(hidden)] pub use self::socket::FromStream; pub use self::{ - builder::ServerBuilder, handle::ServerHandle, server::Server, service::ServerServiceFactory, + builder::{MpTcp, ServerBuilder}, + handle::ServerHandle, + server::Server, + service::ServerServiceFactory, test_server::TestServer, }; diff --git a/actix-server/src/socket.rs b/actix-server/src/socket.rs index f0942e38..486c0d46 100644 --- a/actix-server/src/socket.rs +++ b/actix-server/src/socket.rs @@ -11,6 +11,8 @@ pub(crate) use { mio::net::UnixListener as MioUnixListener, std::os::unix::net::UnixListener as StdUnixListener, }; +use crate::builder::MpTcp; + pub(crate) enum MioListener { Tcp(MioTcpListener), #[cfg(unix)] @@ -223,10 +225,30 @@ mod unix_impl { pub(crate) fn create_mio_tcp_listener( addr: StdSocketAddr, backlog: u32, + mptcp: &MpTcp, ) -> io::Result { use socket2::{Domain, Protocol, Socket, Type}; - let socket = Socket::new(Domain::for_address(addr), Type::STREAM, Some(Protocol::TCP))?; + #[cfg(not(target_os = "linux"))] + let protocol = Protocol::TCP; + #[cfg(target_os = "linux")] + let protocol = if matches!(mptcp, MpTcp::Disabled) { + Protocol::TCP + } else { + Protocol::MPTCP + }; + + let socket = match Socket::new(Domain::for_address(addr), Type::STREAM, Some(protocol)) { + Ok(sock) => sock, + + Err(err) if matches!(mptcp, MpTcp::TcpFallback) => { + tracing::warn!("binding socket as MPTCP failed: {err}"); + tracing::warn!("falling back to TCP"); + Socket::new(Domain::for_address(addr), Type::STREAM, Some(Protocol::TCP))? + } + + Err(err) => return Err(err), + }; socket.set_reuse_address(true)?; socket.set_nonblocking(true)?; @@ -247,7 +269,7 @@ mod tests { assert_eq!(format!("{}", addr), "127.0.0.1:8080"); let addr: StdSocketAddr = "127.0.0.1:0".parse().unwrap(); - let lst = create_mio_tcp_listener(addr, 128).unwrap(); + let lst = create_mio_tcp_listener(addr, 128, &MpTcp::Disabled).unwrap(); let lst = MioListener::Tcp(lst); assert!(format!("{:?}", lst).contains("TcpListener")); assert!(format!("{}", lst).contains("127.0.0.1")); From e539f83615b4cc853cd49c58be15c3bc25fec177 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Tue, 18 Jul 2023 01:47:37 +0100 Subject: [PATCH 41/79] attempt windows CI fix --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cd9c5848..ce5250c5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,10 +40,12 @@ jobs: - name: Install OpenSSL if: matrix.target.os == 'windows-latest' - run: choco install openssl + run: choco install openssl -y --forcex64 --no-progress - name: Set OpenSSL dir in env if: matrix.target.os == 'windows-latest' - run: echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append + run: | + echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append + echo 'OPENSSL_DIR=C:\Program Files\OpenSSL' | Out-File -FilePath $env:GITHUB_ENV -Append - name: Install Rust (${{ matrix.version }}) uses: actions-rust-lang/setup-rust-toolchain@v1 From 462ab6a4f091f9b3468569e521240c2dcb4021bc Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Tue, 18 Jul 2023 02:06:01 +0100 Subject: [PATCH 42/79] ci: try to fix master jobs on windows --- .github/workflows/ci-master.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml index 66bc042e..1fae5c39 100644 --- a/.github/workflows/ci-master.yml +++ b/.github/workflows/ci-master.yml @@ -39,10 +39,12 @@ jobs: - name: Install OpenSSL if: matrix.target.os == 'windows-latest' - run: choco install openssl + run: choco install openssl -y --forcex64 --no-progress - name: Set OpenSSL dir in env if: matrix.target.os == 'windows-latest' - run: echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append + run: | + echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append + echo 'OPENSSL_DIR=C:\Program Files\OpenSSL' | Out-File -FilePath $env:GITHUB_ENV -Append - name: Install Rust (${{ matrix.version }}) uses: actions-rust-lang/setup-rust-toolchain@v1 From 3c4b0c275584f76acf5c0e12b3a4557dddf4c9a6 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Wed, 19 Jul 2023 23:49:31 +0100 Subject: [PATCH 43/79] ci: rename post-merge workflow --- .github/workflows/{ci-master.yml => ci-post-merge.yml} | 9 +++------ .github/workflows/ci.yml | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) rename .github/workflows/{ci-master.yml => ci-post-merge.yml} (94%) diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-post-merge.yml similarity index 94% rename from .github/workflows/ci-master.yml rename to .github/workflows/ci-post-merge.yml index 1fae5c39..c107bb53 100644 --- a/.github/workflows/ci-master.yml +++ b/.github/workflows/ci-post-merge.yml @@ -51,7 +51,7 @@ jobs: with: toolchain: ${{ matrix.version }} - - uses: taiki-e/cache-cargo-install-action@v1 + - uses: taiki-e/install-action@v2 with: { tool: cargo-hack } - name: check lib @@ -121,11 +121,8 @@ jobs: uses: actions-rust-lang/setup-rust-toolchain@v1 with: { toolchain: nightly } - - uses: taiki-e/cache-cargo-install-action@v1 - with: { tool: cargo-minimal-versions } - - - uses: taiki-e/cache-cargo-install-action@v1 - with: { tool: cargo-hack } + - uses: taiki-e/install-action@v1 + with: { tool: cargo-hack, cargo-minimal-versions } - name: Check With Minimal Versions run: cargo minimal-versions check diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce5250c5..866ed107 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,7 +52,7 @@ jobs: with: toolchain: ${{ matrix.version }} - - uses: taiki-e/cache-cargo-install-action@v1 + - uses: taiki-e/install-action@v1 with: { tool: cargo-hack } - name: Generate Cargo.lock From 3eba5b152e889ab45e24fcabdc1ddb4f06799d6f Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Wed, 19 Jul 2023 23:52:56 +0100 Subject: [PATCH 44/79] prepare actix-macros release 0.2.4 --- actix-macros/CHANGES.md | 18 ++++++++++-------- actix-macros/Cargo.toml | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/actix-macros/CHANGES.md b/actix-macros/CHANGES.md index 9385808c..570c4e1e 100644 --- a/actix-macros/CHANGES.md +++ b/actix-macros/CHANGES.md @@ -1,48 +1,50 @@ # Changes -## Unreleased - 2023-xx-xx +## Unreleased + +## 0.2.4 - Update `syn` dependency to `2`. - Minimum supported Rust version (MSRV) is now 1.65. -## 0.2.3 - 2021-10-19 +## 0.2.3 - Fix test macro in presence of other imports named "test". [#399] [#399]: https://github.com/actix/actix-net/pull/399 -## 0.2.2 - 2021-10-14 +## 0.2.2 - Improve error recovery potential when macro input is invalid. [#391] - Allow custom `System`s on test macro. [#391] [#391]: https://github.com/actix/actix-net/pull/391 -## 0.2.1 - 2021-02-02 +## 0.2.1 - Add optional argument `system` to `main` macro which can be used to specify the path to `actix_rt::System` (useful for re-exports). [#363] [#363]: https://github.com/actix/actix-net/pull/363 -## 0.2.0 - 2021-02-02 +## 0.2.0 - Update to latest `actix_rt::System::new` signature. [#261] [#261]: https://github.com/actix/actix-net/pull/261 -## 0.2.0-beta.1 - 2021-01-09 +## 0.2.0-beta.1 - Remove `actix-reexport` feature. [#218] [#218]: https://github.com/actix/actix-net/pull/218 -## 0.1.3 - 2020-12-03 +## 0.1.3 - Add `actix-reexport` feature. [#218] [#218]: https://github.com/actix/actix-net/pull/218 -## 0.1.2 - 2020-05-18 +## 0.1.2 - Forward actix_rt::test arguments to test function [#127] diff --git a/actix-macros/Cargo.toml b/actix-macros/Cargo.toml index 4aba5e53..4ec4867d 100644 --- a/actix-macros/Cargo.toml +++ b/actix-macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-macros" -version = "0.2.3" +version = "0.2.4" authors = [ "Nikolay Kim ", "Ibraheem Ahmed ", From 9017de439f5c660ecd5710188d8646bb29510d9d Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Thu, 20 Jul 2023 00:22:55 +0100 Subject: [PATCH 45/79] ci: fix post-merge tool installs --- .github/workflows/ci-post-merge.yml | 16 ++++++++++------ actix-macros/src/lib.rs | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci-post-merge.yml b/.github/workflows/ci-post-merge.yml index c107bb53..27f541a3 100644 --- a/.github/workflows/ci-post-merge.yml +++ b/.github/workflows/ci-post-merge.yml @@ -101,11 +101,13 @@ jobs: uses: actions-rust-lang/setup-rust-toolchain@v1 with: { toolchain: nightly } + - name: Install cargo-tarpaulin + uses: taiki-e/install-action@v1 + with: { tool: cargo-tarpaulin } + - name: Generate coverage file if: github.ref == 'refs/heads/master' - run: | - cargo install cargo-tarpaulin - cargo tarpaulin --out Xml --verbose + run: cargo tarpaulin --out Xml --verbose - name: Upload to Codecov if: github.ref == 'refs/heads/master' uses: codecov/codecov-action@v3 @@ -121,8 +123,9 @@ jobs: uses: actions-rust-lang/setup-rust-toolchain@v1 with: { toolchain: nightly } - - uses: taiki-e/install-action@v1 - with: { tool: cargo-hack, cargo-minimal-versions } + - name: Install cargo-hack & cargo-minimal-versions + uses: taiki-e/install-action@v1 + with: { tool: 'cargo-hack,cargo-minimal-versions' } - name: Check With Minimal Versions run: cargo minimal-versions check @@ -137,7 +140,8 @@ jobs: uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Install cargo-nextest - run: cargo install cargo-nextest + uses: taiki-e/install-action@v1 + with: { tool: cargo-nextest } - name: Test with cargo-nextest run: cargo nextest run diff --git a/actix-macros/src/lib.rs b/actix-macros/src/lib.rs index 020b16db..481d1145 100644 --- a/actix-macros/src/lib.rs +++ b/actix-macros/src/lib.rs @@ -28,8 +28,8 @@ type AttributeArgs = syn::punctuated::Punctuated; /// println!("Hello world"); /// } /// ``` -// #[allow(clippy::needless_doctest_main)] -// #[cfg(not(test))] // Work around for rust-lang/rust#62127 +#[allow(clippy::needless_doctest_main)] +#[cfg(not(test))] // Work around for rust-lang/rust#62127 #[proc_macro_attribute] pub fn main(args: TokenStream, item: TokenStream) -> TokenStream { let mut input = match syn::parse::(item.clone()) { From 9cb8a1fadcc5caf11243609f6da4f0cd57b0094d Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Mon, 24 Jul 2023 03:27:44 +0100 Subject: [PATCH 46/79] remove lint exception --- actix-macros/src/lib.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/actix-macros/src/lib.rs b/actix-macros/src/lib.rs index 481d1145..cd546f0e 100644 --- a/actix-macros/src/lib.rs +++ b/actix-macros/src/lib.rs @@ -28,8 +28,6 @@ type AttributeArgs = syn::punctuated::Punctuated; /// println!("Hello world"); /// } /// ``` -#[allow(clippy::needless_doctest_main)] -#[cfg(not(test))] // Work around for rust-lang/rust#62127 #[proc_macro_attribute] pub fn main(args: TokenStream, item: TokenStream) -> TokenStream { let mut input = match syn::parse::(item.clone()) { From 6ce830706054700db778134e7daa4426d582891c Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Thu, 24 Aug 2023 00:56:31 +0100 Subject: [PATCH 47/79] remove num_cpus dependency (#488) --- .github/workflows/ci.yml | 4 ++ actix-server/CHANGES.md | 88 ++++++++++++++++++------------------- actix-server/Cargo.toml | 1 - actix-server/src/builder.rs | 10 ++++- actix-server/src/worker.rs | 8 +++- scripts/free-disk-space.sh | 53 ++++++++++++++++++++++ 6 files changed, 115 insertions(+), 49 deletions(-) create mode 100755 scripts/free-disk-space.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 866ed107..20632f63 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,6 +37,10 @@ jobs: run: sudo ifconfig lo0 alias 127.0.0.3 - uses: actions/checkout@v3 + + - name: Free Disk Space + if: matrix.target.os == 'ubuntu-latest' + run: ./scripts/free-disk-space.sh - name: Install OpenSSL if: matrix.target.os == 'windows-latest' diff --git a/actix-server/CHANGES.md b/actix-server/CHANGES.md index 1f9f7b3c..ffe3f2a1 100644 --- a/actix-server/CHANGES.md +++ b/actix-server/CHANGES.md @@ -1,22 +1,22 @@ # Changes -## Unreleased - 2023-xx-xx +## Unreleased - Add support for MultiPath TCP (MPTCP) with `MpTcp` enum and `ServerBuilder::mptcp()` method. - Minimum supported Rust version (MSRV) is now 1.65. -## 2.2.0 - 2022-12-21 +## 2.2.0 - Minimum supported Rust version (MSRV) is now 1.59. - Update `tokio-uring` dependency to `0.4`. [#473] [#473]: https://github.com/actix/actix-net/pull/473 -## 2.1.1 - 2022-03-09 +## 2.1.1 - No significant changes since `2.1.0`. -## 2.1.0 - 2022-03-08 +## 2.1.0 - Update `tokio-uring` dependency to `0.3`. [#448] - Logs emitted now use the `tracing` crate with `log` compatibility. [#448] @@ -25,27 +25,27 @@ [#443]: https://github.com/actix/actix-net/pull/443 [#448]: https://github.com/actix/actix-net/pull/448 -## 2.0.0 - 2022-01-19 +## 2.0.0 - No significant changes since `2.0.0-rc.4`. -## 2.0.0-rc.4 - 2022-01-12 +## 2.0.0-rc.4 - Update `tokio-uring` dependency to `0.2`. [#436] [#436]: https://github.com/actix/actix-net/pull/436 -## 2.0.0-rc.3 - 2021-12-31 +## 2.0.0-rc.3 - No significant changes since `2.0.0-rc.2`. -## 2.0.0-rc.2 - 2021-12-27 +## 2.0.0-rc.2 - Simplify `TestServer`. [#431] [#431]: https://github.com/actix/actix-net/pull/431 -## 2.0.0-rc.1 - 2021-12-05 +## 2.0.0-rc.1 - Hide implementation details of `Server`. [#424] - `Server` now runs only after awaiting it. [#425] @@ -53,19 +53,19 @@ [#424]: https://github.com/actix/actix-net/pull/424 [#425]: https://github.com/actix/actix-net/pull/425 -## 2.0.0-beta.9 - 2021-11-15 +## 2.0.0-beta.9 - Restore `Arbiter` support lost in `beta.8`. [#417] [#417]: https://github.com/actix/actix-net/pull/417 -## 2.0.0-beta.8 - 2021-11-05 _(YANKED)_ +## 2.0.0-beta.8 - Fix non-unix signal handler. [#410] [#410]: https://github.com/actix/actix-net/pull/410 -## 2.0.0-beta.7 - 2021-11-05 _(YANKED)_ +## 2.0.0-beta.7 - Server can be started in regular Tokio runtime. [#408] - Expose new `Server` type whose `Future` impl resolves when server stops. [#408] @@ -78,7 +78,7 @@ [#407]: https://github.com/actix/actix-net/pull/407 [#408]: https://github.com/actix/actix-net/pull/408 -## 2.0.0-beta.6 - 2021-10-11 +## 2.0.0-beta.6 - Add experimental (semver-exempt) `io-uring` feature for enabling async file I/O on linux. [#374] - Server no long listens to `SIGHUP` signal. Previously, the received was not used but did block subsequent exit signals from working. [#389] @@ -89,19 +89,19 @@ [#349]: https://github.com/actix/actix-net/pull/349 [#389]: https://github.com/actix/actix-net/pull/389 -## 2.0.0-beta.5 - 2021-04-20 +## 2.0.0-beta.5 - Server shutdown notifies all workers to exit regardless if shutdown is graceful. This causes all workers to shutdown immediately in force shutdown case. [#333] [#333]: https://github.com/actix/actix-net/pull/333 -## 2.0.0-beta.4 - 2021-04-01 +## 2.0.0-beta.4 - Prevent panic when `shutdown_timeout` is very large. [f9262db] [f9262db]: https://github.com/actix/actix-net/commit/f9262db -## 2.0.0-beta.3 - 2021-02-06 +## 2.0.0-beta.3 - Hidden `ServerBuilder::start` method has been removed. Use `ServerBuilder::run`. [#246] - Add retry for EINTR signal (`io::Interrupted`) in `Accept`'s poll loop. [#264] @@ -113,13 +113,13 @@ [#265]: https://github.com/actix/actix-net/pull/265 [#273]: https://github.com/actix/actix-net/pull/273 -## 2.0.0-beta.2 - 2021-01-03 +## 2.0.0-beta.2 - Merge `actix-testing` to `actix-server` as `test_server` mod. [#242] [#242]: https://github.com/actix/actix-net/pull/242 -## 2.0.0-beta.1 - 2020-12-28 +## 2.0.0-beta.1 - Added explicit info log message on accept queue pause. [#215] - Prevent double registration of sockets when back-pressure is resolved. [#223] @@ -134,127 +134,127 @@ [#223]: https://github.com/actix/actix-net/pull/223 [#239]: https://github.com/actix/actix-net/pull/239 -## 1.0.4 - 2020-09-12 +## 1.0.4 - Update actix-codec to 0.3.0. - Workers must be greater than 0. [#167] [#167]: https://github.com/actix/actix-net/pull/167 -## 1.0.3 - 2020-05-19 +## 1.0.3 - Replace deprecated `net2` crate with `socket2` [#140] [#140]: https://github.com/actix/actix-net/pull/140 -## 1.0.2 - 2020-02-26 +## 1.0.2 - Avoid error by calling `reregister()` on Windows [#103] [#103]: https://github.com/actix/actix-net/pull/103 -## 1.0.1 - 2019-12-29 +## 1.0.1 - Rename `.start()` method to `.run()` -## 1.0.0 - 2019-12-11 +## 1.0.0 - Use actix-net releases -## 1.0.0-alpha.4 - 2019-12-08 +## 1.0.0-alpha.4 - Use actix-service 1.0.0-alpha.4 -## 1.0.0-alpha.3 - 2019-12-07 +## 1.0.0-alpha.3 - Migrate to tokio 0.2 - Fix compilation on non-unix platforms - Better handling server configuration -## 1.0.0-alpha.2 - 2019-12-02 +## 1.0.0-alpha.2 - Simplify server service (remove actix-server-config) - Allow to wait on `Server` until server stops -## 0.8.0-alpha.1 - 2019-11-22 +## 0.8.0-alpha.1 - Migrate to `std::future` -## 0.7.0 - 2019-10-04 +## 0.7.0 - Update `rustls` to 0.16 - Minimum required Rust version upped to 1.37.0 -## 0.6.1 - 2019-09-25 +## 0.6.1 - Add UDS listening support to `ServerBuilder` -## 0.6.0 - 2019-07-18 +## 0.6.0 - Support Unix domain sockets #3 -## 0.5.1 - 2019-05-18 +## 0.5.1 - ServerBuilder::shutdown_timeout() accepts u64 -## 0.5.0 - 2019-05-12 +## 0.5.0 - Add `Debug` impl for `SslError` - Derive debug for `Server` and `ServerCommand` - Upgrade to actix-service 0.4 -## 0.4.3 - 2019-04-16 +## 0.4.3 - Re-export `IoStream` trait - Depend on `ssl` and `rust-tls` features from actix-server-config -## 0.4.2 - 2019-03-30 +## 0.4.2 - Fix SIGINT force shutdown -## 0.4.1 - 2019-03-14 +## 0.4.1 - `SystemRuntime::on_start()` - allow to run future before server service initialization -## 0.4.0 - 2019-03-12 +## 0.4.0 - Use `ServerConfig` for service factory - Wrap tcp socket to `Io` type - Upgrade actix-service -## 0.3.1 - 2019-03-04 +## 0.3.1 - Add `ServerBuilder::maxconnrate` sets the maximum per-worker number of concurrent connections - Add helper ssl error `SslError` - Rename `StreamServiceFactory` to `ServiceFactory` - Deprecate `StreamServiceFactory` -## 0.3.0 - 2019-03-02 +## 0.3.0 - Use new `NewService` trait -## 0.2.1 - 2019-02-09 +## 0.2.1 - Drop service response -## 0.2.0 - 2019-02-01 +## 0.2.0 - Migrate to actix-service 0.2 - Updated rustls dependency -## 0.1.3 - 2018-12-21 +## 0.1.3 - Fix max concurrent connections handling -## 0.1.2 - 2018-12-12 +## 0.1.2 - rename ServiceConfig::rt() to ServiceConfig::apply() - Fix back-pressure for concurrent ssl handshakes -## 0.1.1 - 2018-12-11 +## 0.1.1 - Fix signal handling on windows -## 0.1.0 - 2018-12-09 +## 0.1.0 - Move server to separate crate diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index 62f13107..53f54f79 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -27,7 +27,6 @@ actix-utils = "3" futures-core = { version = "0.3.17", default-features = false, features = ["alloc"] } futures-util = { version = "0.3.17", default-features = false, features = ["alloc"] } mio = { version = "0.8", features = ["os-poll", "net"] } -num_cpus = "1.13" socket2 = "0.5" tokio = { version = "1.23.1", features = ["sync"] } tracing = { version = "0.1.30", default-features = false, features = ["log"] } diff --git a/actix-server/src/builder.rs b/actix-server/src/builder.rs index e1d3a2d3..42addafc 100644 --- a/actix-server/src/builder.rs +++ b/actix-server/src/builder.rs @@ -1,4 +1,4 @@ -use std::{io, time::Duration}; +use std::{io, num::NonZeroUsize, time::Duration}; use actix_rt::net::TcpStream; use tokio::sync::mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender}; @@ -55,7 +55,7 @@ impl ServerBuilder { let (cmd_tx, cmd_rx) = unbounded_channel(); ServerBuilder { - threads: num_cpus::get_physical(), + threads: std::thread::available_parallelism().map_or(2, NonZeroUsize::get), token: 0, factories: Vec::new(), sockets: Vec::new(), @@ -76,6 +76,12 @@ impl ServerBuilder { /// The default worker count is the number of physical CPU cores available. If your benchmark /// testing indicates that simultaneous multi-threading is beneficial to your app, you can use /// the [`num_cpus`] crate to acquire the _logical_ core count instead. + /// + /// # Panics + /// + /// Panics if `num` is 0. + /// + /// [`num_cpus`]: https://docs.rs/num_cpus pub fn workers(mut self, num: usize) -> Self { assert_ne!(num, 0, "workers must be greater than 0"); self.threads = num; diff --git a/actix-server/src/worker.rs b/actix-server/src/worker.rs index a9ae97a0..d72cd2db 100644 --- a/actix-server/src/worker.rs +++ b/actix-server/src/worker.rs @@ -1,6 +1,7 @@ use std::{ future::Future, io, mem, + num::NonZeroUsize, pin::Pin, rc::Rc, sync::{ @@ -249,8 +250,11 @@ pub(crate) struct ServerWorkerConfig { impl Default for ServerWorkerConfig { fn default() -> Self { - // 512 is the default max blocking thread count of tokio runtime. - let max_blocking_threads = std::cmp::max(512 / num_cpus::get_physical(), 1); + let parallelism = std::thread::available_parallelism().map_or(2, NonZeroUsize::get); + + // 512 is the default max blocking thread count of a Tokio runtime. + let max_blocking_threads = std::cmp::max(512 / parallelism, 1); + Self { shutdown_timeout: Duration::from_secs(30), max_blocking_threads, diff --git a/scripts/free-disk-space.sh b/scripts/free-disk-space.sh new file mode 100755 index 00000000..2946cfcf --- /dev/null +++ b/scripts/free-disk-space.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# The Azure provided machines typically have the following disk allocation: +# Total space: 85GB +# Allocated: 67 GB +# Free: 17 GB +# This script frees up 28 GB of disk space by deleting unneeded packages and +# large directories. +# The Flink end to end tests download and generate more than 17 GB of files, +# causing unpredictable behavior and build failures. + +echo "==============================================================================" +echo "Freeing up disk space on CI system" +echo "==============================================================================" + +echo "Listing 100 largest packages" +dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -n 100 +df -h + +echo "Removing large packages" +sudo apt-get remove -y '^dotnet-.*' +sudo apt-get remove -y 'php.*' +sudo apt-get remove -y '^mongodb-.*' +sudo apt-get remove -y '^mysql-.*' +sudo apt-get remove -y azure-cli google-cloud-sdk hhvm google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri +sudo apt-get autoremove -y +sudo apt-get clean +df -h + +echo "Removing large directories" +sudo rm -rf /usr/share/dotnet/ +sudo rm -rf /usr/local/graalvm/ +sudo rm -rf /usr/local/.ghcup/ +sudo rm -rf /usr/local/share/powershell +sudo rm -rf /usr/local/share/chromium +sudo rm -rf /usr/local/lib/android +sudo rm -rf /usr/local/lib/node_modules +df -h From 0bc310a656160d8425764bbef46ff9afe92f28bc Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 26 Aug 2023 14:59:51 +0100 Subject: [PATCH 48/79] Rustls v0.21 support (#480) --- .cargo/config.toml | 6 +- .github/workflows/ci-post-merge.yml | 16 +- .github/workflows/ci.yml | 16 +- Cargo.toml | 1 + actix-server/src/worker.rs | 3 + actix-tls/CHANGES.md | 49 +++-- actix-tls/Cargo.toml | 30 ++- actix-tls/examples/accept-rustls.rs | 20 +- actix-tls/src/accept/mod.rs | 18 +- .../src/accept/{rustls.rs => rustls_0_20.rs} | 5 +- actix-tls/src/accept/rustls_0_21.rs | 198 ++++++++++++++++++ actix-tls/src/connect/mod.rs | 11 +- .../src/connect/{rustls.rs => rustls_0_20.rs} | 33 +-- actix-tls/src/connect/rustls_0_21.rs | 154 ++++++++++++++ actix-tls/tests/accept-openssl.rs | 5 +- actix-tls/tests/accept-rustls.rs | 5 +- actix-tls/tests/test_connect.rs | 4 +- actix-utils/src/counter.rs | 4 +- actix-utils/src/future/poll_fn.rs | 1 + 19 files changed, 504 insertions(+), 75 deletions(-) rename actix-tls/src/accept/{rustls.rs => rustls_0_20.rs} (97%) create mode 100644 actix-tls/src/accept/rustls_0_21.rs rename actix-tls/src/connect/{rustls.rs => rustls_0_20.rs} (78%) create mode 100644 actix-tls/src/connect/rustls_0_21.rs diff --git a/.cargo/config.toml b/.cargo/config.toml index c4f6e3f6..a114083f 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -15,9 +15,11 @@ ci-check-linux = "hack --workspace --feature-powerset check --tests --examples" # tests avoiding io-uring feature ci-test = "hack --feature-powerset --exclude-features=io-uring test --lib --tests --no-fail-fast -- --nocapture" +ci-test-rustls-020 = "hack --feature-powerset --exclude-features=io-uring,rustls-0_21 test --lib --tests --no-fail-fast -- --nocapture" +ci-test-rustls-021 = "hack --feature-powerset --exclude-features=io-uring,rustls-0_20 test --lib --tests --no-fail-fast -- --nocapture" # tests avoiding io-uring feature on Windows -ci-test-win = "hack --feature-powerset --depth 2 --exclude-features=io-uring test --lib --tests --no-fail-fast -- --nocapture" +ci-test-win = "hack --feature-powerset --depth=2 --exclude-features=io-uring test --lib --tests --no-fail-fast -- --nocapture" # test with io-uring feature -ci-test-linux = "hack --feature-powerset test --lib --tests --no-fail-fast -- --nocapture" +ci-test-linux = "hack --feature-powerset --exclude-features=rustls-0_20 test --lib --tests --no-fail-fast -- --nocapture" diff --git a/.github/workflows/ci-post-merge.yml b/.github/workflows/ci-post-merge.yml index 27f541a3..30bca39e 100644 --- a/.github/workflows/ci-post-merge.yml +++ b/.github/workflows/ci-post-merge.yml @@ -16,6 +16,7 @@ jobs: strategy: fail-fast: false matrix: + # prettier-ignore target: - { name: Linux, os: ubuntu-latest, triple: x86_64-unknown-linux-gnu } - { name: macOS, os: macos-latest, triple: x86_64-apple-darwin } @@ -37,6 +38,10 @@ jobs: - uses: actions/checkout@v3 + - name: Free Disk Space + if: matrix.target.os == 'ubuntu-latest' + run: ./scripts/free-disk-space.sh + - name: Install OpenSSL if: matrix.target.os == 'windows-latest' run: choco install openssl -y --forcex64 --no-progress @@ -83,8 +88,15 @@ jobs: run: cargo ci-test - name: tests if: matrix.target.os == 'ubuntu-latest' - run: | - sudo bash -c "ulimit -Sl 512 && ulimit -Hl 512 && PATH=$PATH:/usr/share/rust/.cargo/bin && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-linux" + run: >- + sudo bash -c " + ulimit -Sl 512 + && ulimit -Hl 512 + && PATH=$PATH:/usr/share/rust/.cargo/bin + && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-rustls-020 + && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-rustls-021 + && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-linux + " - name: Clear the cargo caches run: | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 20632f63..74315e6a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,6 @@ name: CI -on: +on: pull_request: {} push: { branches: [master] } @@ -16,6 +16,7 @@ jobs: strategy: fail-fast: false matrix: + # prettier-ignore target: - { name: Linux, os: ubuntu-latest, triple: x86_64-unknown-linux-gnu } - { name: macOS, os: macos-latest, triple: x86_64-apple-darwin } @@ -37,7 +38,7 @@ jobs: run: sudo ifconfig lo0 alias 127.0.0.3 - uses: actions/checkout@v3 - + - name: Free Disk Space if: matrix.target.os == 'ubuntu-latest' run: ./scripts/free-disk-space.sh @@ -99,8 +100,15 @@ jobs: run: cargo ci-test-win - name: tests if: matrix.target.os == 'ubuntu-latest' - run: | - sudo bash -c "ulimit -Sl 512 && ulimit -Hl 512 && PATH=$PATH:/usr/share/rust/.cargo/bin && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-linux" + run: >- + sudo bash -c " + ulimit -Sl 512 + && ulimit -Hl 512 + && PATH=$PATH:/usr/share/rust/.cargo/bin + && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-rustls-020 + && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-rustls-021 + && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-linux + " - name: Clear the cargo caches run: | diff --git a/Cargo.toml b/Cargo.toml index 62897764..696de4a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ members = [ resolver = "2" [workspace.package] +license = "MIT OR Apache-2.0" edition = "2021" rust-version = "1.65" diff --git a/actix-server/src/worker.rs b/actix-server/src/worker.rs index d72cd2db..7050fcd2 100644 --- a/actix-server/src/worker.rs +++ b/actix-server/src/worker.rs @@ -625,6 +625,7 @@ impl Future for ServerWorker { self.poll(cx) } }, + WorkerState::Restarting(ref mut restart) => { let factory_id = restart.factory_id; let token = restart.token; @@ -649,6 +650,7 @@ impl Future for ServerWorker { self.poll(cx) } + WorkerState::Shutdown(ref mut shutdown) => { // drop all pending connections in rx channel. while let Poll::Ready(Some(conn)) = this.conn_rx.poll_recv(cx) { @@ -682,6 +684,7 @@ impl Future for ServerWorker { shutdown.timer.as_mut().poll(cx) } } + // actively poll stream and handle worker command WorkerState::Available => loop { match this.check_readiness(cx) { diff --git a/actix-tls/CHANGES.md b/actix-tls/CHANGES.md index 0381e6de..556d498b 100644 --- a/actix-tls/CHANGES.md +++ b/actix-tls/CHANGES.md @@ -1,40 +1,43 @@ # Changes -## Unreleased - 2023-xx-xx +## Unreleased +- Support Rustls v0.21. +- Added `{accept, connect}::rustls_0_21` modules. +- Added `{accept, connect}::rustls_0_20` alias for `{accept, connect}::rustls` modules. - Minimum supported Rust version (MSRV) is now 1.65. -## 3.0.4 - 2022-03-15 +## 3.0.4 - Logs emitted now use the `tracing` crate with `log` compatibility. [#451] [#451]: https://github.com/actix/actix-net/pull/451 -## 3.0.3 - 2022-02-15 +## 3.0.3 - No significant changes since `3.0.2`. -## 3.0.2 - 2022-01-28 +## 3.0.2 - Expose `connect::Connection::new`. [#439] [#439]: https://github.com/actix/actix-net/pull/439 -## 3.0.1 - 2022-01-11 +## 3.0.1 - No significant changes since `3.0.0`. -## 3.0.0 - 2021-12-26 +## 3.0.0 - No significant changes since `3.0.0-rc.2`. -## 3.0.0-rc.2 - 2021-12-10 +## 3.0.0-rc.2 - Re-export `openssl::SslConnectorBuilder` in `connect::openssl::reexports`. [#429] [#429]: https://github.com/actix/actix-net/pull/429 -## 3.0.0-rc.1 - 2021-11-29 +## 3.0.0-rc.1 ### Added @@ -72,7 +75,7 @@ [#422]: https://github.com/actix/actix-net/pull/422 [#423]: https://github.com/actix/actix-net/pull/423 -## 3.0.0-beta.9 - 2021-11-22 +## 3.0.0-beta.9 - Add configurable timeout for accepting TLS connection. [#393] - Added `TlsError::Timeout` variant. [#393] @@ -82,20 +85,20 @@ [#393]: https://github.com/actix/actix-net/pull/393 [#420]: https://github.com/actix/actix-net/pull/420 -## 3.0.0-beta.8 - 2021-11-15 +## 3.0.0-beta.8 - Add `Connect::request` for getting a reference to the connection request. [#415] [#415]: https://github.com/actix/actix-net/pull/415 -## 3.0.0-beta.7 - 2021-10-20 +## 3.0.0-beta.7 - Add `webpki_roots_cert_store()` to get rustls compatible webpki roots cert store. [#401] - Alias `connect::ssl` to `connect::tls`. [#401] [#401]: https://github.com/actix/actix-net/pull/401 -## 3.0.0-beta.6 - 2021-10-19 +## 3.0.0-beta.6 - Update `tokio-rustls` to `0.23` which uses `rustls` `0.20`. [#396] - Removed a re-export of `Session` from `rustls` as it no longer exist. [#396] @@ -103,7 +106,7 @@ [#396]: https://github.com/actix/actix-net/pull/396 -## 3.0.0-beta.5 - 2021-03-29 +## 3.0.0-beta.5 - Changed `connect::ssl::rustls::RustlsConnectorService` to return error when `DNSNameRef` generation failed instead of panic. [#296] - Remove `connect::ssl::openssl::OpensslConnectServiceFactory`. [#297] @@ -117,7 +120,7 @@ [#297]: https://github.com/actix/actix-net/pull/297 [#299]: https://github.com/actix/actix-net/pull/299 -## 3.0.0-beta.4 - 2021-02-24 +## 3.0.0-beta.4 - Rename `accept::openssl::{SslStream => TlsStream}`. - Add `connect::Connect::set_local_addr` to attach local `IpAddr`. [#282] @@ -125,7 +128,7 @@ [#282]: https://github.com/actix/actix-net/pull/282 -## 3.0.0-beta.3 - 2021-02-06 +## 3.0.0-beta.3 - Remove `trust-dns-proto` and `trust-dns-resolver`. [#248] - Use `std::net::ToSocketAddrs` as simple and basic default resolver. [#248] @@ -139,13 +142,13 @@ [#248]: https://github.com/actix/actix-net/pull/248 [#273]: https://github.com/actix/actix-net/pull/273 -## 3.0.0-beta.2 - 2022-xx-xx +## 3.0.0-beta.2 - Depend on stable trust-dns packages. [#204] [#204]: https://github.com/actix/actix-net/pull/204 -## 3.0.0-beta.1 - 2020-12-29 +## 3.0.0-beta.1 - Move acceptors under `accept` module. [#238] - Merge `actix-connect` crate under `connect` module. [#238] @@ -153,7 +156,7 @@ [#238]: https://github.com/actix/actix-net/pull/238 -## 2.0.0 - 2020-09-03 +## 2.0.0 - `nativetls::NativeTlsAcceptor` is renamed to `nativetls::Acceptor`. - Where possible, "SSL" terminology is replaced with "TLS". @@ -161,28 +164,28 @@ - `TlsError::Ssl` enum variant is renamed to `TlsError::Tls`. - `max_concurrent_ssl_connect` is renamed to `max_concurrent_tls_connect`. -## 2.0.0-alpha.2 - 2020-08-17 +## 2.0.0-alpha.2 - Update `rustls` dependency to 0.18 - Update `tokio-rustls` dependency to 0.14 - Update `webpki-roots` dependency to 0.20 -## [2.0.0-alpha.1] - 2020-03-03 +## [2.0.0-alpha.1] - Update `rustls` dependency to 0.17 - Update `tokio-rustls` dependency to 0.13 - Update `webpki-roots` dependency to 0.19 -## [1.0.0] - 2019-12-11 +## [1.0.0] - 1.0.0 release -## [1.0.0-alpha.3] - 2019-12-07 +## [1.0.0-alpha.3] - Migrate to tokio 0.2 - Enable rustls acceptor service - Enable native-tls acceptor service -## [1.0.0-alpha.1] - 2019-12-02 +## [1.0.0-alpha.1] - Split openssl acceptor from actix-server package diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index d65d675b..0c5a148e 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -9,7 +9,7 @@ description = "TLS acceptor and connector services for Actix ecosystem" keywords = ["network", "tls", "ssl", "async", "transport"] repository = "https://github.com/actix/actix-net.git" categories = ["network-programming", "asynchronous", "cryptography"] -license = "MIT OR Apache-2.0" +license.workspace = true edition.workspace = true rust-version.workspace = true @@ -29,8 +29,14 @@ connect = [] # use openssl impls openssl = ["tls-openssl", "tokio-openssl"] -# use rustls impls -rustls = ["tokio-rustls", "webpki-roots"] +# alias for backwards compat +rustls = ["rustls-0_20"] + +# use rustls v0.20 impls +rustls-0_20 = ["tokio-rustls-023", "webpki-roots-022"] + +# use rustls v0.21 impls +rustls-0_21 = ["tokio-rustls-024", "webpki-roots-025"] # use native-tls impls native-tls = ["tokio-native-tls"] @@ -57,9 +63,13 @@ http = { version = "0.2.3", optional = true } tls-openssl = { package = "openssl", version = "0.10.48", optional = true } tokio-openssl = { version = "0.6", optional = true } -# rustls -tokio-rustls = { version = "0.23", optional = true } -webpki-roots = { version = "0.22", optional = true } +# rustls v0.20 +tokio-rustls-023 = { package = "tokio-rustls", version = "0.23", optional = true } +webpki-roots-022 = { package = "webpki-roots", version = "0.22", optional = true } + +# rustls v0.21 +tokio-rustls-024 = { package = "tokio-rustls", version = "0.24", optional = true } +webpki-roots-025 = { package = "webpki-roots", version = "0.25", optional = true } # native-tls tokio-native-tls = { version = "0.3", optional = true } @@ -72,11 +82,11 @@ bytes = "1" env_logger = "0.10" futures-util = { version = "0.3.17", default-features = false, features = ["sink"] } log = "0.4" -rcgen = "0.10" +rcgen = "0.11" rustls-pemfile = "1" -tokio-rustls = { version = "0.23", features = ["dangerous_configuration"] } -trust-dns-resolver = "0.22" +tokio-rustls-024 = { package = "tokio-rustls", version = "0.24", features = ["dangerous_configuration"] } +trust-dns-resolver = "0.23" [[example]] name = "accept-rustls" -required-features = ["accept", "rustls"] +required-features = ["accept", "rustls-0_21"] diff --git a/actix-tls/examples/accept-rustls.rs b/actix-tls/examples/accept-rustls.rs index 6424e64a..40f51753 100644 --- a/actix-tls/examples/accept-rustls.rs +++ b/actix-tls/examples/accept-rustls.rs @@ -17,12 +17,13 @@ #[rustfmt::skip] // this `use` is only exists because of how we have organised the crate -// it is not necessary for your actual code; you should import from `rustls` directly -use tokio_rustls::rustls; +// it is not necessary for your actual code; you should import from `rustls` normally +use tokio_rustls_024::rustls; use std::{ fs::File, io::{self, BufReader}, + path::PathBuf, sync::{ atomic::{AtomicUsize, Ordering}, Arc, @@ -32,7 +33,7 @@ use std::{ use actix_rt::net::TcpStream; use actix_server::Server; use actix_service::ServiceFactoryExt as _; -use actix_tls::accept::rustls::{Acceptor as RustlsAcceptor, TlsStream}; +use actix_tls::accept::rustls_0_21::{Acceptor as RustlsAcceptor, TlsStream}; use futures_util::future::ok; use rustls::{server::ServerConfig, Certificate, PrivateKey}; use rustls_pemfile::{certs, rsa_private_keys}; @@ -42,9 +43,16 @@ use tracing::info; async fn main() -> io::Result<()> { env_logger::init_from_env(env_logger::Env::default().default_filter_or("info")); + let root_path = env!("CARGO_MANIFEST_DIR") + .parse::() + .unwrap() + .join("examples"); + let cert_path = root_path.clone().join("cert.pem"); + let key_path = root_path.clone().join("key.pem"); + // Load TLS key and cert files - let cert_file = &mut BufReader::new(File::open("./examples/cert.pem").unwrap()); - let key_file = &mut BufReader::new(File::open("./examples/key.pem").unwrap()); + let cert_file = &mut BufReader::new(File::open(cert_path).unwrap()); + let key_file = &mut BufReader::new(File::open(key_path).unwrap()); let cert_chain = certs(cert_file) .unwrap() @@ -64,7 +72,7 @@ async fn main() -> io::Result<()> { let count = Arc::new(AtomicUsize::new(0)); let addr = ("127.0.0.1", 8443); - info!("starting server on port: {}", &addr.0); + info!("starting server at: {addr:?}"); Server::build() .bind("tls-example", addr, move || { diff --git a/actix-tls/src/accept/mod.rs b/actix-tls/src/accept/mod.rs index 1eee6720..18585970 100644 --- a/actix-tls/src/accept/mod.rs +++ b/actix-tls/src/accept/mod.rs @@ -12,15 +12,27 @@ use actix_utils::counter::Counter; #[cfg(feature = "openssl")] pub mod openssl; -#[cfg(feature = "rustls")] -pub mod rustls; +#[cfg(feature = "rustls-0_20")] +pub mod rustls_0_20; + +#[doc(hidden)] +#[cfg(feature = "rustls-0_20")] +pub use rustls_0_20 as rustls; + +#[cfg(feature = "rustls-0_21")] +pub mod rustls_0_21; #[cfg(feature = "native-tls")] pub mod native_tls; pub(crate) static MAX_CONN: AtomicUsize = AtomicUsize::new(256); -#[cfg(any(feature = "openssl", feature = "rustls", feature = "native-tls"))] +#[cfg(any( + feature = "openssl", + feature = "rustls-0_20", + feature = "rustls-0_21", + feature = "native-tls", +))] pub(crate) const DEFAULT_TLS_HANDSHAKE_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(3); diff --git a/actix-tls/src/accept/rustls.rs b/actix-tls/src/accept/rustls_0_20.rs similarity index 97% rename from actix-tls/src/accept/rustls.rs rename to actix-tls/src/accept/rustls_0_20.rs index 85cf5b00..d06f1799 100644 --- a/actix-tls/src/accept/rustls.rs +++ b/actix-tls/src/accept/rustls_0_20.rs @@ -1,4 +1,4 @@ -//! `rustls` based TLS connection acceptor service. +//! `rustls` v0.20 based TLS connection acceptor service. //! //! See [`Acceptor`] for main service factory docs. @@ -24,13 +24,14 @@ use actix_utils::{ use pin_project_lite::pin_project; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio_rustls::{rustls::ServerConfig, Accept, TlsAcceptor}; +use tokio_rustls_023 as tokio_rustls; use super::{TlsError, DEFAULT_TLS_HANDSHAKE_TIMEOUT, MAX_CONN_COUNTER}; pub mod reexports { //! Re-exports from `rustls` that are useful for acceptors. - pub use tokio_rustls::rustls::ServerConfig; + pub use tokio_rustls_023::rustls::ServerConfig; } /// Wraps a `rustls` based async TLS stream in order to implement [`ActixStream`]. diff --git a/actix-tls/src/accept/rustls_0_21.rs b/actix-tls/src/accept/rustls_0_21.rs new file mode 100644 index 00000000..27db8cdd --- /dev/null +++ b/actix-tls/src/accept/rustls_0_21.rs @@ -0,0 +1,198 @@ +//! `rustls` v0.21 based TLS connection acceptor service. +//! +//! See [`Acceptor`] for main service factory docs. + +use std::{ + convert::Infallible, + future::Future, + io::{self, IoSlice}, + pin::Pin, + sync::Arc, + task::{Context, Poll}, + time::Duration, +}; + +use actix_rt::{ + net::{ActixStream, Ready}, + time::{sleep, Sleep}, +}; +use actix_service::{Service, ServiceFactory}; +use actix_utils::{ + counter::{Counter, CounterGuard}, + future::{ready, Ready as FutReady}, +}; +use pin_project_lite::pin_project; +use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; +use tokio_rustls::{rustls::ServerConfig, Accept, TlsAcceptor}; +use tokio_rustls_024 as tokio_rustls; + +use super::{TlsError, DEFAULT_TLS_HANDSHAKE_TIMEOUT, MAX_CONN_COUNTER}; + +pub mod reexports { + //! Re-exports from `rustls` that are useful for acceptors. + + pub use tokio_rustls_024::rustls::ServerConfig; +} + +/// Wraps a `rustls` based async TLS stream in order to implement [`ActixStream`]. +pub struct TlsStream(tokio_rustls::server::TlsStream); + +impl_more::impl_from!( in tokio_rustls::server::TlsStream => TlsStream); +impl_more::impl_deref_and_mut!( in TlsStream => tokio_rustls::server::TlsStream); + +impl AsyncRead for TlsStream { + fn poll_read( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &mut ReadBuf<'_>, + ) -> Poll> { + Pin::new(&mut **self.get_mut()).poll_read(cx, buf) + } +} + +impl AsyncWrite for TlsStream { + fn poll_write( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + Pin::new(&mut **self.get_mut()).poll_write(cx, buf) + } + + fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut **self.get_mut()).poll_flush(cx) + } + + fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut **self.get_mut()).poll_shutdown(cx) + } + + fn poll_write_vectored( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + bufs: &[IoSlice<'_>], + ) -> Poll> { + Pin::new(&mut **self.get_mut()).poll_write_vectored(cx, bufs) + } + + fn is_write_vectored(&self) -> bool { + (**self).is_write_vectored() + } +} + +impl ActixStream for TlsStream { + fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll> { + IO::poll_read_ready((**self).get_ref().0, cx) + } + + fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll> { + IO::poll_write_ready((**self).get_ref().0, cx) + } +} + +/// Accept TLS connections via the `rustls` crate. +pub struct Acceptor { + config: Arc, + handshake_timeout: Duration, +} + +impl Acceptor { + /// Constructs `rustls` based acceptor service factory. + pub fn new(config: ServerConfig) -> Self { + Acceptor { + config: Arc::new(config), + handshake_timeout: DEFAULT_TLS_HANDSHAKE_TIMEOUT, + } + } + + /// Limit the amount of time that the acceptor will wait for a TLS handshake to complete. + /// + /// Default timeout is 3 seconds. + pub fn set_handshake_timeout(&mut self, handshake_timeout: Duration) -> &mut Self { + self.handshake_timeout = handshake_timeout; + self + } +} + +impl Clone for Acceptor { + fn clone(&self) -> Self { + Self { + config: self.config.clone(), + handshake_timeout: self.handshake_timeout, + } + } +} + +impl ServiceFactory for Acceptor { + type Response = TlsStream; + type Error = TlsError; + type Config = (); + type Service = AcceptorService; + type InitError = (); + type Future = FutReady>; + + fn new_service(&self, _: ()) -> Self::Future { + let res = MAX_CONN_COUNTER.with(|conns| { + Ok(AcceptorService { + acceptor: self.config.clone().into(), + conns: conns.clone(), + handshake_timeout: self.handshake_timeout, + }) + }); + + ready(res) + } +} + +/// Rustls based acceptor service. +pub struct AcceptorService { + acceptor: TlsAcceptor, + conns: Counter, + handshake_timeout: Duration, +} + +impl Service for AcceptorService { + type Response = TlsStream; + type Error = TlsError; + type Future = AcceptFut; + + fn poll_ready(&self, cx: &mut Context<'_>) -> Poll> { + if self.conns.available(cx) { + Poll::Ready(Ok(())) + } else { + Poll::Pending + } + } + + fn call(&self, req: IO) -> Self::Future { + AcceptFut { + fut: self.acceptor.accept(req), + timeout: sleep(self.handshake_timeout), + _guard: self.conns.get(), + } + } +} + +pin_project! { + /// Accept future for Rustls service. + #[doc(hidden)] + pub struct AcceptFut { + fut: Accept, + #[pin] + timeout: Sleep, + _guard: CounterGuard, + } +} + +impl Future for AcceptFut { + type Output = Result, TlsError>; + + fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + let mut this = self.project(); + match Pin::new(&mut this.fut).poll(cx) { + Poll::Ready(Ok(stream)) => Poll::Ready(Ok(TlsStream(stream))), + Poll::Ready(Err(err)) => Poll::Ready(Err(TlsError::Tls(err))), + Poll::Pending => this.timeout.poll(cx).map(|_| Err(TlsError::Timeout)), + } + } +} diff --git a/actix-tls/src/connect/mod.rs b/actix-tls/src/connect/mod.rs index dae1f7b1..79cbb295 100644 --- a/actix-tls/src/connect/mod.rs +++ b/actix-tls/src/connect/mod.rs @@ -27,8 +27,15 @@ mod uri; #[cfg(feature = "openssl")] pub mod openssl; -#[cfg(feature = "rustls")] -pub mod rustls; +#[cfg(feature = "rustls-0_20")] +pub mod rustls_0_20; + +#[doc(hidden)] +#[cfg(feature = "rustls-0_20")] +pub use rustls_0_20 as rustls; + +#[cfg(feature = "rustls-0_21")] +pub mod rustls_0_21; #[cfg(feature = "native-tls")] pub mod native_tls; diff --git a/actix-tls/src/connect/rustls.rs b/actix-tls/src/connect/rustls_0_20.rs similarity index 78% rename from actix-tls/src/connect/rustls.rs rename to actix-tls/src/connect/rustls_0_20.rs index 5706047d..4547854e 100644 --- a/actix-tls/src/connect/rustls.rs +++ b/actix-tls/src/connect/rustls_0_20.rs @@ -20,22 +20,21 @@ use tokio_rustls::{ rustls::{client::ServerName, ClientConfig, OwnedTrustAnchor, RootCertStore}, Connect as RustlsConnect, TlsConnector as RustlsTlsConnector, }; -use tracing::trace; -use webpki_roots::TLS_SERVER_ROOTS; +use tokio_rustls_023 as tokio_rustls; use crate::connect::{Connection, Host}; pub mod reexports { //! Re-exports from `rustls` and `webpki_roots` that are useful for connectors. - pub use tokio_rustls::{client::TlsStream as AsyncTlsStream, rustls::ClientConfig}; - pub use webpki_roots::TLS_SERVER_ROOTS; + pub use tokio_rustls_023::{client::TlsStream as AsyncTlsStream, rustls::ClientConfig}; + pub use webpki_roots_022::TLS_SERVER_ROOTS; } /// Returns standard root certificates from `webpki-roots` crate as a rustls certificate store. pub fn webpki_roots_cert_store() -> RootCertStore { let mut root_certs = RootCertStore::empty(); - for cert in TLS_SERVER_ROOTS.0 { + for cert in webpki_roots_022::TLS_SERVER_ROOTS.0 { let cert = OwnedTrustAnchor::from_subject_spki_name_constraints( cert.subject, cert.spki, @@ -102,12 +101,13 @@ where actix_service::always_ready!(); fn call(&self, connection: Connection) -> Self::Future { - trace!("TLS handshake start for: {:?}", connection.hostname()); + tracing::trace!("TLS handshake start for: {:?}", connection.hostname()); let (stream, connection) = connection.replace_io(()); match ServerName::try_from(connection.hostname()) { Ok(host) => ConnectFut::Future { - connect: RustlsTlsConnector::from(self.connector.clone()).connect(host, stream), + connect: RustlsTlsConnector::from(Arc::clone(&self.connector)) + .connect(host, stream), connection: Some(connection), }, Err(_) => ConnectFut::InvalidDns, @@ -117,6 +117,7 @@ where /// Connect future for Rustls service. #[doc(hidden)] +#[allow(clippy::large_enum_variant)] pub enum ConnectFut { /// See issue InvalidDns, @@ -131,17 +132,23 @@ where R: Host, IO: ActixStream, { - type Output = Result>, io::Error>; + type Output = io::Result>>; fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { match self.get_mut() { - Self::InvalidDns => Poll::Ready(Err( - io::Error::new(io::ErrorKind::Other, "rustls currently only handles hostname-based connections. See https://github.com/briansmith/webpki/issues/54") - )), - Self::Future { connect, connection } => { + Self::InvalidDns => Poll::Ready(Err(io::Error::new( + io::ErrorKind::Other, + "Rustls v0.20 can only handle hostname-based connections. Enable the `rustls-0_21` \ + feature and use the Rustls v0.21 utilities to gain this feature.", + ))), + + Self::Future { + connect, + connection, + } => { let stream = ready!(Pin::new(connect).poll(cx))?; let connection = connection.take().unwrap(); - trace!("TLS handshake success: {:?}", connection.hostname()); + tracing::trace!("TLS handshake success: {:?}", connection.hostname()); Poll::Ready(Ok(connection.replace_io(stream).1)) } } diff --git a/actix-tls/src/connect/rustls_0_21.rs b/actix-tls/src/connect/rustls_0_21.rs new file mode 100644 index 00000000..cc0d6de3 --- /dev/null +++ b/actix-tls/src/connect/rustls_0_21.rs @@ -0,0 +1,154 @@ +//! Rustls based connector service. +//! +//! See [`TlsConnector`] for main connector service factory docs. + +use std::{ + convert::TryFrom, + future::Future, + io, + pin::Pin, + sync::Arc, + task::{Context, Poll}, +}; + +use actix_rt::net::ActixStream; +use actix_service::{Service, ServiceFactory}; +use actix_utils::future::{ok, Ready}; +use futures_core::ready; +use tokio_rustls::{ + client::TlsStream as AsyncTlsStream, + rustls::{client::ServerName, ClientConfig, OwnedTrustAnchor, RootCertStore}, + Connect as RustlsConnect, TlsConnector as RustlsTlsConnector, +}; +use tokio_rustls_024 as tokio_rustls; + +use crate::connect::{Connection, Host}; + +pub mod reexports { + //! Re-exports from `rustls` and `webpki_roots` that are useful for connectors. + + pub use tokio_rustls_024::{client::TlsStream as AsyncTlsStream, rustls::ClientConfig}; + pub use webpki_roots_025::TLS_SERVER_ROOTS; +} + +/// Returns standard root certificates from `webpki-roots` crate as a rustls certificate store. +pub fn webpki_roots_cert_store() -> RootCertStore { + let mut root_certs = RootCertStore::empty(); + for cert in webpki_roots_025::TLS_SERVER_ROOTS { + let cert = OwnedTrustAnchor::from_subject_spki_name_constraints( + cert.subject, + cert.spki, + cert.name_constraints, + ); + let certs = vec![cert].into_iter(); + root_certs.add_trust_anchors(certs); + } + root_certs +} + +/// Connector service factory using `rustls`. +#[derive(Clone)] +pub struct TlsConnector { + connector: Arc, +} + +impl TlsConnector { + /// Constructs new connector service factory from a `rustls` client configuration. + pub fn new(connector: Arc) -> Self { + TlsConnector { connector } + } + + /// Constructs new connector service from a `rustls` client configuration. + pub fn service(connector: Arc) -> TlsConnectorService { + TlsConnectorService { connector } + } +} + +impl ServiceFactory> for TlsConnector +where + R: Host, + IO: ActixStream + 'static, +{ + type Response = Connection>; + type Error = io::Error; + type Config = (); + type Service = TlsConnectorService; + type InitError = (); + type Future = Ready>; + + fn new_service(&self, _: ()) -> Self::Future { + ok(TlsConnectorService { + connector: self.connector.clone(), + }) + } +} + +/// Connector service using `rustls`. +#[derive(Clone)] +pub struct TlsConnectorService { + connector: Arc, +} + +impl Service> for TlsConnectorService +where + R: Host, + IO: ActixStream, +{ + type Response = Connection>; + type Error = io::Error; + type Future = ConnectFut; + + actix_service::always_ready!(); + + fn call(&self, connection: Connection) -> Self::Future { + tracing::trace!("TLS handshake start for: {:?}", connection.hostname()); + let (stream, connection) = connection.replace_io(()); + + match ServerName::try_from(connection.hostname()) { + Ok(host) => ConnectFut::Future { + connect: RustlsTlsConnector::from(Arc::clone(&self.connector)) + .connect(host, stream), + connection: Some(connection), + }, + Err(_) => ConnectFut::InvalidServerName, + } + } +} + +/// Connect future for Rustls service. +#[doc(hidden)] +#[allow(clippy::large_enum_variant)] +pub enum ConnectFut { + InvalidServerName, + Future { + connect: RustlsConnect, + connection: Option>, + }, +} + +impl Future for ConnectFut +where + R: Host, + IO: ActixStream, +{ + type Output = io::Result>>; + + fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + match self.get_mut() { + Self::InvalidServerName => Poll::Ready(Err(io::Error::new( + io::ErrorKind::InvalidInput, + "connection parameters specified invalid server name", + ))), + + Self::Future { + connect, + connection, + } => { + let stream = ready!(Pin::new(connect).poll(cx))?; + let connection = connection.take().unwrap(); + tracing::trace!("TLS handshake success: {:?}", connection.hostname()); + Poll::Ready(Ok(connection.replace_io(stream).1)) + } + } + } +} diff --git a/actix-tls/tests/accept-openssl.rs b/actix-tls/tests/accept-openssl.rs index ff707f65..ca57e17d 100644 --- a/actix-tls/tests/accept-openssl.rs +++ b/actix-tls/tests/accept-openssl.rs @@ -3,7 +3,7 @@ #![cfg(all( feature = "accept", feature = "connect", - feature = "rustls", + feature = "rustls-0_21", feature = "openssl" ))] @@ -15,6 +15,7 @@ use actix_service::ServiceFactoryExt as _; use actix_tls::accept::openssl::{Acceptor, TlsStream}; use actix_utils::future::ok; use tokio_rustls::rustls::{Certificate, ClientConfig, RootCertStore, ServerName}; +use tokio_rustls_024 as tokio_rustls; fn new_cert_and_key() -> (String, String) { let cert = @@ -49,7 +50,7 @@ fn openssl_acceptor(cert: String, key: String) -> tls_openssl::ssl::SslAcceptor mod danger { use std::time::SystemTime; - use tokio_rustls::rustls::{ + use tokio_rustls_024::rustls::{ self, client::{ServerCertVerified, ServerCertVerifier}, }; diff --git a/actix-tls/tests/accept-rustls.rs b/actix-tls/tests/accept-rustls.rs index 7955b36f..40d38b7d 100644 --- a/actix-tls/tests/accept-rustls.rs +++ b/actix-tls/tests/accept-rustls.rs @@ -3,7 +3,7 @@ #![cfg(all( feature = "accept", feature = "connect", - feature = "rustls", + feature = "rustls-0_21", feature = "openssl" ))] @@ -15,13 +15,14 @@ use actix_rt::net::TcpStream; use actix_server::TestServer; use actix_service::ServiceFactoryExt as _; use actix_tls::{ - accept::rustls::{Acceptor, TlsStream}, + accept::rustls_0_21::{Acceptor, TlsStream}, connect::openssl::reexports::SslConnector, }; use actix_utils::future::ok; use rustls_pemfile::{certs, pkcs8_private_keys}; use tls_openssl::ssl::SslVerifyMode; use tokio_rustls::rustls::{self, Certificate, PrivateKey, ServerConfig}; +use tokio_rustls_024 as tokio_rustls; fn new_cert_and_key() -> (String, String) { let cert = diff --git a/actix-tls/tests/test_connect.rs b/actix-tls/tests/test_connect.rs index 5e73fd2d..1c969fec 100644 --- a/actix-tls/tests/test_connect.rs +++ b/actix-tls/tests/test_connect.rs @@ -30,7 +30,7 @@ async fn test_string() { assert_eq!(con.peer_addr().unwrap(), srv.addr()); } -#[cfg(feature = "rustls")] +#[cfg(feature = "rustls-0_21")] #[actix_rt::test] async fn test_rustls_string() { let srv = TestServer::start(|| { @@ -114,7 +114,7 @@ async fn test_openssl_uri() { assert_eq!(con.peer_addr().unwrap(), srv.addr()); } -#[cfg(all(feature = "rustls", feature = "uri"))] +#[cfg(all(feature = "rustls-0_21", feature = "uri"))] #[actix_rt::test] async fn test_rustls_uri() { use std::convert::TryFrom; diff --git a/actix-utils/src/counter.rs b/actix-utils/src/counter.rs index a61ef90e..4259fd6d 100644 --- a/actix-utils/src/counter.rs +++ b/actix-utils/src/counter.rs @@ -29,7 +29,7 @@ impl Counter { /// Returns true if counter is below capacity. Otherwise, register to wake task when it is. #[inline] - pub fn available(&self, cx: &mut task::Context<'_>) -> bool { + pub fn available(&self, cx: &task::Context<'_>) -> bool { self.0.available(cx) } @@ -59,7 +59,7 @@ impl CounterInner { } } - fn available(&self, cx: &mut task::Context<'_>) -> bool { + fn available(&self, cx: &task::Context<'_>) -> bool { if self.count.get() < self.capacity { true } else { diff --git a/actix-utils/src/future/poll_fn.rs b/actix-utils/src/future/poll_fn.rs index 15d93dbd..0c798f46 100644 --- a/actix-utils/src/future/poll_fn.rs +++ b/actix-utils/src/future/poll_fn.rs @@ -62,6 +62,7 @@ where fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { // SAFETY: we are not moving out of the pinned field // see https://github.com/rust-lang/rust/pull/102737 + #[allow(clippy::needless_borrow)] (unsafe { &mut self.get_unchecked_mut().f })(cx) } } From 3b5716c23e70d5427032244cb0ce4aaf543b72ac Mon Sep 17 00:00:00 2001 From: Alik Aslanyan Date: Sat, 26 Aug 2023 19:04:08 +0400 Subject: [PATCH 49/79] Add getter methods for actix_rt::Runtime and tokio::runtime::Runtime (#484) Co-authored-by: Alik Aslanyan Co-authored-by: Rob Ede --- actix-rt/CHANGES.md | 2 ++ actix-rt/src/runtime.rs | 56 +++++++++++++++++++++++++++++++++++++++++ actix-rt/src/system.rs | 35 ++++++++++++++++++++++++++ 3 files changed, 93 insertions(+) diff --git a/actix-rt/CHANGES.md b/actix-rt/CHANGES.md index 0cedbaa6..ccd8a23e 100644 --- a/actix-rt/CHANGES.md +++ b/actix-rt/CHANGES.md @@ -2,6 +2,8 @@ ## Unreleased - 2023-xx-xx +- Add `actix_rt::System::runtime()` method to retrieve the underlying `actix_rt::Runtime` runtime. +- Add `actix_rt::Runtime::tokio_runtime()` method to retrieve the underlying Tokio runtime. - Minimum supported Rust version (MSRV) is now 1.65. ## 2.8.0 - 2022-12-21 diff --git a/actix-rt/src/runtime.rs b/actix-rt/src/runtime.rs index 557dfcfe..55e29a77 100644 --- a/actix-rt/src/runtime.rs +++ b/actix-rt/src/runtime.rs @@ -61,6 +61,62 @@ impl Runtime { self.local.spawn_local(future) } + /// Retrieves a reference to the underlying Tokio runtime associated with this instance. + /// + /// The Tokio runtime is responsible for executing asynchronous tasks and managing + /// the event loop for an asynchronous Rust program. This method allows accessing + /// the runtime to interact with its features directly. + /// + /// In a typical use case, you might need to share the same runtime between different + /// modules of your project. For example, a module might require a `tokio::runtime::Handle` + /// to spawn tasks on the same runtime, or the runtime itself to configure more complex + /// behaviours. + /// + /// # Example + /// + /// ``` + /// use actix_rt::Runtime; + /// + /// mod module_a { + /// pub fn do_something(handle: tokio::runtime::Handle) { + /// handle.spawn(async { + /// // Some asynchronous task here + /// }); + /// } + /// } + /// + /// mod module_b { + /// pub fn do_something_else(rt: &tokio::runtime::Runtime) { + /// rt.spawn(async { + /// // Another asynchronous task here + /// }); + /// } + /// } + /// + /// let actix_runtime = actix_rt::Runtime::new().unwrap(); + /// let tokio_runtime = actix_runtime.tokio_runtime(); + /// + /// let handle = tokio_runtime.handle().clone(); + /// + /// module_a::do_something(handle); + /// module_b::do_something_else(tokio_runtime); + /// ``` + /// + /// # Returns + /// + /// An immutable reference to the `tokio::runtime::Runtime` instance associated with this + /// `Runtime` instance. + /// + /// # Note + /// + /// While this method provides an immutable reference to the Tokio runtime, which is safe to share across threads, + /// be aware that spawning blocking tasks on the Tokio runtime could potentially impact the execution + /// of the Actix runtime. This is because Tokio is responsible for driving the Actix system, + /// and blocking tasks could delay or deadlock other tasks in run loop. + pub fn tokio_runtime(&self) -> &tokio::runtime::Runtime { + &self.rt + } + /// Runs the provided future, blocking the current thread until the future completes. /// /// This function can be used to synchronously block the current thread until the provided diff --git a/actix-rt/src/system.rs b/actix-rt/src/system.rs index 7423a01e..8ff02c83 100644 --- a/actix-rt/src/system.rs +++ b/actix-rt/src/system.rs @@ -203,6 +203,41 @@ impl SystemRunner { .map_err(|err| io::Error::new(io::ErrorKind::Other, err)) } + /// Retrieves a reference to the underlying Actix runtime associated with this SystemRunner instance. + /// + /// The Actix runtime is responsible for managing the event loop for an Actix system and executing asynchronous tasks. + /// This method provides access to the runtime, allowing direct interaction with its features. + /// + /// In a typical use case, you might need to share the same runtime between different + /// parts of your project. For example, some components might require a [`actix_rt::Runtime`] to spawn tasks on + /// the same runtime. + /// + /// # Example + /// + /// ``` + /// let system_runner = actix_rt::System::new(); + /// let actix_runtime = system_runner.runtime(); + /// + /// // Use the runtime to spawn an async task or perform other operations + /// ``` + /// + /// Read more in the documentation for [`actix_rt::Runtime`] + /// + /// # Returns + /// + /// An immutable reference to the [`actix_rt::Runtime`] instance associated with this + /// [`actix_rt::SystemRunner`] instance. + /// + /// # Note + /// + /// While this method provides an immutable reference to the Actix runtime, which is safe to share across threads, + /// be aware that spawning blocking tasks on the Actix runtime could potentially impact system performance. + /// This is because the Actix runtime is responsible for driving the system, + /// and blocking tasks could delay other tasks in the run loop. + pub fn runtime(&self) -> &crate::runtime::Runtime { + &self.rt + } + /// Runs the provided future, blocking the current thread until the future completes. #[track_caller] #[inline] From 150d2c05d3a07b382d88b59e6fd17ec55a34cda3 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 26 Aug 2023 18:02:48 +0100 Subject: [PATCH 50/79] prepare actix-rt release 2.9.0 --- actix-rt/CHANGES.md | 2 ++ actix-rt/Cargo.toml | 2 +- actix-rt/README.md | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/actix-rt/CHANGES.md b/actix-rt/CHANGES.md index ccd8a23e..5c78df97 100644 --- a/actix-rt/CHANGES.md +++ b/actix-rt/CHANGES.md @@ -2,6 +2,8 @@ ## Unreleased - 2023-xx-xx +## 2.9.0 + - Add `actix_rt::System::runtime()` method to retrieve the underlying `actix_rt::Runtime` runtime. - Add `actix_rt::Runtime::tokio_runtime()` method to retrieve the underlying Tokio runtime. - Minimum supported Rust version (MSRV) is now 1.65. diff --git a/actix-rt/Cargo.toml b/actix-rt/Cargo.toml index 1256eefd..dd460033 100644 --- a/actix-rt/Cargo.toml +++ b/actix-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-rt" -version = "2.8.0" +version = "2.9.0" authors = [ "Nikolay Kim ", "Rob Ede ", diff --git a/actix-rt/README.md b/actix-rt/README.md index d4e0da89..ee206b03 100644 --- a/actix-rt/README.md +++ b/actix-rt/README.md @@ -3,11 +3,11 @@ > Tokio-based single-threaded async runtime for the Actix ecosystem. [![crates.io](https://img.shields.io/crates/v/actix-rt?label=latest)](https://crates.io/crates/actix-rt) -[![Documentation](https://docs.rs/actix-rt/badge.svg?version=2.8.0)](https://docs.rs/actix-rt/2.8.0) +[![Documentation](https://docs.rs/actix-rt/badge.svg?version=2.9.0)](https://docs.rs/actix-rt/2.9.0) [![Version](https://img.shields.io/badge/rustc-1.46+-ab6000.svg)](https://blog.rust-lang.org/2020/03/12/Rust-1.46.html) ![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-rt.svg)
-[![dependency status](https://deps.rs/crate/actix-rt/2.8.0/status.svg)](https://deps.rs/crate/actix-rt/2.8.0) +[![dependency status](https://deps.rs/crate/actix-rt/2.9.0/status.svg)](https://deps.rs/crate/actix-rt/2.9.0) ![Download](https://img.shields.io/crates/d/actix-rt.svg) [![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/WghFtEH6Hb) From 910c181251251da38948b9297464aab84edcd719 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 26 Aug 2023 18:04:22 +0100 Subject: [PATCH 51/79] prepare actix-server release 2.3.0 --- actix-server/CHANGES.md | 2 ++ actix-server/Cargo.toml | 2 +- actix-server/README.md | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/actix-server/CHANGES.md b/actix-server/CHANGES.md index ffe3f2a1..9150031e 100644 --- a/actix-server/CHANGES.md +++ b/actix-server/CHANGES.md @@ -2,6 +2,8 @@ ## Unreleased +## 2.3.0 + - Add support for MultiPath TCP (MPTCP) with `MpTcp` enum and `ServerBuilder::mptcp()` method. - Minimum supported Rust version (MSRV) is now 1.65. diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index 53f54f79..8f0e8982 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-server" -version = "2.2.0" +version = "2.3.0" authors = [ "Nikolay Kim ", "Rob Ede ", diff --git a/actix-server/README.md b/actix-server/README.md index 9b500765..68f2a1ec 100644 --- a/actix-server/README.md +++ b/actix-server/README.md @@ -3,10 +3,10 @@ > General purpose TCP server built for the Actix ecosystem. [![crates.io](https://img.shields.io/crates/v/actix-server?label=latest)](https://crates.io/crates/actix-server) -[![Documentation](https://docs.rs/actix-server/badge.svg?version=2.2.0)](https://docs.rs/actix-server/2.2.0) +[![Documentation](https://docs.rs/actix-server/badge.svg?version=2.3.0)](https://docs.rs/actix-server/2.3.0) [![Version](https://img.shields.io/badge/rustc-1.52+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.52.0.html) ![License](https://img.shields.io/crates/l/actix-server.svg) -[![Dependency Status](https://deps.rs/crate/actix-server/2.2.0/status.svg)](https://deps.rs/crate/actix-server/2.2.0) +[![Dependency Status](https://deps.rs/crate/actix-server/2.3.0/status.svg)](https://deps.rs/crate/actix-server/2.3.0) ![Download](https://img.shields.io/crates/d/actix-server.svg) [![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x) From 5029beb8667b186da0dcca4a44a9026b6e7c1e74 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sat, 26 Aug 2023 18:05:39 +0100 Subject: [PATCH 52/79] prepare actix-tls release 3.1.0 --- actix-tls/CHANGES.md | 2 ++ actix-tls/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/actix-tls/CHANGES.md b/actix-tls/CHANGES.md index 556d498b..21739e89 100644 --- a/actix-tls/CHANGES.md +++ b/actix-tls/CHANGES.md @@ -2,6 +2,8 @@ ## Unreleased +## 3.1.0 + - Support Rustls v0.21. - Added `{accept, connect}::rustls_0_21` modules. - Added `{accept, connect}::rustls_0_20` alias for `{accept, connect}::rustls` modules. diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index 0c5a148e..f1c40332 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-tls" -version = "3.0.4" +version = "3.1.0" authors = [ "Nikolay Kim ", "Rob Ede ", From 45a7dcba90cf97dbd90f6a6ed1b6e7d35e4dd2e5 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Tue, 29 Aug 2023 18:40:55 +0100 Subject: [PATCH 53/79] chore(tls): fix min rustls version --- actix-tls/Cargo.toml | 7 ++++++- bytestring/Cargo.toml | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index f1c40332..82799450 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -17,6 +17,11 @@ rust-version.workspace = true all-features = true rustdoc-args = ["--cfg", "docsrs"] +[package.metadata.cargo-machete] +ignored = [ + "rustls_021", # specified to force version with add_trust_anchors method +] + [features] default = ["accept", "connect"] @@ -68,6 +73,7 @@ tokio-rustls-023 = { package = "tokio-rustls", version = "0.23", optional = true webpki-roots-022 = { package = "webpki-roots", version = "0.22", optional = true } # rustls v0.21 +rustls-021 = { package = "rustls", version = "0.21.6" } tokio-rustls-024 = { package = "tokio-rustls", version = "0.24", optional = true } webpki-roots-025 = { package = "webpki-roots", version = "0.25", optional = true } @@ -81,7 +87,6 @@ actix-server = "2" bytes = "1" env_logger = "0.10" futures-util = { version = "0.3.17", default-features = false, features = ["sink"] } -log = "0.4" rcgen = "0.11" rustls-pemfile = "1" tokio-rustls-024 = { package = "tokio-rustls", version = "0.24", features = ["dangerous_configuration"] } diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index ab0e43c6..f3efdbab 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -22,4 +22,3 @@ serde = { version = "1.0", optional = true } ahash = { version = "0.8", default-features = false } serde_json = "1.0" static_assertions = "1.1" -rustversion = "1" From 7e043048a085dcd2ce36d65823a02ef44bf15a6e Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Tue, 29 Aug 2023 18:41:48 +0100 Subject: [PATCH 54/79] chore(actix-tls): prepare release 3.1.1 --- actix-tls/CHANGES.md | 4 ++++ actix-tls/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/actix-tls/CHANGES.md b/actix-tls/CHANGES.md index 21739e89..317284dc 100644 --- a/actix-tls/CHANGES.md +++ b/actix-tls/CHANGES.md @@ -2,6 +2,10 @@ ## Unreleased +## 3.1.1 + +- Fix minimum `rustls` v0.21 version requirement. + ## 3.1.0 - Support Rustls v0.21. diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index 82799450..a228ab30 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-tls" -version = "3.1.0" +version = "3.1.1" authors = [ "Nikolay Kim ", "Rob Ede ", From 14272a1762680aec65b59ac084819e4bd0d4e4a6 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Tue, 29 Aug 2023 18:45:11 +0100 Subject: [PATCH 55/79] chore: force secure rustls-webpki --- actix-tls/CHANGES.md | 2 +- actix-tls/Cargo.toml | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/actix-tls/CHANGES.md b/actix-tls/CHANGES.md index 317284dc..295d150b 100644 --- a/actix-tls/CHANGES.md +++ b/actix-tls/CHANGES.md @@ -4,7 +4,7 @@ ## 3.1.1 -- Fix minimum `rustls` v0.21 version requirement. +- Fix `rustls` v0.21 version requirement. ## 3.1.0 diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index a228ab30..e023c984 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -20,6 +20,7 @@ rustdoc-args = ["--cfg", "docsrs"] [package.metadata.cargo-machete] ignored = [ "rustls_021", # specified to force version with add_trust_anchors method + "rustls_webpki_0101", # specified to force secure version ] [features] @@ -65,7 +66,7 @@ tracing = { version = "0.1.30", default-features = false, features = ["log"] } http = { version = "0.2.3", optional = true } # openssl -tls-openssl = { package = "openssl", version = "0.10.48", optional = true } +tls-openssl = { package = "openssl", version = "0.10.55", optional = true } tokio-openssl = { version = "0.6", optional = true } # rustls v0.20 @@ -74,6 +75,7 @@ webpki-roots-022 = { package = "webpki-roots", version = "0.22", optional = true # rustls v0.21 rustls-021 = { package = "rustls", version = "0.21.6" } +rustls-webpki-0101 = { package = "rustls-webpki", version = "0.101.4" } tokio-rustls-024 = { package = "tokio-rustls", version = "0.24", optional = true } webpki-roots-025 = { package = "webpki-roots", version = "0.25", optional = true } From bfeb4cd9e79c09ecece3c595f889f35ebcba586a Mon Sep 17 00:00:00 2001 From: Paolo Barbolini Date: Sun, 17 Sep 2023 13:45:55 +0200 Subject: [PATCH 56/79] local-channel: drop futures-util by using future::poll_fn from std (#490) --- local-channel/Cargo.toml | 2 +- local-channel/src/mpsc.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/local-channel/Cargo.toml b/local-channel/Cargo.toml index 9e0f21b4..fcc7ae96 100644 --- a/local-channel/Cargo.toml +++ b/local-channel/Cargo.toml @@ -15,8 +15,8 @@ rust-version.workspace = true [dependencies] futures-core = "0.3.17" futures-sink = "0.3.17" -futures-util = { version = "0.3.17", default-features = false } local-waker = "0.1" [dev-dependencies] +futures-util = { version = "0.3.17", default-features = false } tokio = { version = "1.23.1", features = ["rt", "macros"] } diff --git a/local-channel/src/mpsc.rs b/local-channel/src/mpsc.rs index c75d03bb..7fec5611 100644 --- a/local-channel/src/mpsc.rs +++ b/local-channel/src/mpsc.rs @@ -4,6 +4,7 @@ use alloc::{collections::VecDeque, rc::Rc}; use core::{ cell::RefCell, fmt, + future::poll_fn, pin::Pin, task::{Context, Poll}, }; @@ -11,7 +12,6 @@ use std::error::Error; use futures_core::stream::Stream; use futures_sink::Sink; -use futures_util::future::poll_fn; use local_waker::LocalWaker; /// Creates a unbounded in-memory channel with buffered storage. From 9f59093adcde0083b3faa5ad400e6cc302e1aca6 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 17 Sep 2023 19:32:01 +0100 Subject: [PATCH 57/79] chore(local-channel): prepare release 0.1.4 --- local-channel/CHANGES.md | 12 +++++++----- local-channel/Cargo.toml | 6 +++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/local-channel/CHANGES.md b/local-channel/CHANGES.md index 957adfd9..9e7a01e4 100644 --- a/local-channel/CHANGES.md +++ b/local-channel/CHANGES.md @@ -1,17 +1,19 @@ # Changes -## Unreleased - 2023-xx-xx +## Unreleased + +## 0.1.4 - Minimum supported Rust version (MSRV) is now 1.65. -## 0.1.3 - 2022-05-03 +## 0.1.3 - Minimum supported Rust version (MSRV) is now 1.49. -## 0.1.2 - 2021-04-01 +## 0.1.2 - No significant changes from `0.1.1`. -## 0.1.1 - 2021-03-29 +## 0.1.1 -- Move local mpsc channel to it's own crate. +- Move local MPSC channel to it's own crate. diff --git a/local-channel/Cargo.toml b/local-channel/Cargo.toml index fcc7ae96..45ee0179 100644 --- a/local-channel/Cargo.toml +++ b/local-channel/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "local-channel" -version = "0.1.3" +version = "0.1.4" description = "A non-threadsafe multi-producer, single-consumer, futures-aware, FIFO queue" authors = [ "Nikolay Kim ", "Rob Ede ", ] -repository = "https://github.com/actix/actix-net.git" +repository = "https://github.com/actix/actix-net" keywords = ["channel", "local", "futures"] -license = "MIT OR Apache-2.0" +license.workspace = true edition.workspace = true rust-version.workspace = true From c69b8e9ade865ca3956932e90c60b00dd650e653 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 17 Sep 2023 20:11:05 +0100 Subject: [PATCH 58/79] ci: move coverage to own workflow --- .github/workflows/ci-post-merge.yml | 22 ----------------- .github/workflows/coverage.yml | 37 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/coverage.yml diff --git a/.github/workflows/ci-post-merge.yml b/.github/workflows/ci-post-merge.yml index 30bca39e..a19fa865 100644 --- a/.github/workflows/ci-post-merge.yml +++ b/.github/workflows/ci-post-merge.yml @@ -103,28 +103,6 @@ jobs: cargo install cargo-cache --version 0.6.2 --no-default-features --features ci-autoclean cargo-cache - coverage: - name: coverage - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Install Rust (nightly) - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: { toolchain: nightly } - - - name: Install cargo-tarpaulin - uses: taiki-e/install-action@v1 - with: { tool: cargo-tarpaulin } - - - name: Generate coverage file - if: github.ref == 'refs/heads/master' - run: cargo tarpaulin --out Xml --verbose - - name: Upload to Codecov - if: github.ref == 'refs/heads/master' - uses: codecov/codecov-action@v3 - with: { files: cobertura.xml } - minimal-versions: name: minimal versions runs-on: ubuntu-latest diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 00000000..a516f1c2 --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,37 @@ +name: Coverage + +on: + push: + branches: [master] + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + coverage: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + with: + components: llvm-tools-preview + + - name: Install cargo-llvm-cov + uses: taiki-e/install-action@v2.18.9 + with: + tool: cargo-llvm-cov + + - name: Generate code coverage + run: cargo llvm-cov --workspace --all-features --codecov --output-path codecov.json + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3.1.4 + with: + files: codecov.json + fail_ci_if_error: true From 4a7f2c95af7c22f66f5e6822fd9877232ce036a2 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 17 Sep 2023 20:25:58 +0100 Subject: [PATCH 59/79] chore: remove dates from changelogs --- .github/workflows/ci-post-merge.yml | 6 ++- actix-codec/CHANGES.md | 28 +++++----- actix-macros/Cargo.toml | 12 ++++- actix-rt/CHANGES.md | 60 +++++++++++----------- actix-service/CHANGES.md | 80 ++++++++++++++--------------- actix-tracing/CHANGES.md | 4 +- actix-utils/CHANGES.md | 76 +++++++++++++-------------- bytestring/CHANGES.md | 24 ++++----- local-waker/CHANGES.md | 8 +-- 9 files changed, 154 insertions(+), 144 deletions(-) diff --git a/.github/workflows/ci-post-merge.yml b/.github/workflows/ci-post-merge.yml index a19fa865..d9680fc3 100644 --- a/.github/workflows/ci-post-merge.yml +++ b/.github/workflows/ci-post-merge.yml @@ -111,11 +111,13 @@ jobs: - name: Install Rust (nightly) uses: actions-rust-lang/setup-rust-toolchain@v1 - with: { toolchain: nightly } + with: + toolchain: nightly - name: Install cargo-hack & cargo-minimal-versions uses: taiki-e/install-action@v1 - with: { tool: 'cargo-hack,cargo-minimal-versions' } + with: + tool: cargo-hack,cargo-minimal-versions - name: Check With Minimal Versions run: cargo minimal-versions check diff --git a/actix-codec/CHANGES.md b/actix-codec/CHANGES.md index 14dc78c5..ec54e407 100644 --- a/actix-codec/CHANGES.md +++ b/actix-codec/CHANGES.md @@ -1,27 +1,27 @@ # Changes -## Unreleased - 2023-xx-xx +## Unreleased - Minimum supported Rust version (MSRV) is now 1.65. -## 0.5.1 - 2022-03-15 +## 0.5.1 - Logs emitted now use the `tracing` crate with `log` compatibility. [#451] - Minimum supported Rust version (MSRV) is now 1.49. [#451]: https://github.com/actix/actix-net/pull/451 -## 0.5.0 - 2022-02-15 +## 0.5.0 - Updated `tokio-util` dependency to `0.7.0`. [#446] [#446]: https://github.com/actix/actix-net/pull/446 -## 0.4.2 - 2021-12-31 +## 0.4.2 - No significant changes since `0.4.1`. -## 0.4.1 - 2021-11-05 +## 0.4.1 - Added `LinesCodec.` [#338] - `Framed::poll_ready` flushes when the buffer is full. [#409] @@ -29,11 +29,11 @@ [#338]: https://github.com/actix/actix-net/pull/338 [#409]: https://github.com/actix/actix-net/pull/409 -## 0.4.0 - 2021-04-20 +## 0.4.0 - No significant changes since v0.4.0-beta.1. -## 0.4.0-beta.1 - 2020-12-28 +## 0.4.0-beta.1 - Replace `pin-project` with `pin-project-lite`. [#237] - Upgrade `tokio` dependency to `1`. [#237] @@ -42,15 +42,15 @@ [#237]: https://github.com/actix/actix-net/pull/237 -## 0.3.0 - 2020-08-23 +## 0.3.0 - No changes from beta 2. -## 0.3.0-beta.2 - 2020-08-19 +## 0.3.0-beta.2 - Remove unused type parameter from `Framed::replace_codec`. -## 0.3.0-beta.1 - 2020-08-19 +## 0.3.0-beta.1 - Use `.advance()` instead of `.split_to()`. - Upgrade `tokio-util` to `0.3`. @@ -60,7 +60,7 @@ - Add method on `Framed` to get a pinned reference to the underlying I/O. - Add method on `Framed` check emptiness of read buffer. -## 0.2.0 - 2019-12-10 +## 0.2.0 - Use specific futures dependencies. @@ -77,14 +77,14 @@ - Migrated to `std::future`. -## 0.1.2 - 2019-03-27 +## 0.1.2 - Added `Framed::map_io()` method. -## 0.1.1 - 2019-03-06 +## 0.1.1 - Added `FramedParts::with_read_buffer()` method. -## 0.1.0 - 2018-12-09 +## 0.1.0 - Move codec to separate crate. diff --git a/actix-macros/Cargo.toml b/actix-macros/Cargo.toml index 4ec4867d..39f021e7 100644 --- a/actix-macros/Cargo.toml +++ b/actix-macros/Cargo.toml @@ -7,12 +7,17 @@ authors = [ "Rob Ede ", ] description = "Macros for Actix system and runtime" -repository = "https://github.com/actix/actix-net.git" +repository = "https://github.com/actix/actix-net" categories = ["network-programming", "asynchronous"] -license = "MIT OR Apache-2.0" +license.workspace = true edition.workspace = true rust-version.workspace = true +[package.metadata.cargo-machete] +ignored = [ + "proc_macro2", # specified for minimal versions compat +] + [lib] proc-macro = true @@ -20,6 +25,9 @@ proc-macro = true quote = "1" syn = { version = "2", features = ["full"] } +# minimal versions compat +proc-macro2 = "1.0.60" + [dev-dependencies] actix-rt = "2" diff --git a/actix-rt/CHANGES.md b/actix-rt/CHANGES.md index 5c78df97..dc2d0fc3 100644 --- a/actix-rt/CHANGES.md +++ b/actix-rt/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2023-xx-xx +## Unreleased ## 2.9.0 @@ -8,7 +8,7 @@ - Add `actix_rt::Runtime::tokio_runtime()` method to retrieve the underlying Tokio runtime. - Minimum supported Rust version (MSRV) is now 1.65. -## 2.8.0 - 2022-12-21 +## 2.8.0 - Add `#[track_caller]` attribute to `spawn` functions and methods. [#454] - Update `tokio-uring` dependency to `0.4`. [#473] @@ -17,32 +17,32 @@ [#454]: https://github.com/actix/actix-net/pull/454 [#473]: https://github.com/actix/actix-net/pull/473 -## 2.7.0 - 2022-03-08 +## 2.7.0 - Update `tokio-uring` dependency to `0.3`. [#448] - Minimum supported Rust version (MSRV) is now 1.49. [#448]: https://github.com/actix/actix-net/pull/448 -## 2.6.0 - 2022-01-12 +## 2.6.0 - Update `tokio-uring` dependency to `0.2`. [#436] [#436]: https://github.com/actix/actix-net/pull/436 -## 2.5.1 - 2021-12-31 +## 2.5.1 - Expose `System::with_tokio_rt` and `Arbiter::with_tokio_rt`. [#430] [#430]: https://github.com/actix/actix-net/pull/430 -## 2.5.0 - 2021-11-22 +## 2.5.0 - Add `System::run_with_code` to allow retrieving the exit code on stop. [#411] [#411]: https://github.com/actix/actix-net/pull/411 -## 2.4.0 - 2021-11-05 +## 2.4.0 - Add `Arbiter::try_current` for situations where thread may or may not have Arbiter context. [#408] - Start io-uring with `System::new` when feature is enabled. [#395] @@ -50,7 +50,7 @@ [#395]: https://github.com/actix/actix-net/pull/395 [#408]: https://github.com/actix/actix-net/pull/408 -## 2.3.0 - 2021-10-11 +## 2.3.0 - The `spawn` method can now resolve with non-unit outputs. [#369] - Add experimental (semver-exempt) `io-uring` feature for enabling async file I/O on linux. [#374] @@ -58,14 +58,14 @@ [#369]: https://github.com/actix/actix-net/pull/369 [#374]: https://github.com/actix/actix-net/pull/374 -## 2.2.0 - 2021-03-29 +## 2.2.0 - **BREAKING** `ActixStream::{poll_read_ready, poll_write_ready}` methods now return `Ready` object in ok variant. [#293] - Breakage is acceptable since `ActixStream` was not intended to be public. [#293]: https://github.com/actix/actix-net/pull/293 -## 2.1.0 - 2021-02-24 +## 2.1.0 - Add `ActixStream` extension trait to include readiness methods. [#276] - Re-export `tokio::net::TcpSocket` in `net` module [#282] @@ -73,7 +73,7 @@ [#276]: https://github.com/actix/actix-net/pull/276 [#282]: https://github.com/actix/actix-net/pull/282 -## 2.0.2 - 2021-02-06 +## 2.0.2 - Add `Arbiter::handle` to get a handle of an owned Arbiter. [#274] - Add `System::try_current` for situations where actix may or may not be running a System. [#275] @@ -81,20 +81,20 @@ [#274]: https://github.com/actix/actix-net/pull/274 [#275]: https://github.com/actix/actix-net/pull/275 -## 2.0.1 - 2021-02-06 +## 2.0.1 - Expose `JoinError` from Tokio. [#271] [#271]: https://github.com/actix/actix-net/pull/271 -## 2.0.0 - 2021-02-02 +## 2.0.0 - Remove all Arbiter-local storage methods. [#262] - Re-export `tokio::pin`. [#262] [#262]: https://github.com/actix/actix-net/pull/262 -## 2.0.0-beta.3 - 2021-01-31 +## 2.0.0-beta.3 - Remove `run_in_tokio`, `attach_to_tokio` and `AsyncSystemRunner`. [#253] - Return `JoinHandle` from `actix_rt::spawn`. [#253] @@ -118,14 +118,14 @@ [#256]: https://github.com/actix/actix-net/pull/256 [#257]: https://github.com/actix/actix-net/pull/257 -## 2.0.0-beta.2 - 2021-01-09 +## 2.0.0-beta.2 - Add `task` mod with re-export of `tokio::task::{spawn_blocking, yield_now, JoinHandle}` [#245] - Add default "macros" feature to allow faster compile times when using `default-features=false`. [#245]: https://github.com/actix/actix-net/pull/245 -## 2.0.0-beta.1 - 2020-12-28 +## 2.0.0-beta.1 - Add `System::attach_to_tokio` method. [#173] - Update `tokio` dependency to `1.0`. [#236] @@ -139,13 +139,13 @@ [#207]: https://github.com/actix/actix-net/pull/207 [#236]: https://github.com/actix/actix-net/pull/236 -## 1.1.1 - 2020-04-30 +## 1.1.1 - Fix memory leak due to [#94] (see [#129] for more detail) [#129]: https://github.com/actix/actix-net/issues/129 -## 1.1.0 - 2020-04-08 _(YANKED)_ +## 1.1.0 _(YANKED)_ - Expose `System::is_set` to check if current system has ben started [#99] - Add `Arbiter::is_running` to check if event loop is running [#124] @@ -155,57 +155,57 @@ [#99]: https://github.com/actix/actix-net/pull/99 [#124]: https://github.com/actix/actix-net/pull/124 -## 1.0.0 - 2019-12-11 +## 1.0.0 - Update dependencies -## 1.0.0-alpha.3 - 2019-12-07 +## 1.0.0-alpha.3 - Migrate to tokio 0.2 - Fix compilation on non-unix platforms -## 1.0.0-alpha.2 - 2019-12-02 +## 1.0.0-alpha.2 - Export `main` and `test` attribute macros - Export `time` module (re-export of tokio-timer) - Export `net` module (re-export of tokio-net) -## 1.0.0-alpha.1 - 2019-11-22 +## 1.0.0-alpha.1 - Migrate to std::future and tokio 0.2 -## 0.2.6 - 2019-11-14 +## 0.2.6 - Allow to join arbiter's thread. #60 - Fix arbiter's thread panic message. -## 0.2.5 - 2019-09-02 +## 0.2.5 - Add arbiter specific storage -## 0.2.4 - 2019-07-17 +## 0.2.4 - Avoid a copy of the Future when initializing the Box. #29 -## 0.2.3 - 2019-06-22 +## 0.2.3 - Allow to start System using existing CurrentThread Handle #22 -## 0.2.2 - 2019-03-28 +## 0.2.2 - Moved `blocking` module to `actix-threadpool` crate -## 0.2.1 - 2019-03-11 +## 0.2.1 - Added `blocking` module - Added `Arbiter::exec_fn` - execute fn on the arbiter's thread - Added `Arbiter::exec` - execute fn on the arbiter's thread and wait result -## 0.2.0 - 2019-03-06 +## 0.2.0 - `run` method returns `io::Result<()>` - Removed `Handle` -## 0.1.0 - 2018-12-09 +## 0.1.0 - Initial release diff --git a/actix-service/CHANGES.md b/actix-service/CHANGES.md index ee549941..9a3b70a3 100644 --- a/actix-service/CHANGES.md +++ b/actix-service/CHANGES.md @@ -1,28 +1,28 @@ # Changes -## Unreleased - 2023-xx-xx +## Unreleased - Minimum supported Rust version (MSRV) is now 1.65. -## 2.0.2 - 2021-12-18 +## 2.0.2 - Service types can now be `Send` and `'static` regardless of request, response, and config types, etc. [#397] [#397]: https://github.com/actix/actix-net/pull/397 -## 2.0.1 - 2021-10-11 +## 2.0.1 - Documentation fix. [#388] [#388]: https://github.com/actix/actix-net/pull/388 -## 2.0.0 - 2021-04-16 +## 2.0.0 - Removed pipeline and related structs/functions. [#335] [#335]: https://github.com/actix/actix-net/pull/335 -## 2.0.0-beta.5 - 2021-03-15 +## 2.0.0-beta.5 - Add default `Service` trait impl for `Rc` and `&S: Service`. [#288] - Add `boxed::rc_service` function for constructing `boxed::RcService` type [#290] @@ -30,7 +30,7 @@ [#288]: https://github.com/actix/actix-net/pull/288 [#290]: https://github.com/actix/actix-net/pull/290 -## 2.0.0-beta.4 - 2021-02-04 +## 2.0.0-beta.4 - `Service::poll_ready` and `Service::call` receive `&self`. [#247] - `apply_fn` and `apply_fn_factory` now receive `Fn(Req, &Service)` function type. [#247] @@ -39,17 +39,17 @@ [#247]: https://github.com/actix/actix-net/pull/247 -## 2.0.0-beta.3 - 2021-01-09 +## 2.0.0-beta.3 - The `forward_ready!` macro converts errors. [#246] [#246]: https://github.com/actix/actix-net/pull/246 -## 2.0.0-beta.2 - 2021-01-03 +## 2.0.0-beta.2 - Remove redundant type parameter from `map_config`. -## 2.0.0-beta.1 - 2020-12-28 +## 2.0.0-beta.1 - `Service`, other traits, and many type signatures now take the the request type as a type parameter instead of an associated type. [#232] - Add `always_ready!` and `forward_ready!` macros. [#233] @@ -62,82 +62,82 @@ [#233]: https://github.com/actix/actix-net/pull/233 [#235]: https://github.com/actix/actix-net/pull/235 -## 1.0.6 - 2020-08-09 +## 1.0.6 - Removed unsound custom Cell implementation that allowed obtaining several mutable references to the same data, which is undefined behavior in Rust and could lead to violations of memory safety. External code could obtain several mutable references to the same data through service combinators. Attempts to acquire several mutable references to the same data will instead result in a panic. -## 1.0.5 - 2020-01-16 +## 1.0.5 - Fixed unsoundness in .and_then()/.then() service combinators. -## 1.0.4 - 2020-01-15 +## 1.0.4 - Revert 1.0.3 change -## 1.0.3 - 2020-01-15 +## 1.0.3 - Fixed unsoundness in `AndThenService` impl. -## 1.0.2 - 2020-01-08 +## 1.0.2 - Add `into_service` helper function. -## 1.0.1 - 2019-12-22 +## 1.0.1 - `map_config()` and `unit_config()` now accept `IntoServiceFactory` type. -## 1.0.0 - 2019-12-11 +## 1.0.0 - Add Clone impl for Apply service -## 1.0.0-alpha.4 - 2019-12-08 +## 1.0.0-alpha.4 - Renamed `service_fn` to `fn_service` - Renamed `factory_fn` to `fn_factory` - Renamed `factory_fn_cfg` to `fn_factory_with_config` -## 1.0.0-alpha.3 - 2019-12-06 +## 1.0.0-alpha.3 - Add missing Clone impls - Restore `Transform::map_init_err()` combinator - Restore `Service/Factory::apply_fn()` in form of `Pipeline/Factory::and_then_apply_fn()` - Optimize service combinators and futures memory layout -## 1.0.0-alpha.2 - 2019-12-02 +## 1.0.0-alpha.2 - Use owned config value for service factory - Renamed BoxedNewService/BoxedService to BoxServiceFactory/BoxService -## 1.0.0-alpha.1 - 2019-11-25 +## 1.0.0-alpha.1 - Migrated to `std::future` - `NewService` renamed to `ServiceFactory` - Added `pipeline` and `pipeline_factory` function -## 0.4.2 - 2019-08-27 +## 0.4.2 - Check service readiness for `new_apply_cfg` combinator -## 0.4.1 - 2019-06-06 +## 0.4.1 - Add `new_apply_cfg` function -## 0.4.0 - 2019-05-12 +## 0.4.0 - Add `NewService::map_config` and `NewService::unit_config` combinators. - Use associated type for `NewService` config. - Change `apply_cfg` function. - Renamed helper functions. -## 0.3.6 - 2019-04-07 +## 0.3.6 - Poll boxed service call result immediately -## 0.3.5 - 2019-03-29 +## 0.3.5 - Add `impl Service for Rc>`. -## 0.3.4 - 2019-03-12 +## 0.3.4 - Add `Transform::from_err()` combinator - Add `apply_fn` helper @@ -145,37 +145,37 @@ - Add `apply_transform` helper - Add `apply_cfg` helper -## 0.3.3 - 2019-03-09 +## 0.3.3 - Add `ApplyTransform` new service for transform and new service. - Add `NewService::apply_cfg()` combinator, allows to use nested `NewService` with different config parameter. - Revert IntoFuture change -## 0.3.2 - 2019-03-04 +## 0.3.2 - Change `NewService::Future` and `Transform::Future` to the `IntoFuture` trait. - Export `AndThenTransform` type -## 0.3.1 - 2019-03-04 +## 0.3.1 - Simplify Transform trait -## 0.3.0 - 2019-03-02 +## 0.3.0 - Added boxed NewService and Service. - Added `Config` parameter to `NewService` trait. - Added `Config` parameter to `NewTransform` trait. -## 0.2.2 - 2019-02-19 +## 0.2.2 - Added `NewService` impl for `Rc where S: NewService` - Added `NewService` impl for `Arc where S: NewService` -## 0.2.1 - 2019-02-03 +## 0.2.1 - Generalize `.apply` combinator with Transform trait -## 0.2.0 - 2019-02-01 +## 0.2.0 - Use associated type instead of generic for Service definition. - Before: @@ -194,31 +194,31 @@ } ``` -## 0.1.6 - 2019-01-24 +## 0.1.6 - Use `FnMut` instead of `Fn` for .apply() and .map() combinators and `FnService` type - Change `.apply()` error semantic, new service's error is `From` -## 0.1.5 - 2019-01-13 +## 0.1.5 - Make `Out::Error` convertible from `T::Error` for apply combinator -## 0.1.4 - 2019-01-11 +## 0.1.4 - Use `FnMut` instead of `Fn` for `FnService` -## 0.1.3 - 2018-12-12 +## 0.1.3 - Split service combinators to separate trait -## 0.1.2 - 2018-12-12 +## 0.1.2 - Release future early for `.and_then()` and `.then()` combinators -## 0.1.1 - 2018-12-09 +## 0.1.1 - Added Service impl for `Box` -## 0.1.0 - 2018-12-09 +## 0.1.0 - Initial import diff --git a/actix-tracing/CHANGES.md b/actix-tracing/CHANGES.md index f61d3f2b..2e90e25c 100644 --- a/actix-tracing/CHANGES.md +++ b/actix-tracing/CHANGES.md @@ -1,9 +1,9 @@ # Changes -## Unreleased - 2023-xx-xx +## Unreleased - Minimum supported Rust version (MSRV) is now 1.65. -## 0.1.0 - 2020-01-15 +## 0.1.0 - Initial release diff --git a/actix-utils/CHANGES.md b/actix-utils/CHANGES.md index fc7df208..c68c3171 100644 --- a/actix-utils/CHANGES.md +++ b/actix-utils/CHANGES.md @@ -1,24 +1,24 @@ # Changes -## Unreleased - 2023-xx-xx +## Unreleased - Minimum supported Rust version (MSRV) is now 1.65. -## 3.0.1 - 2022-10-21 +## 3.0.1 - Minimum supported Rust version (MSRV) is now 1.57. -## 3.0.0 - 2021-04-16 +## 3.0.0 - No significant changes from `3.0.0-beta.4`. -## 3.0.0-beta.4 - 2021-04-01 +## 3.0.0-beta.4 - Add `future::Either` type. [#305] [#305]: https://github.com/actix/actix-net/pull/305 -## 3.0.0-beta.3 - 2021-04-01 +## 3.0.0-beta.3 - Moved `mpsc` to own crate `local-channel`. [#301] - Moved `task::LocalWaker` to own crate `local-waker`. [#301] @@ -28,13 +28,13 @@ [#301]: https://github.com/actix/actix-net/pull/301 -## 3.0.0-beta.2 - 2021-02-06 +## 3.0.0-beta.2 - Update `actix-rt` to `2.0.0`. [#273] [#273]: https://github.com/actix/actix-net/pull/273 -## 3.0.0-beta.1 - 2020-12-28 +## 3.0.0-beta.1 - Update `bytes` dependency to `1`. [#237] - Use `pin-project-lite` to replace `pin-project`. [#229] @@ -43,139 +43,139 @@ [#229]: https://github.com/actix/actix-net/pull/229 [#237]: https://github.com/actix/actix-net/pull/237 -## 2.0.0 - 2020-08-23 +## 2.0.0 - No changes from beta 1. -## 2.0.0-beta.1 - 2020-08-19 +## 2.0.0-beta.1 - Upgrade `tokio-util` to `0.3`. - Remove unsound custom Cell and use `std::cell::RefCell` instead, as well as `actix-service`. - Rename method to correctly spelled `LocalWaker::is_registered`. -## 1.0.6 - 2020-01-08 +## 1.0.6 - Add `Clone` impl for `condition::Waiter`. -## 1.0.5 - 2020-01-08 +## 1.0.5 - Add `Condition` type. - Add `Pool` of one-shot's. -## 1.0.4 - 2019-12-20 +## 1.0.4 - Add methods to check `LocalWaker` registration state. -## 1.0.3 - 2019-12-11 +## 1.0.3 - Revert InOrder service changes -## 1.0.2 - 2019-12-11 +## 1.0.2 - Allow to create `framed::Dispatcher` with custom `mpsc::Receiver`. - Add `oneshot::Sender::is_canceled()` method. -## 1.0.1 - 2019-12-11 +## 1.0.1 - Optimize InOrder service. -## 1.0.0 - 2019-12-11 +## 1.0.0 - Simplify oneshot and mpsc implementations. -## 1.0.0-alpha.3 - 2019-12-07 +## 1.0.0-alpha.3 - Migrate to tokio 0.2. - Fix oneshot. -## 1.0.0-alpha.2 - 2019-12-02 +## 1.0.0-alpha.2 - Migrate to `std::future`. -## 0.4.7 - 2019-10-14 +## 0.4.7 - Re-register task on every framed transport poll. -## 0.4.6 - 2019-10-08 +## 0.4.6 - Refactor `Counter` type. register current task in available method. -## 0.4.5 - 2019-07-19 +## 0.4.5 - Deprecated `CloneableService` as it is not safe. -## 0.4.4 - 2019-07-17 +## 0.4.4 - Undeprecate `FramedTransport` as it is actually useful. -## 0.4.3 - 2019-07-17 +## 0.4.3 - Deprecate `CloneableService` as it is not safe and in general not very useful. - Deprecate `FramedTransport` in favor of `actix-ioframe`. -## 0.4.2 - 2019-06-26 +## 0.4.2 - Do not block on sink drop for FramedTransport. -## 0.4.1 - 2019-05-15 +## 0.4.1 - Change `Either` constructor. -## 0.4.0 - 2019-05-11 +## 0.4.0 - Change `Either` to handle two nexted services. - Upgrade actix-service 0.4. - Removed framed related services. - Removed stream related services. -## 0.3.5 - 2019-04-04 +## 0.3.5 - Allow to send messages to `FramedTransport` via mpsc channel. - Remove `'static` constraint from Clonable service. -## 0.3.4 - 2019-03-12 +## 0.3.4 - `TimeoutService`, `InOrderService`, `InFlightService` accepts generic IntoService services. - Fix `InFlightService::poll_ready()` nested service readiness check. - Fix `InOrderService::poll_ready()` nested service readiness check. -## 0.3.3 - 2019-03-09 +## 0.3.3 - Revert IntoFuture change. - Add generic config param for IntoFramed and TakeOne new services. -## 0.3.2 - 2019-03-04 +## 0.3.2 - Use IntoFuture for new services. -## 0.3.1 - 2019-03-04 +## 0.3.1 - Use new type of transform trait. -## 0.3.0 - 2019-03-02 +## 0.3.0 - Use new `NewService` trait - BoxedNewService`and`BoxedService` types moved to actix-service crate. -## 0.2.4 - 2019-02-21 +## 0.2.4 - Custom `BoxedNewService` implementation. -## 0.2.3 - 2019-02-21 +## 0.2.3 - Add `BoxedNewService` and `BoxedService`. -## 0.2.2 - 2019-02-11 +## 0.2.2 - Add `Display` impl for `TimeoutError`. - Add `Display` impl for `InOrderError`. -## 0.2.1 - 2019-02-06 +## 0.2.1 - Add `InOrder` service. the service yields responses as they become available, in the order that their originating requests were submitted to the service. - Convert `Timeout` and `InFlight` services to a transforms. -## 0.2.0 - 2019-02-01 +## 0.2.0 - Fix framed transport error handling. - Added Clone impl for Either service. @@ -183,6 +183,6 @@ - Added Service and NewService for Stream dispatcher. - Switch to actix-service 0.2. -## 0.1.0 - 2018-12-09 +## 0.1.0 - Move utils services to separate crate. diff --git a/bytestring/CHANGES.md b/bytestring/CHANGES.md index a66b9e12..270dae14 100644 --- a/bytestring/CHANGES.md +++ b/bytestring/CHANGES.md @@ -1,25 +1,25 @@ # Changes -## Unreleased - 2023-xx-xx +## Unreleased -## 1.3.0 - 2023-03-03 +## 1.3.0 - Implement `AsRef` for `ByteString`. -## 1.2.1 - 2022-11-12 +## 1.2.1 - Fix `#[no_std]` compatibility. [#471] [#471]: https://github.com/actix/actix-net/pull/471 -## 1.2.0 - 2022-11-07 +## 1.2.0 - Add `ByteString::slice_ref` which can safely slice a `ByteString` into a new one with zero copy. [#470] - Minimum supported Rust version (MSRV) is now 1.57. [#470]: https://github.com/actix/actix-net/pull/470 -## 1.1.0 - 2022-06-11 +## 1.1.0 - Implement `From>` for `ByteString`. [#458] - Implement `Into` for `ByteString`. [#458] @@ -27,7 +27,7 @@ [#458]: https://github.com/actix/actix-net/pull/458 -## 1.0.0 - 2020-12-31 +## 1.0.0 - Update `bytes` dependency to `1`. - Add array and slice of `u8` impls of `TryFrom` up to 32 in length. @@ -35,27 +35,27 @@ - `ByteString::new` is now a `const fn`. - Crate is now `#[no_std]` compatible. -## 0.1.5 - 2020-03-30 +## 0.1.5 - Serde support -## 0.1.4 - 2020-01-14 +## 0.1.4 - Fix `AsRef` impl -## 0.1.3 - 2020-01-13 +## 0.1.3 - Add `PartialEq>`, `AsRef<[u8]>` impls -## 0.1.2 - 2019-12-22 +## 0.1.2 - Fix `new()` method - Make `ByteString::from_static()` and `ByteString::from_bytes_unchecked()` methods const. -## 0.1.1 - 2019-12-07 +## 0.1.1 - Fix hash impl -## 0.1.0 - 2019-12-07 +## 0.1.0 - Initial release diff --git a/local-waker/CHANGES.md b/local-waker/CHANGES.md index f8aadaa6..02112c90 100644 --- a/local-waker/CHANGES.md +++ b/local-waker/CHANGES.md @@ -1,17 +1,17 @@ # Changes -## Unreleased - 2023-xx-xx +## Unreleased - Minimum supported Rust version (MSRV) is now 1.65. -## 0.1.3 - 2022-05-03 +## 0.1.3 - Minimum supported Rust version (MSRV) is now 1.49. -## 0.1.2 - 2021-12-18 +## 0.1.2 - Fix crate metadata. -## 0.1.1 - 2021-03-29 +## 0.1.1 - Move `LocalWaker` to it's own crate. From 17409cd203e29ddac60fa185beee595c145d5627 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 17 Sep 2023 20:33:36 +0100 Subject: [PATCH 60/79] docs: add bytestring readme --- actix-server/README.md | 8 +++++++- actix-service/README.md | 2 +- bytestring/README.md | 16 ++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 bytestring/README.md diff --git a/actix-server/README.md b/actix-server/README.md index 68f2a1ec..eb9a0bd7 100644 --- a/actix-server/README.md +++ b/actix-server/README.md @@ -2,14 +2,20 @@ > General purpose TCP server built for the Actix ecosystem. + + [![crates.io](https://img.shields.io/crates/v/actix-server?label=latest)](https://crates.io/crates/actix-server) [![Documentation](https://docs.rs/actix-server/badge.svg?version=2.3.0)](https://docs.rs/actix-server/2.3.0) [![Version](https://img.shields.io/badge/rustc-1.52+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.52.0.html) -![License](https://img.shields.io/crates/l/actix-server.svg) +![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-server.svg) +
[![Dependency Status](https://deps.rs/crate/actix-server/2.3.0/status.svg)](https://deps.rs/crate/actix-server/2.3.0) ![Download](https://img.shields.io/crates/d/actix-server.svg) [![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x) + + ## Resources + - [Library Documentation](https://docs.rs/actix-server) - [Examples](/actix-server/examples) diff --git a/actix-service/README.md b/actix-service/README.md index 62f9fe1c..79bf3028 100644 --- a/actix-service/README.md +++ b/actix-service/README.md @@ -5,7 +5,7 @@ [![crates.io](https://img.shields.io/crates/v/actix-service?label=latest)](https://crates.io/crates/actix-service) [![Documentation](https://docs.rs/actix-service/badge.svg?version=2.0.2)](https://docs.rs/actix-service/2.0.2) [![Version](https://img.shields.io/badge/rustc-1.46+-ab6000.svg)](https://blog.rust-lang.org/2020/03/12/Rust-1.46.html) -![License](https://img.shields.io/crates/l/actix-service.svg) +![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-service.svg) [![Dependency Status](https://deps.rs/crate/actix-service/2.0.2/status.svg)](https://deps.rs/crate/actix-service/2.0.2) ![Download](https://img.shields.io/crates/d/actix-service.svg) [![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x) diff --git a/bytestring/README.md b/bytestring/README.md new file mode 100644 index 00000000..9a53272d --- /dev/null +++ b/bytestring/README.md @@ -0,0 +1,16 @@ +# `bytestring` + +> A UTF-8 encoded read-only string using Bytes as storage. + + + +[![crates.io](https://img.shields.io/crates/v/bytestring?label=latest)](https://crates.io/crates/bytestring) +[![Documentation](https://docs.rs/bytestring/badge.svg?version=1.3.0)](https://docs.rs/bytestring/1.3.0) +[![Version](https://img.shields.io/badge/rustc-1.52+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.52.0.html) +![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/bytestring.svg) +
+[![Dependency Status](https://deps.rs/crate/bytestring/1.3.0/status.svg)](https://deps.rs/crate/bytestring/1.3.0) +![Download](https://img.shields.io/crates/d/bytestring.svg) +[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x) + + From 69e50b5e6656b4762f86409a196b86a1fd297bfd Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 01:35:12 +0000 Subject: [PATCH 61/79] add dependabot updater for actions and cargo --- .github/dependabot.yml | 10 ++++++++++ justfile | 2 ++ 2 files changed, 12 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 justfile diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..b3eb7c8b --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + - package-ecosystem: cargo + directory: / + schedule: + interval: weekly diff --git a/justfile b/justfile new file mode 100644 index 00000000..05c641c2 --- /dev/null +++ b/justfile @@ -0,0 +1,2 @@ +_list: + @just --list From 6d9eb7e1622f89b27cad05730aa821548337d04e Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 01:55:34 +0000 Subject: [PATCH 62/79] ci: specify full action versions --- .github/workflows/ci-post-merge.yml | 18 ++++++++++-------- .github/workflows/ci.yml | 12 +++++++----- .github/workflows/clippy-fmt.yml | 8 ++++---- .github/workflows/upload-doc.yml | 5 +++-- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci-post-merge.yml b/.github/workflows/ci-post-merge.yml index d9680fc3..7c9de532 100644 --- a/.github/workflows/ci-post-merge.yml +++ b/.github/workflows/ci-post-merge.yml @@ -52,12 +52,13 @@ jobs: echo 'OPENSSL_DIR=C:\Program Files\OpenSSL' | Out-File -FilePath $env:GITHUB_ENV -Append - name: Install Rust (${{ matrix.version }}) - uses: actions-rust-lang/setup-rust-toolchain@v1 + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 with: toolchain: ${{ matrix.version }} - - uses: taiki-e/install-action@v2 - with: { tool: cargo-hack } + - uses: taiki-e/install-action@v2.20.14 + with: + tool: cargo-hack - name: check lib if: > @@ -110,12 +111,12 @@ jobs: - uses: actions/checkout@v3 - name: Install Rust (nightly) - uses: actions-rust-lang/setup-rust-toolchain@v1 + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 with: toolchain: nightly - name: Install cargo-hack & cargo-minimal-versions - uses: taiki-e/install-action@v1 + uses: taiki-e/install-action@v2.20.14 with: tool: cargo-hack,cargo-minimal-versions @@ -129,11 +130,12 @@ jobs: - uses: actions/checkout@v3 - name: Install Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 - name: Install cargo-nextest - uses: taiki-e/install-action@v1 - with: { tool: cargo-nextest } + uses: taiki-e/install-action@v2.20.14 + with: + tool: cargo-nextest - name: Test with cargo-nextest run: cargo nextest run diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 74315e6a..d69f0929 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,12 +53,13 @@ jobs: echo 'OPENSSL_DIR=C:\Program Files\OpenSSL' | Out-File -FilePath $env:GITHUB_ENV -Append - name: Install Rust (${{ matrix.version }}) - uses: actions-rust-lang/setup-rust-toolchain@v1 + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 with: toolchain: ${{ matrix.version }} - - uses: taiki-e/install-action@v1 - with: { tool: cargo-hack } + - uses: taiki-e/install-action@v2.20.14 + with: + tool: cargo-hack - name: Generate Cargo.lock run: cargo generate-lockfile @@ -123,8 +124,9 @@ jobs: - uses: actions/checkout@v3 - name: Install Rust (nightly) - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: { toolchain: nightly } + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + with: + toolchain: nightly - name: doc tests io-uring run: | diff --git a/.github/workflows/clippy-fmt.yml b/.github/workflows/clippy-fmt.yml index b26b1282..f50aeee1 100644 --- a/.github/workflows/clippy-fmt.yml +++ b/.github/workflows/clippy-fmt.yml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v3 - - uses: actions-rust-lang/setup-rust-toolchain@v1 + - uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 with: toolchain: nightly components: rustfmt @@ -33,11 +33,11 @@ jobs: steps: - uses: actions/checkout@v3 - - uses: actions-rust-lang/setup-rust-toolchain@v1 + - uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 with: { components: clippy } - - uses: giraffate/clippy-action@v1 + - uses: giraffate/clippy-action@v1.0.1 with: reporter: 'github-pr-check' github_token: ${{ secrets.GITHUB_TOKEN }} - clippy_flags: --workspace --all-features --tests --examples --bins -- -Dclippy::todo + clippy_flags: --workspace --all-features --tests --examples --bins -- -Dclippy::todo -Aunknown_lints diff --git a/.github/workflows/upload-doc.yml b/.github/workflows/upload-doc.yml index 66147949..6858ec56 100644 --- a/.github/workflows/upload-doc.yml +++ b/.github/workflows/upload-doc.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v3 - - uses: actions-rust-lang/setup-rust-toolchain@v1 + - uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 with: { toolchain: nightly } - name: Build Docs @@ -30,6 +30,7 @@ jobs: run: echo '' > target/doc/index.html - name: Deploy to GitHub Pages - uses: JamesIves/github-pages-deploy-action@v4 + uses: JamesIves/github-pages-deploy-action@v4.4.3 with: folder: target/doc + single-commit: true From db54639f0fe62717679949ec598011eb4e64bcf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 29 Oct 2023 03:30:20 +0000 Subject: [PATCH 63/79] Bump taiki-e/install-action from 2.18.9 to 2.21.2 (#497) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-post-merge.yml | 6 +++--- .github/workflows/ci.yml | 2 +- .github/workflows/coverage.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-post-merge.yml b/.github/workflows/ci-post-merge.yml index 7c9de532..7aa9ff8a 100644 --- a/.github/workflows/ci-post-merge.yml +++ b/.github/workflows/ci-post-merge.yml @@ -56,7 +56,7 @@ jobs: with: toolchain: ${{ matrix.version }} - - uses: taiki-e/install-action@v2.20.14 + - uses: taiki-e/install-action@v2.21.2 with: tool: cargo-hack @@ -116,7 +116,7 @@ jobs: toolchain: nightly - name: Install cargo-hack & cargo-minimal-versions - uses: taiki-e/install-action@v2.20.14 + uses: taiki-e/install-action@v2.21.2 with: tool: cargo-hack,cargo-minimal-versions @@ -133,7 +133,7 @@ jobs: uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 - name: Install cargo-nextest - uses: taiki-e/install-action@v2.20.14 + uses: taiki-e/install-action@v2.21.2 with: tool: cargo-nextest diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d69f0929..6566aa14 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: with: toolchain: ${{ matrix.version }} - - uses: taiki-e/install-action@v2.20.14 + - uses: taiki-e/install-action@v2.21.2 with: tool: cargo-hack diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index a516f1c2..b07658df 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -23,7 +23,7 @@ jobs: components: llvm-tools-preview - name: Install cargo-llvm-cov - uses: taiki-e/install-action@v2.18.9 + uses: taiki-e/install-action@v2.21.2 with: tool: cargo-llvm-cov From 580af3dec4e0ba552c88c73d7f8239ebb5e561c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 29 Oct 2023 04:17:06 +0000 Subject: [PATCH 64/79] Bump actions/checkout from 3 to 4 (#494) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-post-merge.yml | 6 +++--- .github/workflows/ci.yml | 4 ++-- .github/workflows/clippy-fmt.yml | 4 ++-- .github/workflows/upload-doc.yml | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci-post-merge.yml b/.github/workflows/ci-post-merge.yml index 7aa9ff8a..c6b46ea1 100644 --- a/.github/workflows/ci-post-merge.yml +++ b/.github/workflows/ci-post-merge.yml @@ -36,7 +36,7 @@ jobs: if: matrix.target.os == 'macos-latest' run: sudo ifconfig lo0 alias 127.0.0.3 - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Free Disk Space if: matrix.target.os == 'ubuntu-latest' @@ -108,7 +108,7 @@ jobs: name: minimal versions runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Rust (nightly) uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 @@ -127,7 +127,7 @@ jobs: name: nextest runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Rust uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6566aa14..356a950d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: if: matrix.target.os == 'macos-latest' run: sudo ifconfig lo0 alias 127.0.0.3 - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Free Disk Space if: matrix.target.os == 'ubuntu-latest' @@ -121,7 +121,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Rust (nightly) uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 diff --git a/.github/workflows/clippy-fmt.yml b/.github/workflows/clippy-fmt.yml index f50aeee1..dab27736 100644 --- a/.github/workflows/clippy-fmt.yml +++ b/.github/workflows/clippy-fmt.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 with: @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 with: { components: clippy } diff --git a/.github/workflows/upload-doc.yml b/.github/workflows/upload-doc.yml index 6858ec56..f54fdf6a 100644 --- a/.github/workflows/upload-doc.yml +++ b/.github/workflows/upload-doc.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 with: { toolchain: nightly } From b9b628c47b4c0b35655590e3f418ee26cc5a1be8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 29 Oct 2023 05:08:55 +0000 Subject: [PATCH 65/79] Update criterion requirement from 0.4 to 0.5 (#495) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 23 +++++++++++++---------- actix-codec/Cargo.toml | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 356a950d..855420e2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,10 +24,10 @@ jobs: - { name: Windows (MinGW), os: windows-latest, triple: x86_64-pc-windows-gnu } - { name: Windows (32-bit), os: windows-latest, triple: i686-pc-windows-msvc } version: - - 1.65.0 # MSRV - - stable + - { name: msrv, version: 1.65.0 } + - { name: stable, version: stable } - name: ${{ matrix.target.name }} / ${{ matrix.version }} + name: ${{ matrix.target.name }} / ${{ matrix.version.name }} runs-on: ${{ matrix.target.os }} env: {} @@ -52,10 +52,10 @@ jobs: echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append echo 'OPENSSL_DIR=C:\Program Files\OpenSSL' | Out-File -FilePath $env:GITHUB_ENV -Append - - name: Install Rust (${{ matrix.version }}) + - name: Install Rust (${{ matrix.version.name }}) uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 with: - toolchain: ${{ matrix.version }} + toolchain: ${{ matrix.version.version }} - uses: taiki-e/install-action@v2.21.2 with: @@ -65,9 +65,12 @@ jobs: run: cargo generate-lockfile - name: workaround MSRV issues - if: matrix.version != 'stable' + if: matrix.version.name == 'msrv' run: | - cargo update -p=time --precise=0.3.16 # time is only a dev dep so shouldn't affect msrv + cargo update -p=time --precise=0.3.16 + cargo update -p=clap --precise=4.3.24 + cargo update -p=clap_lex --precise=0.5.0 + cargo update -p=anstyle --precise=1.0.2 - name: check lib if: > @@ -106,9 +109,9 @@ jobs: ulimit -Sl 512 && ulimit -Hl 512 && PATH=$PATH:/usr/share/rust/.cargo/bin - && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-rustls-020 - && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-rustls-021 - && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-linux + && RUSTUP_TOOLCHAIN=${{ matrix.version.version }} cargo ci-test-rustls-020 + && RUSTUP_TOOLCHAIN=${{ matrix.version.version }} cargo ci-test-rustls-021 + && RUSTUP_TOOLCHAIN=${{ matrix.version.version }} cargo ci-test-linux " - name: Clear the cargo caches diff --git a/actix-codec/Cargo.toml b/actix-codec/Cargo.toml index d8f072df..f2261827 100644 --- a/actix-codec/Cargo.toml +++ b/actix-codec/Cargo.toml @@ -25,7 +25,7 @@ tokio-util = { version = "0.7", features = ["codec", "io"] } tracing = { version = "0.1.30", default-features = false, features = ["log"] } [dev-dependencies] -criterion = { version = "0.4", features = ["html_reports"] } +criterion = { version = "0.5", features = ["html_reports"] } tokio-test = "0.4.2" [[bench]] From 17fd135349967597fc35e066d0d32078259fd0d4 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 18:37:29 +0000 Subject: [PATCH 66/79] docs: improve docs on ServerBuilder::{bind, workers} --- actix-server/src/builder.rs | 78 +++++++++++++++++++++++++++++-------- justfile | 9 +++++ 2 files changed, 70 insertions(+), 17 deletions(-) diff --git a/actix-server/src/builder.rs b/actix-server/src/builder.rs index 42addafc..33da31c5 100644 --- a/actix-server/src/builder.rs +++ b/actix-server/src/builder.rs @@ -2,7 +2,6 @@ use std::{io, num::NonZeroUsize, time::Duration}; use actix_rt::net::TcpStream; use tokio::sync::mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender}; -use tracing::{info, trace}; use crate::{ server::ServerCommand, @@ -69,19 +68,18 @@ impl ServerBuilder { } } - /// Set number of workers to start. + /// Sets number of workers to start. /// /// `num` must be greater than 0. /// - /// The default worker count is the number of physical CPU cores available. If your benchmark - /// testing indicates that simultaneous multi-threading is beneficial to your app, you can use - /// the [`num_cpus`] crate to acquire the _logical_ core count instead. + /// Note that the factory + /// + /// The default worker count is the determined by [`std::thread::available_parallelism()`]. See + /// its documentation to determine what behavior you should expect when server is run. /// /// # Panics /// /// Panics if `num` is 0. - /// - /// [`num_cpus`]: https://docs.rs/num_cpus pub fn workers(mut self, num: usize) -> Self { assert_ne!(num, 0, "workers must be greater than 0"); self.threads = num; @@ -155,13 +153,15 @@ impl ServerBuilder { self.max_concurrent_connections(num) } - /// Stop Actix `System` after server shutdown. + /// Sets flag to stop Actix `System` after server shutdown. + /// + /// This has no effect when server is running in a Tokio-only runtime. pub fn system_exit(mut self) -> Self { self.exit = true; self } - /// Disable OS signal handling. + /// Disables OS signal handling. pub fn disable_signals(mut self) -> Self { self.listen_os_signals = false; self @@ -179,25 +179,49 @@ impl ServerBuilder { self } - /// Add new service to the server. - pub fn bind(mut self, name: N, addr: U, factory: F) -> io::Result + /// Adds new service to the server. + /// + /// Note that, if a DNS lookup is required, resolving hostnames is a blocking operation. + /// + /// # Worker Count + /// + /// The `factory` will be instantiated multiple times in most scenarios. The number of + /// instantiations is number of [`workers`](Self::workers()) × number of sockets resolved by + /// `addrs`. + /// + /// For example, if you've manually set [`workers`](Self::workers()) to 2, and use `127.0.0.1` + /// as the bind `addrs`, then `factory` will be instantiated twice. However, using `localhost` + /// as the bind `addrs` can often resolve to both `127.0.0.1` (IPv4) _and_ `::1` (IPv6), causing + /// the `factory` to be instantiated 4 times (2 workers × 2 bind addresses). + /// + /// Using a bind address of `0.0.0.0`, which signals to use all interfaces, may also multiple + /// the number of instantiations in a similar way. + /// + /// # Errors + /// + /// Returns an `io::Error` if: + /// - `addrs` cannot be resolved into one or more socket addresses; + /// - all the resolved socket addresses are already bound. + pub fn bind(mut self, name: N, addrs: U, factory: F) -> io::Result where F: ServerServiceFactory, U: ToSocketAddrs, N: AsRef, { - let sockets = bind_addr(addr, self.backlog, &self.mptcp)?; + let sockets = bind_addr(addrs, self.backlog, &self.mptcp)?; - trace!("binding server to: {:?}", &sockets); + tracing::trace!("binding server to: {sockets:?}"); for lst in sockets { let token = self.next_token(); + self.factories.push(StreamNewService::create( name.as_ref().to_string(), token, factory.clone(), lst.local_addr()?, )); + self.sockets .push((token, name.as_ref().to_string(), MioListener::Tcp(lst))); } @@ -205,7 +229,12 @@ impl ServerBuilder { Ok(self) } - /// Add new service to the server. + /// Adds service to the server using a socket listener already bound. + /// + /// # Worker Count + /// + /// The `factory` will be instantiated multiple times in most scenarios. The number of + /// instantiations is: number of [`workers`](Self::workers()). pub fn listen>( mut self, name: N, @@ -237,7 +266,7 @@ impl ServerBuilder { if self.sockets.is_empty() { panic!("Server should have at least one bound socket"); } else { - info!("starting {} workers", self.threads); + tracing::info!("starting {} workers", self.threads); Server::new(self) } } @@ -251,7 +280,12 @@ impl ServerBuilder { #[cfg(unix)] impl ServerBuilder { - /// Add new unix domain service to the server. + /// Adds new service to the server using a UDS (unix domain socket) address. + /// + /// # Worker Count + /// + /// The `factory` will be instantiated multiple times in most scenarios. The number of + /// instantiations is: number of [`workers`](Self::workers()). pub fn bind_uds(self, name: N, addr: U, factory: F) -> io::Result where F: ServerServiceFactory, @@ -271,9 +305,14 @@ impl ServerBuilder { self.listen_uds(name, lst, factory) } - /// Add new unix domain service to the server. + /// Adds new service to the server using a UDS (unix domain socket) listener already bound. /// /// Useful when running as a systemd service and a socket FD is acquired externally. + /// + /// # Worker Count + /// + /// The `factory` will be instantiated multiple times in most scenarios. The number of + /// instantiations is: number of [`workers`](Self::workers()). pub fn listen_uds>( mut self, name: N, @@ -284,17 +323,22 @@ impl ServerBuilder { F: ServerServiceFactory, { use std::net::{IpAddr, Ipv4Addr}; + lst.set_nonblocking(true)?; + let token = self.next_token(); let addr = crate::socket::StdSocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080); + self.factories.push(StreamNewService::create( name.as_ref().to_string(), token, factory, addr, )); + self.sockets .push((token, name.as_ref().to_string(), MioListener::from(lst))); + Ok(self) } } diff --git a/justfile b/justfile index 05c641c2..f2e449d8 100644 --- a/justfile +++ b/justfile @@ -1,2 +1,11 @@ _list: @just --list + +# Document crates in workspace. +doc: + RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl + +# Document crates in workspace and watch for changes. +doc-watch: + RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl --open + cargo watch -- RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl From 09548c96b045227290d3494ca3fe3863912adfad Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 18:45:12 +0000 Subject: [PATCH 67/79] doc: fix doc references --- actix-rt/src/system.rs | 33 ++++++++++++++++----------------- actix-server/src/builder.rs | 4 +++- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/actix-rt/src/system.rs b/actix-rt/src/system.rs index 8ff02c83..4c276beb 100644 --- a/actix-rt/src/system.rs +++ b/actix-rt/src/system.rs @@ -203,16 +203,20 @@ impl SystemRunner { .map_err(|err| io::Error::new(io::ErrorKind::Other, err)) } - /// Retrieves a reference to the underlying Actix runtime associated with this SystemRunner instance. + /// Retrieves a reference to the underlying [Actix runtime](crate::Runtime) associated with this + /// `SystemRunner` instance. /// - /// The Actix runtime is responsible for managing the event loop for an Actix system and executing asynchronous tasks. - /// This method provides access to the runtime, allowing direct interaction with its features. + /// The Actix runtime is responsible for managing the event loop for an Actix system and + /// executing asynchronous tasks. This method provides access to the runtime, allowing direct + /// interaction with its features. /// /// In a typical use case, you might need to share the same runtime between different - /// parts of your project. For example, some components might require a [`actix_rt::Runtime`] to spawn tasks on - /// the same runtime. + /// parts of your project. For example, some components might require a [`Runtime`] to spawn + /// tasks on the same runtime. /// - /// # Example + /// Read more in the documentation for [`Runtime`]. + /// + /// # Examples /// /// ``` /// let system_runner = actix_rt::System::new(); @@ -221,19 +225,14 @@ impl SystemRunner { /// // Use the runtime to spawn an async task or perform other operations /// ``` /// - /// Read more in the documentation for [`actix_rt::Runtime`] - /// - /// # Returns - /// - /// An immutable reference to the [`actix_rt::Runtime`] instance associated with this - /// [`actix_rt::SystemRunner`] instance. - /// /// # Note /// - /// While this method provides an immutable reference to the Actix runtime, which is safe to share across threads, - /// be aware that spawning blocking tasks on the Actix runtime could potentially impact system performance. - /// This is because the Actix runtime is responsible for driving the system, - /// and blocking tasks could delay other tasks in the run loop. + /// While this method provides an immutable reference to the Actix runtime, which is safe to + /// share across threads, be aware that spawning blocking tasks on the Actix runtime could + /// potentially impact system performance. This is because the Actix runtime is responsible for + /// driving the system, and blocking tasks could delay other tasks in the run loop. + /// + /// [`Runtime`]: crate::Runtime pub fn runtime(&self) -> &crate::runtime::Runtime { &self.rt } diff --git a/actix-server/src/builder.rs b/actix-server/src/builder.rs index 33da31c5..dcb05d44 100644 --- a/actix-server/src/builder.rs +++ b/actix-server/src/builder.rs @@ -13,7 +13,9 @@ use crate::{ /// Multipath TCP (MPTCP) preference. /// -/// Also see [`ServerBuilder::mptcp()`]. +/// Currently only useful on Linux. +/// +#[cfg_attr(target_os = "linux", doc = "Also see [`ServerBuilder::mptcp()`].")] #[derive(Debug, Clone)] pub enum MpTcp { /// MPTCP will not be used when binding sockets. From 3cd5d8b07af7341a466e10527bdabff1b300001e Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 18:47:38 +0000 Subject: [PATCH 68/79] doc: complete ServerBuilder::workers docs --- actix-server/src/builder.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/actix-server/src/builder.rs b/actix-server/src/builder.rs index dcb05d44..bd5418c1 100644 --- a/actix-server/src/builder.rs +++ b/actix-server/src/builder.rs @@ -72,13 +72,14 @@ impl ServerBuilder { /// Sets number of workers to start. /// - /// `num` must be greater than 0. - /// - /// Note that the factory + /// See [`bind()`](Self::bind()) for more details on how worker count affects the number of + /// server factory instantiations. /// /// The default worker count is the determined by [`std::thread::available_parallelism()`]. See /// its documentation to determine what behavior you should expect when server is run. /// + /// `num` must be greater than 0. + /// /// # Panics /// /// Panics if `num` is 0. From 7d138f0c317ac652de0f1ec819909a4647982c0f Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 21:15:40 +0000 Subject: [PATCH 69/79] build: fix min version compat (#498) --- actix-macros/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/actix-macros/Cargo.toml b/actix-macros/Cargo.toml index 39f021e7..b96daeb9 100644 --- a/actix-macros/Cargo.toml +++ b/actix-macros/Cargo.toml @@ -26,6 +26,7 @@ quote = "1" syn = { version = "2", features = ["full"] } # minimal versions compat +[target.'cfg(any())'.dependencies] proc-macro2 = "1.0.60" [dev-dependencies] From 665dec456f14d9aff5014a88593fd6af782fdd28 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 23:14:14 +0000 Subject: [PATCH 70/79] chore(local-waker): prepare release 0.1.4 --- local-waker/CHANGES.md | 2 ++ local-waker/Cargo.toml | 6 +++--- local-waker/README.md | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 local-waker/README.md diff --git a/local-waker/CHANGES.md b/local-waker/CHANGES.md index 02112c90..c83d06d4 100644 --- a/local-waker/CHANGES.md +++ b/local-waker/CHANGES.md @@ -2,6 +2,8 @@ ## Unreleased +## 0.1.4 + - Minimum supported Rust version (MSRV) is now 1.65. ## 0.1.3 diff --git a/local-waker/Cargo.toml b/local-waker/Cargo.toml index 640c47e1..d6f25051 100644 --- a/local-waker/Cargo.toml +++ b/local-waker/Cargo.toml @@ -1,15 +1,15 @@ [package] name = "local-waker" -version = "0.1.3" +version = "0.1.4" description = "A synchronization primitive for thread-local task wakeup" authors = [ "Nikolay Kim ", "Rob Ede ", ] -repository = "https://github.com/actix/actix-net.git" +repository = "https://github.com/actix/actix-net" keywords = ["waker", "local", "futures", "no-std"] categories = ["asynchronous", "no-std"] -license = "MIT OR Apache-2.0" +license.workspace = true edition.workspace = true rust-version.workspace = true diff --git a/local-waker/README.md b/local-waker/README.md new file mode 100644 index 00000000..f82ca84b --- /dev/null +++ b/local-waker/README.md @@ -0,0 +1,16 @@ +# `local-waker` + +> A synchronization primitive for thread-local task wakeup. + + + +[![crates.io](https://img.shields.io/crates/v/local-waker?label=latest)](https://crates.io/crates/local-waker) +[![Documentation](https://docs.rs/local-waker/badge.svg?version=0.1.4)](https://docs.rs/local-waker/0.1.4) +[![Version](https://img.shields.io/badge/rustc-1.52+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.52.0.html) +![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/local-waker.svg) +
+[![Dependency Status](https://deps.rs/crate/local-waker/0.1.4/status.svg)](https://deps.rs/crate/local-waker/0.1.4) +![Download](https://img.shields.io/crates/d/local-waker.svg) +[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x) + + From 87440e5734ba148abb958b3014ab3e9446e6d8a9 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 23:15:19 +0000 Subject: [PATCH 71/79] chore(local-channel): prepare release 0.1.5 --- local-channel/CHANGES.md | 4 ++++ local-channel/Cargo.toml | 2 +- local-channel/README.md | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 local-channel/README.md diff --git a/local-channel/CHANGES.md b/local-channel/CHANGES.md index 9e7a01e4..3244f033 100644 --- a/local-channel/CHANGES.md +++ b/local-channel/CHANGES.md @@ -2,6 +2,10 @@ ## Unreleased +## 0.1.5 + +- No significant changes since `0.1.4`. + ## 0.1.4 - Minimum supported Rust version (MSRV) is now 1.65. diff --git a/local-channel/Cargo.toml b/local-channel/Cargo.toml index 45ee0179..613908e6 100644 --- a/local-channel/Cargo.toml +++ b/local-channel/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "local-channel" -version = "0.1.4" +version = "0.1.5" description = "A non-threadsafe multi-producer, single-consumer, futures-aware, FIFO queue" authors = [ "Nikolay Kim ", diff --git a/local-channel/README.md b/local-channel/README.md new file mode 100644 index 00000000..5a320383 --- /dev/null +++ b/local-channel/README.md @@ -0,0 +1,16 @@ +# `local-channel` + +> A non-threadsafe multi-producer, single-consumer, futures-aware, FIFO queue. + + + +[![crates.io](https://img.shields.io/crates/v/local-channel?label=latest)](https://crates.io/crates/local-channel) +[![Documentation](https://docs.rs/local-channel/badge.svg?version=0.1.5)](https://docs.rs/local-channel/0.1.5) +[![Version](https://img.shields.io/badge/rustc-1.52+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.52.0.html) +![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/local-channel.svg) +
+[![Dependency Status](https://deps.rs/crate/local-channel/0.1.5/status.svg)](https://deps.rs/crate/local-channel/0.1.5) +![Download](https://img.shields.io/crates/d/local-channel.svg) +[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x) + + From 392e5918208dbe3b864b919594b4e92008d0d9d0 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 23:16:53 +0000 Subject: [PATCH 72/79] chore(local-channel): prepare release 0.1.5 --- bytestring/Cargo.toml | 2 +- bytestring/README.md | 2 +- bytestring/src/lib.rs | 4 +++- local-channel/src/lib.rs | 2 ++ 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index f3efdbab..796e3cb3 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -1,11 +1,11 @@ [package] name = "bytestring" version = "1.3.0" +description = "A UTF-8 encoded read-only string using `Bytes` as storage" authors = [ "Nikolay Kim ", "Rob Ede ", ] -description = "An immutable UTF-8 encoded string using Bytes as storage" keywords = ["string", "bytes", "utf8", "web", "actix"] categories = ["no-std", "web-programming"] homepage = "https://actix.rs" diff --git a/bytestring/README.md b/bytestring/README.md index 9a53272d..dfc445d0 100644 --- a/bytestring/README.md +++ b/bytestring/README.md @@ -1,6 +1,6 @@ # `bytestring` -> A UTF-8 encoded read-only string using Bytes as storage. +> A UTF-8 encoded read-only string using `Bytes` as storage. diff --git a/bytestring/src/lib.rs b/bytestring/src/lib.rs index 9c0007a2..80ab085e 100644 --- a/bytestring/src/lib.rs +++ b/bytestring/src/lib.rs @@ -1,4 +1,6 @@ -//! A UTF-8 encoded read-only string using Bytes as storage. +//! A UTF-8 encoded read-only string using `Bytes` as storage. +//! +//! See docs for [`ByteString`]. #![no_std] #![deny(rust_2018_idioms, nonstandard_style)] diff --git a/local-channel/src/lib.rs b/local-channel/src/lib.rs index e3f493ad..f89bfdb4 100644 --- a/local-channel/src/lib.rs +++ b/local-channel/src/lib.rs @@ -1,4 +1,6 @@ //! Non-thread-safe channels. +//! +//! See docs for [`mpsc::channel()`]. #![deny(rust_2018_idioms, nonstandard_style)] #![warn(future_incompatible, missing_docs)] From 61b6e01b0224ef2eb6b96b6b8c1766bfbcac1787 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 23:17:28 +0000 Subject: [PATCH 73/79] chore(bytestring): prepare release 1.3.1 --- bytestring/CHANGES.md | 4 ++++ bytestring/Cargo.toml | 2 +- bytestring/README.md | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/bytestring/CHANGES.md b/bytestring/CHANGES.md index 270dae14..368ead4d 100644 --- a/bytestring/CHANGES.md +++ b/bytestring/CHANGES.md @@ -2,6 +2,10 @@ ## Unreleased +## 1.3.1 + +- No significant changes since `1.3.0`. + ## 1.3.0 - Implement `AsRef` for `ByteString`. diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index 796e3cb3..a328e5d7 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bytestring" -version = "1.3.0" +version = "1.3.1" description = "A UTF-8 encoded read-only string using `Bytes` as storage" authors = [ "Nikolay Kim ", diff --git a/bytestring/README.md b/bytestring/README.md index dfc445d0..2bfd3083 100644 --- a/bytestring/README.md +++ b/bytestring/README.md @@ -5,11 +5,11 @@ [![crates.io](https://img.shields.io/crates/v/bytestring?label=latest)](https://crates.io/crates/bytestring) -[![Documentation](https://docs.rs/bytestring/badge.svg?version=1.3.0)](https://docs.rs/bytestring/1.3.0) +[![Documentation](https://docs.rs/bytestring/badge.svg?version=1.3.1)](https://docs.rs/bytestring/1.3.1) [![Version](https://img.shields.io/badge/rustc-1.52+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.52.0.html) ![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/bytestring.svg)
-[![Dependency Status](https://deps.rs/crate/bytestring/1.3.0/status.svg)](https://deps.rs/crate/bytestring/1.3.0) +[![Dependency Status](https://deps.rs/crate/bytestring/1.3.1/status.svg)](https://deps.rs/crate/bytestring/1.3.1) ![Download](https://img.shields.io/crates/d/bytestring.svg) [![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x) From f967562ac4f0173057b16320badb84b61450c353 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Mon, 30 Oct 2023 00:07:28 +0000 Subject: [PATCH 74/79] chore: specify external types for each crate (#496) --- .../workflows/{clippy-fmt.yml => lint.yml} | 23 +++++++++++++++++ actix-codec/Cargo.toml | 9 +++++++ actix-rt/Cargo.toml | 5 ++++ actix-server/Cargo.toml | 5 ++++ actix-tls/Cargo.toml | 8 ++++++ actix-tracing/Cargo.toml | 8 ++++++ bytestring/Cargo.toml | 8 +++++- justfile | 25 +++++++++++++++++++ local-channel/Cargo.toml | 6 +++++ 9 files changed, 96 insertions(+), 1 deletion(-) rename .github/workflows/{clippy-fmt.yml => lint.yml} (60%) diff --git a/.github/workflows/clippy-fmt.yml b/.github/workflows/lint.yml similarity index 60% rename from .github/workflows/clippy-fmt.yml rename to .github/workflows/lint.yml index dab27736..3f75d624 100644 --- a/.github/workflows/clippy-fmt.yml +++ b/.github/workflows/lint.yml @@ -41,3 +41,26 @@ jobs: reporter: 'github-pr-check' github_token: ${{ secrets.GITHUB_TOKEN }} clippy_flags: --workspace --all-features --tests --examples --bins -- -Dclippy::todo -Aunknown_lints + + check-external-types: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Rust (nightly-2023-10-10) + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + with: + toolchain: nightly-2023-10-10 + + - name: Install just + uses: taiki-e/install-action@v2.20.2 + with: + tool: just + + - name: Install cargo-check-external-types + uses: taiki-e/cache-cargo-install-action@v1.2.2 + with: + tool: cargo-check-external-types@0.1.10 + + - name: check external types + run: just check-external-types-all diff --git a/actix-codec/Cargo.toml b/actix-codec/Cargo.toml index f2261827..91fefc7c 100644 --- a/actix-codec/Cargo.toml +++ b/actix-codec/Cargo.toml @@ -13,6 +13,15 @@ license = "MIT OR Apache-2.0" edition.workspace = true rust-version.workspace = true +[package.metadata.cargo_check_external_types] +allowed_external_types = [ + "bytes::*", + "futures_core::*", + "futures_sink::*", + "tokio::*", + "tokio_util::*", +] + [dependencies] bitflags = "2" bytes = "1" diff --git a/actix-rt/Cargo.toml b/actix-rt/Cargo.toml index dd460033..4e55eb1b 100644 --- a/actix-rt/Cargo.toml +++ b/actix-rt/Cargo.toml @@ -14,6 +14,11 @@ license = "MIT OR Apache-2.0" edition.workspace = true rust-version.workspace = true +[package.metadata.cargo_check_external_types] +allowed_external_types = [ + "tokio::*", +] + [features] default = ["macros"] macros = ["actix-macros"] diff --git a/actix-server/Cargo.toml b/actix-server/Cargo.toml index 8f0e8982..3a939218 100755 --- a/actix-server/Cargo.toml +++ b/actix-server/Cargo.toml @@ -15,6 +15,11 @@ license = "MIT OR Apache-2.0" edition.workspace = true rust-version.workspace = true +[package.metadata.cargo_check_external_types] +allowed_external_types = [ + "tokio::*", +] + [features] default = [] io-uring = ["tokio-uring", "actix-rt/io-uring"] diff --git a/actix-tls/Cargo.toml b/actix-tls/Cargo.toml index e023c984..7d0ebfa5 100755 --- a/actix-tls/Cargo.toml +++ b/actix-tls/Cargo.toml @@ -17,6 +17,14 @@ rust-version.workspace = true all-features = true rustdoc-args = ["--cfg", "docsrs"] +[package.metadata.cargo_check_external_types] +allowed_external_types = [ + "actix_service::*", + "actix_utils::*", + "futures_core::*", + "tokio::*", +] + [package.metadata.cargo-machete] ignored = [ "rustls_021", # specified to force version with add_trust_anchors method diff --git a/actix-tracing/Cargo.toml b/actix-tracing/Cargo.toml index 829a4b85..0c64e9ab 100644 --- a/actix-tracing/Cargo.toml +++ b/actix-tracing/Cargo.toml @@ -12,6 +12,14 @@ license = "MIT OR Apache-2.0" edition.workspace = true rust-version.workspace = true +[package.metadata.cargo_check_external_types] +allowed_external_types = [ + "actix_service::*", + "actix_utils::*", + "tracing::*", + "tracing_futures::*", +] + [dependencies] actix-service = "2" actix-utils = "3" diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index a328e5d7..dabfb74d 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -9,11 +9,17 @@ authors = [ keywords = ["string", "bytes", "utf8", "web", "actix"] categories = ["no-std", "web-programming"] homepage = "https://actix.rs" -repository = "https://github.com/actix/actix-net.git" +repository = "https://github.com/actix/actix-net" license = "MIT OR Apache-2.0" edition.workspace = true rust-version.workspace = true +[package.metadata.cargo_check_external_types] +allowed_external_types = [ + "bytes::*", + "serde::*", +] + [dependencies] bytes = { version = "1.2", default-features = false } serde = { version = "1.0", optional = true } diff --git a/justfile b/justfile index f2e449d8..1dbc0b89 100644 --- a/justfile +++ b/justfile @@ -9,3 +9,28 @@ doc: doc-watch: RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl --open cargo watch -- RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl + +# Check for unintentional external type exposure on all crates in workspace. +check-external-types-all: + #!/usr/bin/env bash + set -euo pipefail + for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml); do + echo "Checking for $f" + just check-external-types-manifest "$f" || true + echo + echo + done + +# Check for unintentional external type exposure on all crates in workspace. +check-external-types-all-table: + #!/usr/bin/env bash + set -euo pipefail + for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml); do + echo + echo "Checking for $f" + just check-external-types-manifest "$f" --output-format=markdown-table + done + +# Check for unintentional external type exposure on a crate. +check-external-types-manifest manifest_path *extra_args: + cargo +nightly check-external-types --manifest-path "{{manifest_path}}" {{extra_args}} diff --git a/local-channel/Cargo.toml b/local-channel/Cargo.toml index 613908e6..9577fc2f 100644 --- a/local-channel/Cargo.toml +++ b/local-channel/Cargo.toml @@ -12,6 +12,12 @@ license.workspace = true edition.workspace = true rust-version.workspace = true +[package.metadata.cargo_check_external_types] +allowed_external_types = [ + "futures_core::*", + "futures_sink::*", +] + [dependencies] futures-core = "0.3.17" futures-sink = "0.3.17" From e9c2a0c318e0baca2723f79ef70ad6652f68c8c6 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Mon, 30 Oct 2023 00:26:39 +0000 Subject: [PATCH 75/79] ci: fix check-external-types recipe --- justfile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/justfile b/justfile index 1dbc0b89..3895e03d 100644 --- a/justfile +++ b/justfile @@ -14,18 +14,19 @@ doc-watch: check-external-types-all: #!/usr/bin/env bash set -euo pipefail - for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml); do - echo "Checking for $f" - just check-external-types-manifest "$f" || true + exit=0 + for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml | grep -vE "\-codegen/|\-derive/|\-macros/"); do + if ! just check-external-types-manifest "$f"; then exit=1; fi echo echo done + exit $exit # Check for unintentional external type exposure on all crates in workspace. check-external-types-all-table: #!/usr/bin/env bash set -euo pipefail - for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml); do + for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml | grep -vE "\-codegen/|\-derive/|\-macros/"); do echo echo "Checking for $f" just check-external-types-manifest "$f" --output-format=markdown-table From 19d03f0454ef9d17f79c9edd98413e01677aad76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 19:03:12 +0000 Subject: [PATCH 76/79] Bump taiki-e/install-action from 2.20.2 to 2.21.3 (#500) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-post-merge.yml | 6 +++--- .github/workflows/ci.yml | 2 +- .github/workflows/coverage.yml | 2 +- .github/workflows/lint.yml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci-post-merge.yml b/.github/workflows/ci-post-merge.yml index c6b46ea1..4e17d88c 100644 --- a/.github/workflows/ci-post-merge.yml +++ b/.github/workflows/ci-post-merge.yml @@ -56,7 +56,7 @@ jobs: with: toolchain: ${{ matrix.version }} - - uses: taiki-e/install-action@v2.21.2 + - uses: taiki-e/install-action@v2.21.3 with: tool: cargo-hack @@ -116,7 +116,7 @@ jobs: toolchain: nightly - name: Install cargo-hack & cargo-minimal-versions - uses: taiki-e/install-action@v2.21.2 + uses: taiki-e/install-action@v2.21.3 with: tool: cargo-hack,cargo-minimal-versions @@ -133,7 +133,7 @@ jobs: uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 - name: Install cargo-nextest - uses: taiki-e/install-action@v2.21.2 + uses: taiki-e/install-action@v2.21.3 with: tool: cargo-nextest diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 855420e2..6a1ccaf5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: with: toolchain: ${{ matrix.version.version }} - - uses: taiki-e/install-action@v2.21.2 + - uses: taiki-e/install-action@v2.21.3 with: tool: cargo-hack diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index b07658df..73931c23 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -23,7 +23,7 @@ jobs: components: llvm-tools-preview - name: Install cargo-llvm-cov - uses: taiki-e/install-action@v2.21.2 + uses: taiki-e/install-action@v2.21.3 with: tool: cargo-llvm-cov diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 3f75d624..8492e746 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -53,7 +53,7 @@ jobs: toolchain: nightly-2023-10-10 - name: Install just - uses: taiki-e/install-action@v2.20.2 + uses: taiki-e/install-action@v2.21.3 with: tool: just From f632ef2ba8184149e9fa73cbd4b4be4a14642032 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 19:50:39 +0000 Subject: [PATCH 77/79] Bump taiki-e/cache-cargo-install-action from 1.2.2 to 1.3.0 (#499) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 8492e746..e7bfb3d5 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -58,7 +58,7 @@ jobs: tool: just - name: Install cargo-check-external-types - uses: taiki-e/cache-cargo-install-action@v1.2.2 + uses: taiki-e/cache-cargo-install-action@v1.3.0 with: tool: cargo-check-external-types@0.1.10 From df12c10a3f8b3c82a11b31278bc717d54da2bf74 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Mon, 6 Nov 2023 22:12:58 +0000 Subject: [PATCH 78/79] fix check external types --- .github/workflows/lint.yml | 2 +- justfile | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index e7bfb3d5..af2ded71 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -63,4 +63,4 @@ jobs: tool: cargo-check-external-types@0.1.10 - name: check external types - run: just check-external-types-all + run: just check-external-types-all +nightly-2023-10-10 diff --git a/justfile b/justfile index 3895e03d..72331f9e 100644 --- a/justfile +++ b/justfile @@ -11,27 +11,27 @@ doc-watch: cargo watch -- RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl # Check for unintentional external type exposure on all crates in workspace. -check-external-types-all: +check-external-types-all toolchain="+nightly": #!/usr/bin/env bash set -euo pipefail exit=0 for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml | grep -vE "\-codegen/|\-derive/|\-macros/"); do - if ! just check-external-types-manifest "$f"; then exit=1; fi + if ! just check-external-types-manifest "$f" {{toolchain}}; then exit=1; fi echo echo done exit $exit # Check for unintentional external type exposure on all crates in workspace. -check-external-types-all-table: +check-external-types-all-table toolchain="+nightly": #!/usr/bin/env bash set -euo pipefail for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml | grep -vE "\-codegen/|\-derive/|\-macros/"); do echo echo "Checking for $f" - just check-external-types-manifest "$f" --output-format=markdown-table + just check-external-types-manifest "$f" {{toolchain}} --output-format=markdown-table done # Check for unintentional external type exposure on a crate. -check-external-types-manifest manifest_path *extra_args: - cargo +nightly check-external-types --manifest-path "{{manifest_path}}" {{extra_args}} +check-external-types-manifest manifest_path toolchain="+nightly" *extra_args="": + cargo {{toolchain}} check-external-types --manifest-path "{{manifest_path}}" {{extra_args}} From 01f9910e7c7d8953f767fa14edad2f232f0c877f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 22:19:09 +0000 Subject: [PATCH 79/79] Bump taiki-e/install-action from 2.21.3 to 2.21.7 (#501) Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.21.3 to 2.21.7. - [Release notes](https://github.com/taiki-e/install-action/releases) - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/taiki-e/install-action/compare/v2.21.3...v2.21.7) --- updated-dependencies: - dependency-name: taiki-e/install-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-post-merge.yml | 6 +++--- .github/workflows/ci.yml | 2 +- .github/workflows/coverage.yml | 2 +- .github/workflows/lint.yml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci-post-merge.yml b/.github/workflows/ci-post-merge.yml index 4e17d88c..259ae003 100644 --- a/.github/workflows/ci-post-merge.yml +++ b/.github/workflows/ci-post-merge.yml @@ -56,7 +56,7 @@ jobs: with: toolchain: ${{ matrix.version }} - - uses: taiki-e/install-action@v2.21.3 + - uses: taiki-e/install-action@v2.21.7 with: tool: cargo-hack @@ -116,7 +116,7 @@ jobs: toolchain: nightly - name: Install cargo-hack & cargo-minimal-versions - uses: taiki-e/install-action@v2.21.3 + uses: taiki-e/install-action@v2.21.7 with: tool: cargo-hack,cargo-minimal-versions @@ -133,7 +133,7 @@ jobs: uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 - name: Install cargo-nextest - uses: taiki-e/install-action@v2.21.3 + uses: taiki-e/install-action@v2.21.7 with: tool: cargo-nextest diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6a1ccaf5..18724a2d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: with: toolchain: ${{ matrix.version.version }} - - uses: taiki-e/install-action@v2.21.3 + - uses: taiki-e/install-action@v2.21.7 with: tool: cargo-hack diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 73931c23..ed2ef99a 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -23,7 +23,7 @@ jobs: components: llvm-tools-preview - name: Install cargo-llvm-cov - uses: taiki-e/install-action@v2.21.3 + uses: taiki-e/install-action@v2.21.7 with: tool: cargo-llvm-cov diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index af2ded71..32d9d4ea 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -53,7 +53,7 @@ jobs: toolchain: nightly-2023-10-10 - name: Install just - uses: taiki-e/install-action@v2.21.3 + uses: taiki-e/install-action@v2.21.7 with: tool: just