From 4ab32f9c2bb6beda404864715d1fe21efcbc39cd Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Mon, 17 Jul 2023 21:53:07 +0000 Subject: [PATCH] Test MSRV builds (without dev-dependencies) in CI --- Cargo.toml | 1 + ci/ci-tests.sh | 32 ++++++++++++++++++++++++------- msrv-no-dev-deps-check/Cargo.toml | 13 +++++++++++++ msrv-no-dev-deps-check/src/lib.rs | 0 4 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 msrv-no-dev-deps-check/Cargo.toml create mode 100644 msrv-no-dev-deps-check/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index a3acccfda..8614cb48c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ exclude = [ "lightning-custom-message", "lightning-transaction-sync", "no-std-check", + "msrv-no-dev-deps-check", "bench", ] diff --git a/ci/ci-tests.sh b/ci/ci-tests.sh index e81373807..35acd6bad 100755 --- a/ci/ci-tests.sh +++ b/ci/ci-tests.sh @@ -4,18 +4,30 @@ set -eox pipefail RUSTC_MINOR_VERSION=$(rustc --version | awk '{ split($2,a,"."); print a[2] }') HOST_PLATFORM="$(rustc --version --verbose | grep "host:" | awk '{ print $2 }')" -# Tokio MSRV on versions 1.17 through 1.26 is rustc 1.49. Above 1.26 MSRV is 1.56. -[ "$RUSTC_MINOR_VERSION" -lt 49 ] && cargo update -p tokio --precise "1.14.1" --verbose -[[ "$RUSTC_MINOR_VERSION" -gt 48 && "$RUSTC_MINOR_VERSION" -lt 56 ]] && cargo update -p tokio --precise "1.25.1" --verbose +# Some crates require pinning to meet our MSRV even for our downstream users, +# which we do here. +# Further crates which appear only as dev-dependencies are pinned further down. +function PIN_RELEASE_DEPS { + # Tokio MSRV on versions 1.17 through 1.26 is rustc 1.49. Above 1.26 MSRV is 1.56. + [ "$RUSTC_MINOR_VERSION" -lt 49 ] && cargo update -p tokio --precise "1.14.1" --verbose + [[ "$RUSTC_MINOR_VERSION" -gt 48 && "$RUSTC_MINOR_VERSION" -lt 56 ]] && cargo update -p tokio --precise "1.25.1" --verbose -# Sadly the log crate is always a dependency of tokio until 1.20, and has no reasonable MSRV guarantees -[ "$RUSTC_MINOR_VERSION" -lt 49 ] && cargo update -p log --precise "0.4.18" --verbose + # Sadly the log crate is always a dependency of tokio until 1.20, and has no reasonable MSRV guarantees + [ "$RUSTC_MINOR_VERSION" -lt 49 ] && cargo update -p log --precise "0.4.18" --verbose + + # The serde_json crate switched to Rust edition 2021 starting with v1.0.101, i.e., has MSRV of 1.56 + [ "$RUSTC_MINOR_VERSION" -lt 56 ] && cargo update -p serde_json --precise "1.0.100" --verbose + + return 0 # Don't fail the script if our rustc is higher than the last check +} + +PIN_RELEASE_DEPS # pin the release dependencies in our main workspace # The addr2line v0.20 crate (a dependency of `backtrace` starting with 0.3.68) relies on 1.55+ [ "$RUSTC_MINOR_VERSION" -lt 55 ] && cargo update -p backtrace --precise "0.3.67" --verbose -# The serde_json crate switched to Rust edition 2021 starting with v1.0.101, i.e., has MSRV of 1.56 -[ "$RUSTC_MINOR_VERSION" -lt 56 ] && cargo update -p serde_json --precise "1.0.100" --verbose +# The quote crate switched to Rust edition 2021 starting with v1.0.31, i.e., has MSRV of 1.56 +[ "$RUSTC_MINOR_VERSION" -lt 56 ] && cargo update -p quote --precise "1.0.30" --verbose [ "$LDK_COVERAGE_BUILD" != "" ] && export RUSTFLAGS="-C link-dead-code" @@ -65,6 +77,12 @@ pushd no-std-check cargo check --verbose --color always --features lightning-transaction-sync popd +# Test that we can build downstream code with only the "release pins". +pushd msrv-no-dev-deps-check +PIN_RELEASE_DEPS +cargo check +popd + if [ -f "$(which arm-none-eabi-gcc)" ]; then pushd no-std-check cargo build --target=thumbv7m-none-eabi diff --git a/msrv-no-dev-deps-check/Cargo.toml b/msrv-no-dev-deps-check/Cargo.toml new file mode 100644 index 000000000..d73360749 --- /dev/null +++ b/msrv-no-dev-deps-check/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "msrv-check" +version = "0.1.0" +edition = "2018" + +[dependencies] +lightning = { path = "../lightning" } +lightning-block-sync = { path = "../lightning-block-sync", features = [ "rest-client", "rpc-client" ] } +lightning-invoice = { path = "../lightning-invoice" } +lightning-net-tokio = { path = "../lightning-net-tokio" } +lightning-persister = { path = "../lightning-persister" } +lightning-background-processor = { path = "../lightning-background-processor", features = ["futures"] } +lightning-rapid-gossip-sync = { path = "../lightning-rapid-gossip-sync" } diff --git a/msrv-no-dev-deps-check/src/lib.rs b/msrv-no-dev-deps-check/src/lib.rs new file mode 100644 index 000000000..e69de29bb -- 2.39.5