#!/usr/bin/env bash
set -euo pipefail

cargo fmt --all -- --check
cargo clippy --all-targets --all-features --locked -- -D warnings
cargo test --all-targets --all-features --locked
cargo test --doc --locked
cargo run --example basic --locked
cargo bench --no-run --locked
RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --locked
python3 scripts/verify_evidence.py

package_files=$(cargo package --list --locked)
required_files=(
    Cargo.lock
    Cargo.toml
    Cargo.toml.orig
    LICENSE-APACHE
    LICENSE-MIT
    README.md
    ALGORITHM.md
    CHANGELOG.md
    REPRODUCIBILITY.md
    benches/benchmarks.rs
    evidence/checksums.sha256
    evidence/k21/combined_metrics.json
    evidence/k21/linear_test.json
    evidence/k21/zero_policy.json
    examples/basic.rs
    scripts/count_zero_outputs.py
    scripts/release_checks.sh
    scripts/verify_evidence.py
    smhasher3_jamhash.txt
    src/lib.rs
    tests/public_api.rs
)

for required in "${required_files[@]}"; do
    if ! grep -Fqx "${required}" <<<"${package_files}"; then
        echo "required package file is missing: ${required}" >&2
        exit 1
    fi
done

if grep -Eq '^(\.github/|\.gitignore$)' <<<"${package_files}"; then
    echo "development-only files leaked into the package" >&2
    exit 1
fi

cargo package --locked
printf 'release checks passed; package contains %s files\n' "$(wc -l <<<"${package_files}")"
