258 lines
10 KiB
Makefile
258 lines
10 KiB
Makefile
## Script for executing commands for the project.
|
|
export TARGET_DIR := join(justfile_directory(), "target")
|
|
export TDNS_BIND_PATH := join(TARGET_DIR, "bind")
|
|
export TEST_DATA := join(join(justfile_directory(), "tests"), "test-data")
|
|
|
|
NIGHTLY_DATE := "2024-05-23"
|
|
|
|
## MSRV
|
|
MSRV := env_var_or_default('MSRV', "")
|
|
|
|
## Code coverage config
|
|
COV_RUSTFLAGS := "-C instrument-coverage -C llvm-args=--instrprof-atomic-counter-update-all --cfg=coverage --cfg=trybuild_no_target"
|
|
COV_CARGO_INCREMENTAL := "0"
|
|
COV_CARGO_LLVM_COV := "1"
|
|
COV_CARGO_LLVM_COV_TARGET_DIR := join(TARGET_DIR, "llvm-cov-target")
|
|
COV_LLVM_PROFILE_FILE := join(COV_CARGO_LLVM_COV_TARGET_DIR, "hickory-dns-%p-%m_%c.profraw")
|
|
|
|
BIND_VER := "9.16.41"
|
|
|
|
# Check, build, and test all crates with default features enabled
|
|
default feature='' ignore='': (check feature ignore) (build feature ignore) (test feature ignore)
|
|
|
|
# Check, build, and test all crates with all-features enabled
|
|
all-features: (default "--all-features")
|
|
|
|
# Check, build, and test all crates with no-default-features
|
|
no-default-features: (default "--no-default-features" "--ignore=\\{hickory-compatibility\\}")
|
|
|
|
# Check, build, and test all crates with dns-over-rustls enabled
|
|
dns-over-rustls: (default "--features=dns-over-rustls" "--ignore=\\{async-std-resolver,hickory-compatibility\\}")
|
|
|
|
# Check, build, and test all crates with dns-over-https-rustls enabled
|
|
dns-over-https-rustls: (default "--features=dns-over-https-rustls" "--ignore=\\{async-std-resolver,hickory-compatibility\\}")
|
|
|
|
# Check, build, and test all crates with dns-over-quic enabled
|
|
dns-over-quic: (default "--features=dns-over-quic" "--ignore=\\{async-std-resolver,hickory-compatibility\\}")
|
|
|
|
# Check, build, and test all crates with dns-over-h3 enabled
|
|
dns-over-h3: (default "--features=dns-over-h3" "--ignore=\\{async-std-resolver,hickory-compatibility,hickory-client\\}")
|
|
|
|
# Check, build, and test all crates with dns-over-native-tls enabled
|
|
dns-over-native-tls: (default "--features=dns-over-native-tls" "--ignore=\\{async-std-resolver,hickory-compatibility,hickory-server,hickory-dns,hickory-util,hickory-integration\\}")
|
|
|
|
# Check, build, and test all crates with dns-over-openssl enabled
|
|
dns-over-openssl: (default "--features=dnssec-openssl" "--ignore=\\{async-std-resolver,hickory-compatibility\\}")
|
|
|
|
# Check, build, and test all crates with dnssec-openssl enabled
|
|
dnssec-openssl: (default "--features=dnssec-openssl" "--ignore=\\{async-std-resolver,hickory-compatibility\\}")
|
|
|
|
# Check, build, and test all crates with dnssec-ring enabled
|
|
dnssec-ring: (default "--features=dnssec-ring" "--ignore=\\{async-std-resolver,hickory-compatibility\\}")
|
|
|
|
# Run check on all projects in the workspace
|
|
check feature='' ignore='':
|
|
cargo ws exec {{ignore}} cargo {{MSRV}} check --all-targets --benches --examples --bins --tests {{feature}}
|
|
cargo {{MSRV}} check --manifest-path fuzz/Cargo.toml --all-targets --benches --examples --bins --tests
|
|
|
|
# Run build on all projects in the workspace
|
|
build feature='' ignore='':
|
|
cargo ws exec {{ignore}} cargo {{MSRV}} build --all-targets --benches --examples --bins --tests {{feature}}
|
|
|
|
# Run tests on all projects in the workspace
|
|
test feature='' ignore='':
|
|
cargo ws exec {{ignore}} cargo {{MSRV}} test --all-targets --benches --examples --bins --tests {{feature}}
|
|
|
|
doc feature='':
|
|
cargo ws exec --ignore=hickory-dns cargo {{MSRV}} test --doc {{feature}}
|
|
|
|
# This tests compatibility with BIND9, TODO: support other feature sets besides openssl for tests
|
|
compatibility: init-bind9
|
|
cargo test --manifest-path tests/compatibility-tests/Cargo.toml --all-targets --benches --examples --bins --tests --no-default-features --features=none;
|
|
cargo test --manifest-path tests/compatibility-tests/Cargo.toml --all-targets --benches --examples --bins --tests --no-default-features --features=bind;
|
|
|
|
# Build all bench marking tools, i.e. check that they work, but don't run
|
|
build-bench:
|
|
cargo ws exec cargo +nightly-{{NIGHTLY_DATE}} bench --no-run
|
|
|
|
[private]
|
|
clippy-inner feature='':
|
|
cargo ws exec cargo {{MSRV}} clippy --all-targets --benches --examples --bins --tests {{feature}} -- -D warnings
|
|
|
|
# Run clippy on all targets and all sources
|
|
clippy:
|
|
find {{justfile_directory()}} -name '*.rs' -exec touch {} \;
|
|
just clippy-inner --no-default-features
|
|
just clippy-inner
|
|
just clippy-inner --all-features
|
|
|
|
# Check the format of all the Rust code with rustfmt
|
|
fmt:
|
|
cargo ws exec cargo fmt -- --check
|
|
cargo fmt --manifest-path fuzz/Cargo.toml -- --check
|
|
|
|
# Audit all depenedencies
|
|
audit: init-audit (check '--all-features')
|
|
cargo audit --deny warnings
|
|
cargo audit --file fuzz/Cargo.lock --deny warnings
|
|
|
|
# Task to run clippy, rustfmt, and audit on all crates
|
|
cleanliness: clippy fmt audit
|
|
|
|
# Generate coverage report
|
|
coverage: init-llvm-cov
|
|
#!/usr/bin/env bash
|
|
set -euxo pipefail
|
|
|
|
export RUSTFLAGS="{{COV_RUSTFLAGS}}"
|
|
export CARGO_LLVM_COV={{COV_CARGO_LLVM_COV}}
|
|
export CARGO_LLVM_COV_TARGET_DIR={{COV_CARGO_LLVM_COV_TARGET_DIR}}
|
|
export LLVM_PROFILE_FILE={{COV_LLVM_PROFILE_FILE}}
|
|
|
|
echo $RUSTFLAGS
|
|
|
|
cargo +nightly llvm-cov clean
|
|
mkdir -p {{COV_CARGO_LLVM_COV_TARGET_DIR}}
|
|
|
|
cargo +nightly build --workspace --all-targets --all-features
|
|
cargo +nightly llvm-cov test --workspace --no-report --all-targets --benches --examples --bins --tests --all-features
|
|
cargo +nightly llvm-cov test --workspace --no-report --doc --doctests --all-features
|
|
cargo +nightly llvm-cov report --codecov --output-path {{join(COV_CARGO_LLVM_COV_TARGET_DIR, "hickory-dns-coverage.json")}}
|
|
|
|
# Open the html view of the coverage report
|
|
coverage-html: coverage
|
|
#!/usr/bin/env bash
|
|
set -euxo pipefail
|
|
|
|
export RUSTFLAGS="{{COV_RUSTFLAGS}}"
|
|
export CARGO_LLVM_COV={{COV_CARGO_LLVM_COV}}
|
|
export CARGO_LLVM_COV_TARGET_DIR={{COV_CARGO_LLVM_COV_TARGET_DIR}}
|
|
export LLVM_PROFILE_FILE={{COV_LLVM_PROFILE_FILE}}
|
|
|
|
cargo +nightly llvm-cov report --html --open --output-dir {{COV_CARGO_LLVM_COV_TARGET_DIR}}
|
|
|
|
# (Re)generates Test Certificates, if tests are failing, this needs to be run yearly
|
|
generate-test-certs: init-openssl
|
|
cd {{TEST_DATA}} && rm -f ca.key ca.pem cert.key cert-key.pkcs8 cert.csr cert.pem cert.p12
|
|
scripts/gen_certs.sh
|
|
|
|
# Publish all crates
|
|
publish:
|
|
cargo ws publish --from-git --token $CRATES_IO_TOKEN
|
|
|
|
# Removes the target directory cleaning all built artifacts
|
|
clean:
|
|
rm -rf {{TARGET_DIR}}
|
|
|
|
conformance: (conformance-framework) (conformance-unbound) (conformance-bind) (conformance-hickory) (conformance-ignored) (conformance-clippy) (conformance-fmt)
|
|
|
|
conformance-framework:
|
|
DNS_TEST_VERBOSE_DOCKER_BUILD=1 cargo t --manifest-path conformance/Cargo.toml -p dns-test
|
|
|
|
conformance-unbound filter='':
|
|
DNS_TEST_VERBOSE_DOCKER_BUILD=1 DNS_TEST_PEER=bind DNS_TEST_SUBJECT=unbound cargo t --manifest-path conformance/Cargo.toml -p conformance-tests -- --include-ignored {{filter}}
|
|
|
|
conformance-bind filter='':
|
|
DNS_TEST_VERBOSE_DOCKER_BUILD=1 DNS_TEST_PEER=unbound DNS_TEST_SUBJECT=bind cargo t --manifest-path conformance/Cargo.toml -p conformance-tests -- --include-ignored {{filter}}
|
|
|
|
conformance-hickory filter='':
|
|
DNS_TEST_VERBOSE_DOCKER_BUILD=1 DNS_TEST_PEER=unbound DNS_TEST_SUBJECT="hickory {{justfile_directory()}}" cargo t --manifest-path conformance/Cargo.toml -p conformance-tests -- {{filter}}
|
|
|
|
conformance-ignored:
|
|
#!/usr/bin/env bash
|
|
|
|
tmpfile="$(mktemp)"
|
|
DNS_TEST_VERBOSE_DOCKER_BUILD=1 DNS_TEST_PEER=unbound DNS_TEST_SUBJECT="hickory {{justfile_directory()}}" cargo test --manifest-path conformance/Cargo.toml -p conformance-tests -- --ignored | tee "$tmpfile"
|
|
grep 'test result: FAILED. 0 passed' "$tmpfile" || ( echo "expected ALL tests to fail but at least one passed; the passing tests must be un-#[ignore]-d" && exit 1 )
|
|
|
|
conformance-clippy:
|
|
cargo clippy --manifest-path conformance/Cargo.toml --workspace --all-targets -- -D warnings
|
|
|
|
conformance-fmt:
|
|
cargo fmt --manifest-path conformance/Cargo.toml --all -- --check
|
|
|
|
conformance-clean: (conformance-clean-containers) (conformance-clean-networks)
|
|
|
|
conformance-clean-containers:
|
|
docker rm -f $(docker ps | grep dns-test | cut -f 1 -d " ")
|
|
|
|
conformance-clean-networks:
|
|
docker network rm $(docker network ls | grep dns-test | cut -f 1 -d " ")
|
|
|
|
[private]
|
|
[macos]
|
|
init-openssl:
|
|
openssl version || brew install openssl@1.1
|
|
|
|
[private]
|
|
[linux]
|
|
init-openssl:
|
|
openssl version
|
|
|
|
[private]
|
|
[macos]
|
|
init-bind9-deps: init-openssl
|
|
pip install ply
|
|
brew install wget
|
|
|
|
[private]
|
|
[linux]
|
|
init-bind9-deps:
|
|
if apt-get --version ; then sudo apt-get install -y python3-ply ; fi
|
|
|
|
# Install BIND9, needed for compatability tests
|
|
[unix]
|
|
init-bind9:
|
|
#!/usr/bin/env bash
|
|
set -euxo pipefail
|
|
|
|
if {{TDNS_BIND_PATH}}/sbin/named -v ; then exit 0 ; fi
|
|
|
|
just init-bind9-deps
|
|
|
|
## This must run after OpenSSL installation
|
|
if openssl version ; then WITH_OPENSSL="--with-openssl=$(dirname $(dirname $(which openssl)))" ; fi
|
|
|
|
mkdir -p {{TARGET_DIR}}
|
|
|
|
echo "----> downloading bind"
|
|
rm -rf {{TARGET_DIR}}/bind-{{BIND_VER}}
|
|
wget -O {{TARGET_DIR}}/bind-{{BIND_VER}}.tar.xz https://downloads.isc.org/isc/bind9/{{BIND_VER}}/bind-{{BIND_VER}}.tar.xz
|
|
|
|
ls -la {{TARGET_DIR}}/bind-{{BIND_VER}}.tar.xz
|
|
tar -xJf {{TARGET_DIR}}/bind-{{BIND_VER}}.tar.xz -C {{TARGET_DIR}}
|
|
|
|
echo "----> compiling bind"
|
|
cd {{TARGET_DIR}}/bind-{{BIND_VER}}
|
|
|
|
./configure --prefix {{TDNS_BIND_PATH}} ${WITH_OPENSSL}
|
|
make install
|
|
cd -
|
|
|
|
{{TDNS_BIND_PATH}}/sbin/named -v
|
|
|
|
rm {{TARGET_DIR}}/bind-{{BIND_VER}}.tar.xz
|
|
rm -rf {{TARGET_DIR}}/bind-{{BIND_VER}}
|
|
|
|
# Check for the cargo-workspaces command, install if it does not exist
|
|
init-cargo-workspaces:
|
|
@cargo ws --version || cargo install cargo-workspaces
|
|
|
|
# Install audit tools
|
|
init-audit:
|
|
@cargo audit --version || cargo install cargo-audit
|
|
|
|
# Install the code coverage components for LLVM
|
|
init-llvm-cov:
|
|
@cargo llvm-cov --version || cargo install cargo-llvm-cov
|
|
@rustup component add llvm-tools-preview
|
|
|
|
# Initialize all tools needed for running tests, etc.
|
|
init: init-cargo-workspaces init-audit init-bind9
|
|
@echo 'all tools initialized'
|
|
|
|
# Run the server with example config, for manual testing purposes
|
|
run-example:
|
|
@cargo {{MSRV}} run --bin hickory-dns -- -d -c {{TEST_DATA}}/test_configs/example.toml -z {{TEST_DATA}}/test_configs -p 2053
|
|
|