agentfiles 0.0.2

Unified agent file installer for Claude Code, OpenCode, Codex, and Cursor
Documentation
# agentfiles — development task runner
# Run `just` with no arguments to see available recipes.

# ---------------------------------------------------------------------------
# Settings
# ---------------------------------------------------------------------------

set dotenv-load := false

# ---------------------------------------------------------------------------
# Default
# ---------------------------------------------------------------------------

# List available recipes
default:
    @just --list

# ---------------------------------------------------------------------------
# Development
# ---------------------------------------------------------------------------

# Type-check without codegen (fast feedback loop)
check:
    cargo check

# Format code
fmt:
    cargo fmt

# Lint with clippy (warnings are errors, matching CI)
lint:
    cargo clippy -- -D warnings

# Run all tests
test:
    cargo test

# Build debug binary
build:
    cargo build

# Run the binary (pass arguments after --)
run *args:
    cargo run -- {{ args }}

# Remove build artifacts
clean:
    cargo clean

# ---------------------------------------------------------------------------
# CI
# ---------------------------------------------------------------------------

# Run the full CI suite locally (fmt-check, lint, test, build)
ci:
    cargo fmt -- --check
    cargo clippy -- -D warnings
    cargo test
    cargo build

# ---------------------------------------------------------------------------
# Release
# ---------------------------------------------------------------------------

# Prepare a release: validate, run CI, bump version, commit, and tag
[doc("Validate, run CI, bump version, commit, and tag (usage: just release X.Y.Z)")]
release version:
    #!/usr/bin/env bash
    set -euo pipefail

    version="{{ version }}"

    # -- Validate semver format (X.Y.Z) --
    if ! echo "$version" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
        echo "error: version must be semver (X.Y.Z), got: $version" >&2
        exit 1
    fi

    # -- Guard: must be on main branch --
    branch="$(git rev-parse --abbrev-ref HEAD)"
    if [ "$branch" != "main" ]; then
        echo "error: releases must be created from main, currently on: $branch" >&2
        exit 1
    fi

    # -- Guard: working tree must be clean --
    if ! git diff --quiet || ! git diff --cached --quiet; then
        echo "error: working tree is dirty — commit or stash changes first" >&2
        exit 1
    fi

    # -- Guard: tag must not already exist --
    if git rev-parse "v${version}" >/dev/null 2>&1; then
        echo "error: tag v${version} already exists" >&2
        exit 1
    fi

    # -- Run full CI suite --
    echo "Running CI checks..."
    just ci

    # -- Bump version in Cargo.toml --
    echo "Bumping version to ${version}..."
    sed -i.bak -E "s/^version = \"[^\"]+\"/version = \"${version}\"/" Cargo.toml
    rm -f Cargo.toml.bak

    # -- Regenerate Cargo.lock --
    cargo check --quiet

    # -- Commit and tag --
    git add Cargo.toml Cargo.lock
    git commit -m "release: v${version}"
    git tag "v${version}"

    echo ""
    echo "Release v${version} prepared. To publish, run:"
    echo ""
    echo "  git push && git push --tags"