# List all available just recipes
@_list:
    just --list

# Build application
[group("Cargo")]
build:
    cargo build

# Run all tests
[group("Cargo")]
test:
    cargo test --all-features

[group("Nix")]
fmt:
    nix fmt

[group("Nix")]
build-package:
    nix build

# Lint all Workflow files
[group("CI")]
ci-lint:
    nix run nixpkgs#woodpecker-cli -- lint

# Tag HEAD with the current version of a crate and push the tag
[group("CI")]
[confirm("Publish to registry? y/n")]
tag-release crate="my-rust-lib":
    #!/usr/bin/env bash
    set -euxo pipefail
    if [ "{{ crate }}" = "my-rust-lib" ]; then
        toml="Cargo.toml"
    else
        toml="crates/{{ crate }}/Cargo.toml"
    fi
    ver=$(grep '^version = ' "$toml" | head -1 | sed 's/.*"\(.*\)".*/\1/')
    git tag "{{ crate }}-v$ver" -m "Release {{ crate }} v$ver"
    git push origin "{{ crate }}-v$ver"

# Bump version, commit, and push
[group("CI")]
bump bump_part="patch":
    #!/usr/bin/env bash
    set -euxo pipefail
    toml="Cargo.toml"
    ver=$(grep '^version = ' "$toml" | head -1 | sed 's/.*"\(.*\)".*/\1/')
    IFS=. read -r major minor patch <<< "$ver"
    case "{{ bump_part }}" in
        major) major=$((major + 1)); minor=0; patch=0 ;;
        minor) minor=$((minor + 1)); patch=0 ;;
        patch) patch=$((patch + 1)) ;;
        *) echo "error: bump part must be major|minor|patch, got {{ bump_part }}" >&2; exit 1 ;;
    esac
    new_ver="${major}.${minor}.${patch}"
    sed -i 's/^version = ".*"/version = "'"$new_ver"'"/' "$toml"
    cargo generate-lockfile
    git add "$toml" Cargo.lock
    git commit -m "bump version to $new_ver"
    git push origin main

# Tag release, bump version, commit, and push all
[group("CI")]
release: tag-release bump

# Execute all Workflow steps in Podman
[group("CI")]
ci-exec:
    nix run nixpkgs#woodpecker-cli -- exec \
        --backend-engine=docker \
        --backend-docker-host="unix://${XDG_RUNTIME_DIR}/podman/podman.sock" \
        2>&1 | grep -v '"message":"could not kill container\|could not remove container"'
