bashers 0.7.0

Installable cli helpers
Documentation
# Bashers

CLI command helpers (Rust). Install: `cargo install bashers`. Both `bashers` and `bs` go to `~/.cargo/bin`; ensure it’s in PATH before pyenv/shims.

**Install from repo:** `./scripts/install.sh` (or `curl -sSf https://raw.githubusercontent.com/Sung96kim/bashers/main/scripts/install.sh | sh`). Use `--no-path` to skip profile changes.

## Usage

```bash
bashers update              # update deps (fuzzy match optional)
bashers setup               # install deps (--frozen, --rm, --dry-run)
bashers show                # list packages
bashers git sync            # checkout default, pull, fetch (--current = current branch only); bs sync works
bashers kube kmg <pattern>  # pod describe + Image lines
bashers kube track <pattern> # follow logs (--err-only, --simple)
bashers self update         # upgrade bashers
bashers version
```

| Command | Description |
|---------|-------------|
| **update** | Update deps (uv/poetry), fuzzy match |
| **setup** | Install project deps |
| **show** | List installed packages |
| **git** | `sync` (default branch or --current) |
| **kube** | `kmg`, `track` |
| **self** | `update` |
| **version** | Print version |

`bashers <cmd> --help` for options.

## Features

Fuzzy package matching, fzf when multiple matches, uv & poetry, color output, dry-run.

## Development

**Build:** `cargo build` / `cargo build --release`

**Test:** `cargo test` (unit: `cargo test --lib`; one test: `cargo test test_fuzzy_match_exact`)

**Quality:** `cargo fmt` · `cargo clippy` · `cargo fmt --check` · `cargo clippy -- -D warnings`

**Run:** `cargo run --quiet -- <cmd>` or `./target/debug/bashers <cmd>`. Optional: `NO_SPINNER=1` to disable spinner.

**Coverage:** `cargo install cargo-tarpaulin --locked` then `cargo tarpaulin --out Xml --output-dir coverage --timeout 120`

**New command:** Add module under `src/commands/` (or `src/commands/<group>/`), add variant in `src/cli.rs`, wire in `src/main.rs`, then `cargo build`.

## Releasing

Releases are automated with **release-plz** on push to main. Use [Conventional Commits](https://www.conventionalcommits.org/): `feat:` (minor), `fix:` (patch), `feat!:` or `BREAKING CHANGE:` (major). Push to main → version/changelog PR, merge → publish to crates.io and GitHub Release. The **tag and GitHub Release are created in the workflow run triggered by the merge** (not the run that opened the PR). Set `CARGO_REGISTRY_TOKEN` if publishing to crates.io. First time: run `cargo publish` once so release-plz knows the current version.

Manual: bump version in `Cargo.toml`, tag `vX.Y.Z`, push tag; workflow builds and creates the GitHub Release.