Releases: Mr-Sunglasses/bitssh
Release list
bitssh v3.7.1 Release Notes Latest
What's Changed
- fix: test action error by @Mr-Sunglasses in #50
- fix: add bumpver by @Mr-Sunglasses in #51
Full Changelog: v3.7.0...v3.7.1
bitssh v3.7.0 Release Notes Latest
What's Changed
- feat: add bitssh remove and improve dev ux and add more tests by @Mr-Sunglasses in #45
- Fix/issue templates by @Mr-Sunglasses in #47
- feat: update docs by @Mr-Sunglasses in #48
- fix: minor issues before release by @Mr-Sunglasses in #49
bitssh v3.7.0 Release Notes
New Feature: bitssh remove
A new remove subcommand to remove SSH hosts from the command line.
Interactive Mode (Multiselect)
bitssh removeLaunches a checkbox prompt to select one or more hosts (press space to toggle, enter to confirm), displays a table with each host's details (Host, HostName, User, Port), and asks for confirmation before removing.
Non-Interactive Mode (Multiple Hosts)
bitssh remove --host myserver
bitssh remove --host srv1 srv2 srv3The --host flag now accepts multiple hosts. Removes each one individually with per-host success/error messages -- ideal for scripting.
UI Improvement
- The SSH servers table (
bitsshwith no arguments) is now centered on the terminal instead of left-aligned
Test Suite
- Added 103 tests with 100% code coverage across all modules
- Coverage for
utils.py--get_config_content,write_host_to_config,remove_host_from_config,host_exists,get_host_aliases,_validate_config_file,_ensure_config_file - Coverage for
argument_parser.py--Configclass,is_add_interactive,is_add_non_interactive,hostsproperty - Coverage for
cli.py--_handle_add,_handle_remove,run - Coverage for
prompt.py--_validate_host_alias,add_host_prompt,remove_host_prompt,ask_host_prompt - Coverage for
ui.py--draw_table - Coverage for
__main__.py--main pytest-covconfigured withfail_under = 80and--cov-report=term-missinginpyproject.toml, runs automatically withpytest
Version Management
- Version is now read dynamically from
importlib.metadata.version("bitssh")instead of being hardcoded in__init__.py--pyproject.tomlis the single source of truth
Python Support
- Dropped Python 3.9, minimum is now Python 3.10
- Added Python 3.14 to supported versions
Package Manager
- Migrated from pip to uv as the package manager
Makefileupdated to useuv venv,uv pip install,uv run,uv build- All targets:
setup,dev,install,test,lint,format,build,run,check,clean
Linting & Formatting
- Added
[tool.ruff]config withline-length = 100,target-version = "py310" - Added
[tool.ruff.lint]withselect = ["E", "F", "W", "I"] - Added
[tool.black]and[tool.isort]config for consistent formatting - All source and test files pass
ruff checkwith zero errors
CI Workflows
test.yml-- Addedlintjob (ruff check) that runs before tests, usesuvfor all operations, Python 3.10-3.14 matrixpublish_pypi.yml-- Upgraded actions to v4, usesuv build+pypa/gh-action-pypi-publishwith trusted publishing, gates on test workflow passingpublish_dockerhub.yml-- Uses official Docker actions (buildx, login, metadata, build-push), tags with semver + latest, gates on test workflow passinggreetings.yml-- Addedtypes: [opened]trigger, cleaned up messagesDockerfile-- Updated to Python 3.13-slim, installs from local source, uses--no-install-recommends
pyproject.toml Improvements
- Removed duplicate PDM dev-dependencies and scripts sections
- Consolidated dev dependencies into
[project.optional-dependencies](addedruff,pre-commit) - Removed
License ::classifier (incompatible withlicensefield in modern setuptools) - Added
ChangelogURL to[project.urls] - Removed
__init__.pyfrom bumpver file patterns (version no longer hardcoded) - Added
[tool.coverage.run]and[tool.coverage.report]sections
Full Changelog: v3.6.0...v3.7.0
bitssh v3.6.0 Release Notes
bitssh v3.6.0 Release Notes
New Feature: bitssh add
A new add subcommand to add SSH hosts directly from the command line -- no need to manually edit ~/.ssh/config anymore.
Interactive Mode
bitssh addLaunches a step-by-step guided prompt asking for:
- Host -- alias for the connection (e.g.
myserver) - HostName -- IP address or domain (e.g.
192.168.1.1) - User -- login username (optional)
- Port -- defaults to 22 (optional)
- IdentityFile -- path to private key (optional)
Includes input validation, a summary preview, and a confirmation step before writing.
Non-Interactive Mode
bitssh add --host myserver --hostname 192.168.1.1
bitssh add --host myserver --hostname 192.168.1.1 --user root --port 2222
bitssh add --host myserver --hostname 192.168.1.1 --identity-file ~/.ssh/id_ed25519Add hosts directly via CLI flags -- perfect for scripting and automation. Requires at minimum --host and --hostname.
Improvements
- Duplicate host detection -- prevents accidentally overwriting existing entries in the SSH config
- Auto-creation of config -- if
~/.ssh/or~/.ssh/configdoesn't exist,bitssh addcreates them automatically with correct permissions (0700for directory,0644for file) - Better error messaging -- when no config file exists, the error now guides users to run
bitssh addto get started
v3.5.0
v3.4.0
What's Changed
- fix: "-" case in parsed Host by @Mr-Sunglasses in #36
Full Changelog: v3.3.0...v3.4.0
v3.3.0: better config parser
What's Changed
- fix: config parser fix for more edge cases and ignore comments by @Mr-Sunglasses in #35
Full Changelog: v3.2.0...v3.3.0
v3.2.0
What's Changed
- Update README.md by @Mr-Sunglasses in #32
- feat: update test running and upload demo at asciinema by @Mr-Sunglasses in #33
- fix: add .DS_Store in .gitignore by @Mr-Sunglasses in #34
Full Changelog: v3.1.0...v3.2.0
v3.1.0
What's Changed
- feat: convert to function based by @Mr-Sunglasses in #30
Full Changelog: v3.0.0...v3.1.0
v3.0.0
What's Changed
- feat: bitssh can now run with Docker by @Mr-Sunglasses in #24
- Add feature to search the host by @Mr-Sunglasses in #27
- Add support for py 3.13 by @Mr-Sunglasses in #29
Full Changelog: v2.8.0...v3.0.0
v2.8.0
What's Changed
- chore: version bump by @Mr-Sunglasses in #17
- chore: version bump by @Mr-Sunglasses in #18
- fix: Handle program kill errors correctly by @Mr-Sunglasses in #20
Full Changelog: v2.7.0...v2.8.0