set dotenv-load := true
rustc-version := "nightly"
publish-registry := "shipyard-rs-public"

# complicated/ugly one-liner to use lld linker if it's available
export RUSTFLAGS := `LLD=$(which lld) && test $? -eq "0" && echo "-C link-arg=-fuse-ld=lld" || echo ''`

# cargo wrapper; executes a cargo command using the settings in justfile (RUSTFLAGS, etc.)
cargo +args='':
    cargo +{{rustc-version}} {{args}}

# cargo check wrapper
check +args='':
    @just cargo check {{args}}

# cargo test wrapper
test +args='':
    just cargo test {{args}}

# cargo build wrapper - builds registry-backup in debug mode
debug-build +args='':
    @just cargo build --bin registry-backup {{args}}

# cargo build --release wrapper - builds registry-backup in release mode
release-build +args='':
    @just cargo build --bin registry-backup --release {{args}}

# generate updated README.md
generate-readme:
    just debug-build
    ./target/debug/registry-backup --help > doc/cli-menu.txt
    just --list > doc/just-commands.txt
    just cargo run --bin generate-readme --features docs

# check, run tests, check non-error output for clippy, run rustfmt
pre-release:
    just cargo check \
        && just cargo test \
        && just cargo clippy \
        && just cargo fmt

# verify no uncommitted changes
verify-clean-git:
    test "$(echo `git status --porcelain` | wc -c)" -eq "1"

get-crate-version:
    @cat Cargo.toml | rg '^version =' | tr -d "version = " | tr -d '"'

# re-generate README.md and overwrite existing file with output
update-readme:
    just generate-readme > README.md

# re-generate, overwrite, and stage changes
update-readme-and-stage: update-readme
    git add README.md doc/*.txt

# re-generate, overwrite, stage, and commit
update-readme-and-commit: update-readme-and-stage
    git commit -m 're-generate docs'

# get everything all ready for release
release-prep: verify-clean-git pre-release
    VERSION=$(just get-crate-version) \
        && test -z "$(git tag | rg \"v${VERSION}\")" # Error: tag appears to exist already
    just update-readme-and-commit

# release version (regenerate docs, git tag v0.0.0) 
release: release-prep
    git tag "v$(just get-crate-version)"
    git push && git push --tags
   
# diagnostic command for viewing value of build variables at runtime 
show-build-env:
    @echo "registry-backup v$(just get-crate-version)"
    @echo "rustc-version={{rustc-version}}"
    @echo "publish-registry={{publish-registry}}"
    @env | rg RUST --color never