#!/usr/bin/env just --justfile
[private]
default:
@just --list
# Setup the development environment.
setup-dev:
# Sudo is required to install packages with apt
@echo Installing required packages from apt
@sudo apt-get install bear valgrind libapt-pkg-dev dpkg-dev clang-format codespell -y
@just setup-toolchain
[private]
@setup-toolchain:
#!/bin/sh
set -e
echo Setting up toolchains
rustup toolchain install nightly
rustup toolchain install stable
echo Installing nightly \`rustfmt\`
rustup toolchain install nightly --component rustfmt
echo Nightly \`rustfmt\` successfully installed!
echo Cleaning and building c++ compile commands
cargo clean
bear -- cargo build
echo Development environment installed successfully!
# Run checks
check: spellcheck clippy
@cargo +nightly fmt --check
@echo Checks were successful!
# Remove generated artifacts
clean:
@cargo clean
@echo Done!
# Build the project
build:
@cargo build
@echo Project successfully built!
# Generate docs
doc:
@cargo doc
@echo Documentation successfully generated!
# Create the debs required for tests
[private]
@create-test-debs:
#!/bin/sh
set -e
cd tests/files/cache
rm -f *.deb Packages*
for pkg in *; do
dpkg-deb --build --nocheck "${pkg}";
done
dpkg-scanpackages --multiversion . /dev/null > Packages
# Create an empty garbage package to make sure it fails
echo "\n" > pkg.deb
# Run all tests except for root
test +ARGS="":
@just create-test-debs
@cargo test --no-fail-fast -- --test-threads 1 --skip root --skip update {{ARGS}}
# Run only the root tests. Sudo password required!
@test-root +ARGS="":
#!/bin/sh
set -e
just create-test-debs
sudo -E /home/${USER}/.cargo/bin/cargo \
test \
--test root \
-- --test-threads 1 {{ARGS}}
# Run leak tests. Requires root
@leak:
#!/bin/sh
set -e
just create-test-debs
cargo test --no-run
test_binaries=$( \
find target/debug/deps -executable -type f \
-printf "%T@ %p\n" | sort -nr | awk '{print $2}' \
| grep -v ".so"
)
for test in $test_binaries; do
# Sudo is needed to memleak the root tests
sudo valgrind --leak-check=full -- "${test}" --test-threads 1
done
# Lint the codebase
clippy +ARGS="":
@cargo clippy --all-targets --all-features --workspace -- --deny warnings {{ARGS}}
@echo Lint successful!
# Format the codebase
@fmt +ARGS="":
#!/bin/sh
set -e
cargo +nightly fmt --all -- {{ARGS}}
cd apt-pkg-c
clang-format -i *
echo Codebase formatted successfully!
# Spellcheck the codebase
spellcheck +ARGS="":
@codespell --skip target --skip .git --skip .cargo --builtin clear,rare,informal,code --ignore-words-list mut,crate {{ARGS}}
@echo Spellings look good!
alias b := build
alias c := check
alias d := doc
alias l := leak
alias t := test
alias r := test-root