mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-24 23:08:36 +01:00
When a lightning node wishes to send payments to a BIP 353 human readable name (using BOLT 12), it first has to resolve that name to a DNS TXT record. bLIP 32 defines a way to do so over onion messages, and this completes our implementation thereof by adding the server side. It operates by simply accepting new messages and spawning tokio tasks to do DNS lookups using the `dnsse_prover` crate. It also contains full end-to-end tests of the BIP 353 -> BOLT 12 -> payment logic using the new server code to do the resolution. Note that because we now have a workspace crate which sets the "lightning/dnssec" feature in its `dev-dependencies`, a naive `cargo test` will test the "dnssec" feature.
173 lines
8.3 KiB
Bash
Executable file
173 lines
8.3 KiB
Bash
Executable file
#!/bin/bash
|
|
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 }')"
|
|
|
|
# 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 {
|
|
# Starting with version 1.39.0, the `tokio` crate has an MSRV of rustc 1.70.0
|
|
[ "$RUSTC_MINOR_VERSION" -lt 70 ] && cargo update -p tokio --precise "1.38.1" --verbose
|
|
|
|
# Starting with version 0.7.12, the `tokio-util` crate has an MSRV of rustc 1.70.0
|
|
[ "$RUSTC_MINOR_VERSION" -lt 70 ] && cargo update -p tokio-util --precise "0.7.11" --verbose
|
|
|
|
# url 2.5.3 switched to idna 1.0.3 and ICU4X, which requires rustc 1.67 or newer.
|
|
# Here we opt to keep using unicode-rs by pinning idna_adapter as described here: https://docs.rs/crate/idna_adapter/1.2.0
|
|
[ "$RUSTC_MINOR_VERSION" -lt 67 ] && cargo update -p idna_adapter --precise "1.1.0" --verbose
|
|
|
|
# indexmap 2.6.0 upgraded to hashbrown 0.15, which unfortunately bumped their MSRV to rustc 1.65 with the 0.15.1 release
|
|
[ "$RUSTC_MINOR_VERSION" -lt 65 ] && cargo update -p indexmap@2.6.0 --precise "2.5.0" --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
|
|
|
|
# Starting with version 1.10.0, the `regex` crate has an MSRV of rustc 1.65.0.
|
|
[ "$RUSTC_MINOR_VERSION" -lt 65 ] && cargo update -p regex --precise "1.9.6" --verbose
|
|
|
|
# The addr2line v0.21 crate (a dependency of `backtrace` starting with 0.3.69) relies on rustc 1.65
|
|
[ "$RUSTC_MINOR_VERSION" -lt 65 ] && cargo update -p backtrace --precise "0.3.68" --verbose
|
|
|
|
# Starting with version 0.5.9 (there is no .6-.8), the `home` crate has an MSRV of rustc 1.70.0.
|
|
[ "$RUSTC_MINOR_VERSION" -lt 70 ] && cargo update -p home --precise "0.5.5" --verbose
|
|
|
|
export RUST_BACKTRACE=1
|
|
|
|
echo -e "\n\nChecking the full workspace."
|
|
cargo check --verbose --color always
|
|
|
|
# When the workspace members change, make sure to update the list here as well
|
|
# as in `Cargo.toml`.
|
|
WORKSPACE_MEMBERS=(
|
|
lightning
|
|
lightning-types
|
|
lightning-block-sync
|
|
lightning-invoice
|
|
lightning-net-tokio
|
|
lightning-persister
|
|
lightning-background-processor
|
|
lightning-rapid-gossip-sync
|
|
lightning-custom-message
|
|
lightning-transaction-sync
|
|
lightning-macros
|
|
lightning-dns-resolver
|
|
possiblyrandom
|
|
)
|
|
|
|
echo -e "\n\nChecking, testing, and building docs for all workspace members individually..."
|
|
for DIR in "${WORKSPACE_MEMBERS[@]}"; do
|
|
cargo test -p "$DIR" --verbose --color always
|
|
cargo check -p "$DIR" --verbose --color always
|
|
cargo doc -p "$DIR" --document-private-items
|
|
done
|
|
|
|
echo -e "\n\nChecking and testing Block Sync Clients with features"
|
|
|
|
cargo test -p lightning-block-sync --verbose --color always --features rest-client
|
|
cargo check -p lightning-block-sync --verbose --color always --features rest-client
|
|
cargo test -p lightning-block-sync --verbose --color always --features rpc-client
|
|
cargo check -p lightning-block-sync --verbose --color always --features rpc-client
|
|
cargo test -p lightning-block-sync --verbose --color always --features rpc-client,rest-client
|
|
cargo check -p lightning-block-sync --verbose --color always --features rpc-client,rest-client
|
|
cargo test -p lightning-block-sync --verbose --color always --features rpc-client,rest-client,tokio
|
|
cargo check -p lightning-block-sync --verbose --color always --features rpc-client,rest-client,tokio
|
|
|
|
if [[ "$HOST_PLATFORM" != *windows* ]]; then
|
|
echo -e "\n\nChecking Transaction Sync Clients with features."
|
|
cargo check -p lightning-transaction-sync --verbose --color always --features esplora-blocking
|
|
cargo check -p lightning-transaction-sync --verbose --color always --features esplora-async
|
|
cargo check -p lightning-transaction-sync --verbose --color always --features esplora-async-https
|
|
cargo check -p lightning-transaction-sync --verbose --color always --features electrum
|
|
|
|
if [ -z "$CI_ENV" ] && [[ -z "$BITCOIND_EXE" || -z "$ELECTRS_EXE" ]]; then
|
|
echo -e "\n\nSkipping testing Transaction Sync Clients due to BITCOIND_EXE or ELECTRS_EXE being unset."
|
|
cargo check -p lightning-transaction-sync --tests
|
|
else
|
|
echo -e "\n\nTesting Transaction Sync Clients with features."
|
|
cargo test -p lightning-transaction-sync --verbose --color always --features esplora-blocking
|
|
cargo test -p lightning-transaction-sync --verbose --color always --features esplora-async
|
|
cargo test -p lightning-transaction-sync --verbose --color always --features esplora-async-https
|
|
cargo test -p lightning-transaction-sync --verbose --color always --features electrum
|
|
fi
|
|
fi
|
|
|
|
echo -e "\n\nTest futures builds"
|
|
cargo test -p lightning-background-processor --verbose --color always --features futures
|
|
cargo test -p lightning-background-processor --verbose --color always --features futures --no-default-features
|
|
|
|
echo -e "\n\nTest Custom Message Macros"
|
|
cargo test -p lightning-custom-message --verbose --color always
|
|
[ "$CI_MINIMIZE_DISK_USAGE" != "" ] && cargo clean
|
|
|
|
echo -e "\n\nTest backtrace-debug builds"
|
|
cargo test -p lightning --verbose --color always --features backtrace
|
|
|
|
echo -e "\n\nBuilding with all Log-Limiting features"
|
|
grep '^max_level_' lightning/Cargo.toml | awk '{ print $1 }'| while read -r FEATURE; do
|
|
RUSTFLAGS="$RUSTFLAGS -A unused_variables -A unused_macros -A unused_imports -A dead_code" cargo check -p lightning --verbose --color always --features "$FEATURE"
|
|
done
|
|
|
|
echo -e "\n\nTesting no_std builds"
|
|
for DIR in lightning-invoice lightning-rapid-gossip-sync; do
|
|
cargo test -p $DIR --verbose --color always --no-default-features
|
|
done
|
|
|
|
cargo test -p lightning --verbose --color always --no-default-features
|
|
|
|
echo -e "\n\nTesting c_bindings builds"
|
|
# Note that because `$RUSTFLAGS` is not passed through to doctest builds we cannot selectively
|
|
# disable doctests in `c_bindings` so we skip doctests entirely here.
|
|
RUSTFLAGS="$RUSTFLAGS --cfg=c_bindings" cargo test --verbose --color always --lib --bins --tests
|
|
|
|
for DIR in lightning-invoice lightning-rapid-gossip-sync; do
|
|
# check if there is a conflict between no_std and the c_bindings cfg
|
|
RUSTFLAGS="$RUSTFLAGS --cfg=c_bindings" cargo test -p $DIR --verbose --color always --no-default-features
|
|
done
|
|
|
|
# Note that because `$RUSTFLAGS` is not passed through to doctest builds we cannot selectively
|
|
# disable doctests in `c_bindings` so we skip doctests entirely here.
|
|
RUSTFLAGS="$RUSTFLAGS --cfg=c_bindings" cargo test -p lightning-background-processor --verbose --color always --features futures --no-default-features --lib --bins --tests
|
|
RUSTFLAGS="$RUSTFLAGS --cfg=c_bindings" cargo test -p lightning --verbose --color always --no-default-features --lib --bins --tests
|
|
|
|
echo -e "\n\nTesting other crate-specific builds"
|
|
# Note that outbound_commitment_test only runs in this mode because of hardcoded signature values
|
|
RUSTFLAGS="$RUSTFLAGS --cfg=ldk_test_vectors" cargo test -p lightning --verbose --color always --no-default-features --features=std
|
|
# This one only works for lightning-invoice
|
|
# check that compile with no_std and serde works in lightning-invoice
|
|
cargo test -p lightning-invoice --verbose --color always --no-default-features --features serde
|
|
|
|
echo -e "\n\nTesting no_std build on a downstream no-std crate"
|
|
# check no-std compatibility across dependencies
|
|
pushd no-std-check
|
|
cargo check --verbose --color always --features lightning-transaction-sync
|
|
[ "$CI_MINIMIZE_DISK_USAGE" != "" ] && cargo clean
|
|
popd
|
|
|
|
# Test that we can build downstream code with only the "release pins".
|
|
pushd msrv-no-dev-deps-check
|
|
PIN_RELEASE_DEPS
|
|
cargo check
|
|
[ "$CI_MINIMIZE_DISK_USAGE" != "" ] && cargo clean
|
|
popd
|
|
|
|
if [ -f "$(which arm-none-eabi-gcc)" ]; then
|
|
pushd no-std-check
|
|
cargo build --target=thumbv7m-none-eabi
|
|
[ "$CI_MINIMIZE_DISK_USAGE" != "" ] && cargo clean
|
|
popd
|
|
fi
|
|
|
|
echo -e "\n\nTest cfg-flag builds"
|
|
RUSTFLAGS="--cfg=taproot" cargo test --verbose --color always -p lightning
|
|
[ "$CI_MINIMIZE_DISK_USAGE" != "" ] && cargo clean
|
|
RUSTFLAGS="--cfg=async_signing" cargo test --verbose --color always -p lightning
|
|
[ "$CI_MINIMIZE_DISK_USAGE" != "" ] && cargo clean
|
|
RUSTFLAGS="--cfg=dual_funding" cargo test --verbose --color always -p lightning
|
|
[ "$CI_MINIMIZE_DISK_USAGE" != "" ] && cargo clean
|
|
RUSTFLAGS="--cfg=splicing" cargo test --verbose --color always -p lightning
|
|
[ "$CI_MINIMIZE_DISK_USAGE" != "" ] && cargo clean
|
|
RUSTFLAGS="--cfg=async_payments" cargo test --verbose --color always -p lightning
|