Bashers
CLI command helpers in Rust. Install as bashers or bs; both binaries go to the same place.
Installation
-
Cargo:
cargo install bashers
Putsbashersandbsin~/.cargo/bin. Ensure that directory is in PATH (and before pyenv/shims if you use pyenv). -
PyPI:
pip install bashersorpip install --upgrade bashers
Wheels for Python 3.11, 3.12, 3.13. If you're on 3.13 and see an old version, a 3.13 wheel may not exist yet—use the next release, or install from Cargo/repo. -
From repo:
./scripts/install.sh
Or:curl -sSf https://raw.githubusercontent.com/Sung96kim/bashers/main/scripts/install.sh | sh
Use--no-pathto skip profile changes.
Usage
bs works as an alias for bashers (e.g. bs sync, bs build). Run bashers <cmd> --help for options.
Commands
| Command | Description |
|---|---|
| update | Deps (cargo/uv/poetry). Optional package names (fuzzy match, multi-select). -v show tool output at end, -y auto-select. |
| setup | Install project deps. |
| show | List installed packages. |
| git | sync (default branch or --current). |
| kube | kmg, track. |
| docker | build (optional Dockerfile path, tag, no-cache, context). |
| watch | Run on an interval, diff highlight (green = changed). |
| self | update. |
| version | Print version. |
Features
- Fuzzy package matching; multi-select when multiple matches
- cargo, uv & poetry
- Color output, dry-run
Development
Build & test
Run a single test: cargo test test_fuzzy_match_exact
Code quality
Running locally
| Method | Command |
|---|---|
| Via cargo | cargo run --quiet -- <cmd> |
| Binary | ./target/debug/bashers <cmd> |
| No install (script) | ./scripts/local.sh <cmd> |
Set NO_SPINNER=1 to disable the spinner.
Scripts (no install)
./scripts/local.sh <cmd>— Runs the repo binary viacargo run --bin bashers. Example:./scripts/local.sh update../scripts/setup-local.sh— Runscargo check,cargo build,cargo test, then reminds you to use./scripts/local.sh.
Coverage
Python wheel (build & test)
-
Install maturin:
pip install maturin -
From repo root, build:
maturin build --release --features pyo3
Wheels are written totarget/wheels/. -
Install with a matching Python (e.g. 3.13):
-
Confirm:
bashers --helporbashers version
Adding a new command
- Add a module under
src/commands/(orsrc/commands/<group>/). - Add the variant in
src/cli.rsand wire it insrc/lib.rs. - Run
cargo build. - Update the Usage section and Commands table in this README.
Releasing
Automated (release-plz): On push to main, use Conventional Commits: feat: (minor), fix: (patch), feat!: or BREAKING CHANGE: (major). Push → 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. Set CARGO_REGISTRY_TOKEN for 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.