kadmin 0.7.0

Rust bindings for the Kerberos administration interface (kadm5)
Documentation
# List available commands
default:
  just --list

# Auto format code
lint-fix:
  cargo fmt
  uv run black .
  uv run ruff check --fix .
[private]
ci-lint-rustfmt:
  cargo fmt --check
[private]
ci-lint-black:
  uv run black --check .
[private]
ci-lint-ruff:
  uv run ruff check .

# Lint code
lint-rust:
  cargo clippy
  cargo clippy --features log
  uv run cargo clippy --features python
[private]
ci-lint-clippy: ci-build-deps
  RUSTFLAGS="-Dwarnings" just lint-rust

# Mypy types checking
lint-mypy: install-python
  uv run stubtest kadmin
[private]
ci-lint-mypy: ci-build-deps lint-mypy

alias l := lint
# Lint and auto format
lint: lint-fix lint-rust

alias la := lint-all
# Common lint plus mypy types checking
lint-all: lint lint-mypy

alias b := build-rust
# Build all rust crates
build-rust:
  cargo build
  cargo build --features log
  uv run cargo build --features python
  RUSTFLAGS="-Awarnings" cargo build --no-default-features --features mit_client
  RUSTFLAGS="-Awarnings" cargo build --no-default-features --features mit_server
  RUSTFLAGS="-Awarnings" cargo build --no-default-features --features heimdal_client
  RUSTFLAGS="-Awarnings" cargo build --no-default-features --features heimdal_server
  RUSTFLAGS="-Awarnings" cargo build --no-default-features --features mit_client,mit_server
  RUSTFLAGS="-Awarnings" cargo build --no-default-features --features heimdal_client,heimdal_server
  RUSTFLAGS="-Awarnings" uv run cargo build --no-default-features --features mit_client,python
  RUSTFLAGS="-Awarnings" uv run cargo build --no-default-features --features mit_server,python
  RUSTFLAGS="-Awarnings" uv run cargo build --no-default-features --features heimdal_client,python
  RUSTFLAGS="-Awarnings" uv run cargo build --no-default-features --features heimdal_server,python
  RUSTFLAGS="-Awarnings" uv run cargo build --no-default-features --features mit_client,mit_server,python
  RUSTFLAGS="-Awarnings" uv run cargo build --no-default-features --features heimdal_client,heimdal_server,python
[private]
ci-build-deps:
  sudo apt-get remove -y --purge man-db
  sudo apt-get update
  sudo apt-get install -y --no-install-recommends build-essential pkg-config krb5-multidev libkrb5-dev heimdal-multidev libclang-dev python3-dev
[private]
ci-build-rust: ci-build-deps
  RUSTFLAGS="-Dwarnings" just build-rust

# Build python wheel
build-python:
  uv run maturin build
[private]
ci-build-python: ci-build-deps build-python
[private]
ci-build-python-sdist:
  uv build --sdist

# Build rust crates and python wheel
build: build-rust build-python

alias t := test-rust-mit
# Test rust code, only MIT variants
test-rust-mit:
  RUSTFLAGS="-Awarnings" uv run cargo test --no-default-features --features mit_client,mit_server,log -- --nocapture
# Test rust code, only Heimdal variants
test-rust-heimdal:
  RUSTFLAGS="-Awarnings" uv run cargo test --no-default-features --features heimdal_client,heimdal_server,log -- --nocapture
[private]
ci-test-deps:
  sudo apt-get install -y --no-install-recommends valgrind
[private]
ci-test-deps-mit: ci-build-deps ci-test-deps
  sudo apt-get install -y --no-install-recommends krb5-kdc krb5-user krb5-admin-server
[private]
ci-test-deps-heimdal: ci-build-deps ci-test-deps
  sudo apt-get install -y --no-install-recommends heimdal-clients heimdal-kdc
[private]
ci-test-rust-mit: ci-test-deps-mit test-rust-mit
[private]
ci-test-rust-heimdal: ci-test-deps-heimdal test-rust-heimdal
  just test-rust-heimdal

alias ts := test-sanity-mit
# Test kadmin with valgrind for memory leaks, only MIT variants
test-sanity-mit:
  CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER="valgrind --error-exitcode=1 --suppressions=tests/valgrind.supp -s --leak-check=full" just test-rust-mit
# Test kadmin with valgrind for memory leaks, only Heimdal variants
test-sanity-heimdal:
  CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER="valgrind --error-exitcode=1 --suppressions=tests/valgrind.supp -s --leak-check=full" just test-rust-heimdal
[private]
ci-test-sanity-mit: ci-test-deps-mit
  just test-sanity-mit
[private]
ci-test-sanity-heimdal: ci-test-deps-heimdal
  just test-sanity-heimdal

_test-python:
  uv run python -m unittest --verbose python/tests/test_*.py
# Test python bindings
test-python: install-python _test-python
[private]
ci-test-deps-h5l: ci-test-deps
  sudo apt-get install -y --no-install-recommends libkrb5-3 libkadm5clnt-mit12 libkadm5srv-mit12 heimdal-dev heimdal-servers heimdal-kdc
[private]
ci-test-python-mit: ci-test-deps-mit _install-python _test-python
[private]
ci-test-python-h5l: ci-test-deps-h5l _install-python _test-python

# Test rust crates and python bindings
test-all: test-rust-mit test-sanity-mit test-python
alias ta := test-all

_install-python:
  uv pip install --force-reinstall target/wheels/python_kadmin_rs-*.whl
# Build and install wheel
install-python: clean-python build-python _install-python

docs-rust:
  cargo doc

# Generate the Python docs
docs-python:
  cd python/docs && uv run sphinx-build -M html . _build

# Cleanup rust build directory
clean-rust:
  rm -rf target

# Cleanup python wheel builds
clean-python:
  uv pip uninstall python-kadmin-rs
  rm -rf dist target/wheels wheelhouse

# Cleanup all
clean: clean-rust clean-python