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
bashers update # deps (optional packages; fuzzy match; -v verbose, -y auto-select)
bashers update -v pkg1 pkg2 # selected packages, show tool output at end
bashers setup # install deps (--frozen, --rm, --dry-run)
bashers show # list packages
bashers git sync # default branch, pull, fetch (--current = current branch only)
bashers kube kmg <pattern> # pod describe + Image lines
bashers kube track <pattern> # follow logs (--err-only, --simple)
bashers docker build [-f <path>] # Dockerfile (default ./Dockerfile; -t tag, --no-cache, -c context)
bashers watch -n 2 -- <cmd> # run repeatedly, highlight changes (-n interval, --no-diff)
bashers self update # upgrade bashers
bashers version
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
cargo build
cargo build --release
cargo test
Run a single test: cargo test test_fuzzy_match_exact
Code quality
cargo fmt
cargo clippy -- -D warnings
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
cargo install cargo-tarpaulin --locked
cargo tarpaulin --out Xml --output-dir coverage --timeout 120
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):
python3 -m pip install --force-reinstall target/wheels/bashers-*-cp313-*.whl
-
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.
Metadata
Release files for bashers 0.8.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| bashers-0.8.8.tar.gz | 62.8 kB | Without provenance | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| bashers-0.8.8-cp313-cp313-manylinux_2_39_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.39+ x86-64 | Details |
| bashers-0.8.8-cp312-cp312-manylinux_2_39_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.39+ x86-64 | Details |
| bashers-0.8.8-cp311-cp311-manylinux_2_39_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.39+ x86-64 | Details |
| bashers-0.8.8-cp310-cp310-manylinux_2_39_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.39+ x86-64 | Details |
Total release size: 7.7 MB
Release files / bashers-0.8.8.tar.gz
| Download URL | bashers-0.8.8.tar.gz |
|---|---|
| Size | 62.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
aff2ea4b1e6774aec1495aa4056f0fe703b3935ac2603deb912b13ef8b575374
|
|
BLAKE2b-256 checksum How to use checksums |
7ce34e0abdcf1326237e45b64cec7c25ee08339bab88eb3c05f9b67690a7e657
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / bashers-0.8.8-cp313-cp313-manylinux_2_39_x86_64.whl
| Download URL | bashers-0.8.8-cp313-cp313-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.13 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
a65eef62c1d1e8664681ea44dcd7c564c308361bf752ec06349dc2636fc3d702
|
|
BLAKE2b-256 checksum How to use checksums |
e4ee2e7dc07a47fc8cdba3ed16ac11d8ab57e9089fa34b6b94cb4249e6a3b572
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / bashers-0.8.8-cp312-cp312-manylinux_2_39_x86_64.whl
| Download URL | bashers-0.8.8-cp312-cp312-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.12 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
263f3577ef77d2f6dab72cbc88fe17344059cf0fda12037692a29f452178313e
|
|
BLAKE2b-256 checksum How to use checksums |
a2ed9ddfac3731d45054c3247360330f9b40623adf06bf959c0297198896b091
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / bashers-0.8.8-cp311-cp311-manylinux_2_39_x86_64.whl
| Download URL | bashers-0.8.8-cp311-cp311-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.11 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
7486d0af01a01ac725bd63793c46128974bd63988b94d7680f487c7db4666256
|
|
BLAKE2b-256 checksum How to use checksums |
57542ae11a03fb638704720ef3167c0815b69ecac011a73306a1eb2f7621333d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / bashers-0.8.8-cp310-cp310-manylinux_2_39_x86_64.whl
| Download URL | bashers-0.8.8-cp310-cp310-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.10 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
1ba02e2005bea7d63400702a1bf8a5574c58e7545e8700463f61051e216dddd8
|
|
BLAKE2b-256 checksum How to use checksums |
b98fc6de3b274721dd2b7081d09eb0141c25d8db88faf210a1821aed390a2283
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Security for bashers 0.8.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.