tests/16-render.sh runs tmux, zellij, and the TUI in xterm on Xvfb, takes screenshots, and reads them back with tesseract: remote prompts in all panes, borders and titles with the hosts, [SYNC] appearing and disappearing, panes side by side, broadcast output in every pane and input in one pane only without it, windows split by panes_per_window, the status bar, and TUI marks. Screenshots stay in testenv/.artifacts. OCR reads three preprocessing variants (plain, stretched for dim gray, brightest channel for colored text) and normalizes characters that DejaVu Sans Mono makes ambiguous (1/l, C/(). The screenshots showed tmux cutting the session name in the status bar to "[netssh-pv"; netssh multi now widens status-left-length for its own session. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
10 KiB
10 KiB
Changelog
Unreleased
- Fix the
interface_nameresolver strategy: it sent filter names that NetBox ignores and therefore returned the host's first IP address instead of the named interface's. It now uses NetBox'sinterfaceandvminterfacefilters; a missing interface falls through to the next strategy. - Fix
netssh sftpandnetssh scpwith instance-qualified hosts (prod/web01:/path), which were taken for local paths. - Fix shell aliases of instance-qualified hosts ignoring anchored rewrite rules (
fsn_fsn1-pve1instead offsn_fsnpve1). - Add
netssh multito open several hosts side by side in tmux or zellij: host lists,tag:, NetBox virtualization clusters (cluster:, devices by default,--kind vm|all), and groups from the config (@name).--syncsends typing to all panes;netssh synctoggles it later. In the TUI,Spacemarks hosts andEnteropens them together. Configurable innetssh configure(multiplexer, panes per window, groups). netssh multiwidens the status bar of its own tmux session, which tmux otherwise cuts to[netssh-pv.- Cache entries remember the NetBox cluster of a host, for
cluster:completion and offline use. - Add
testenv/, a local Docker environment with two NetBox instances, SSH targets, a jump host, tmux, zellij, and bash/zsh/fish, and 178 end-to-end checks of all features, includingnetssh multiwith real tmux and zellij and screenshot checks of what a real terminal (xterm) renders (testenv/up.sh,testenv/test.sh). Not part of CI/CD.
v0.0.23
netssh configurenow covers every setting: after the instances, a menu opens with SSH defaults, SSH options (jump host, host key checking, connection target, address family, extra arguments,-ooptions), SSH rules (add, edit, remove by tag, instance, kind, name pattern), resolver & cache (including the cache file), shortcuts & command alias, and completion (max_results). SSH options can also be set per NetBox instance from the instance list.- Fix
netssh configuredropping global SSH options,ssh.rules, andcompletion.max_resultsfrom the config file when saving. - The configurator validates SSH options and rules before writing the config.
- Add
shortcuts.rewrites: regex rules that shorten hostnames, e.g.^([a-z]+)[0-9]+-→$1turnsfsn1-bx1.hoster.deintofsnbx1. Shortcuts work for connecting, shell aliases, and Tab completion (offered when the full name does not match), and can be edited innetssh configure. - Add
netssh alias --test HOSTNAMEto show the shortcut of a name and the cached hosts it matches. - Add
netssh sftpandnetssh scp: host lookup, shortcuts, instances, default user and port, SSH options and rules, jump host,--dry-run, and completion work as for ssh. IPv6 addresses are bracketed for host:path. - Add named port forwards (
ssh.forwardsglobally, per instance, and per rule),netssh tunnel HOST NAME|SPEC...(ssh -N with ExitOnForwardFailure), andnetssh --forward NAME. Forwards are editable innetssh configureand completed in the shell. - TUI:
Ctrl+Oopens SFTP,Ctrl+Tstarts a tunnel with configured or ad hoc forwards. - Add the
hostnameresolver strategy: connect by the NetBox name (plus optionalresolver.hostname_domain) instead of an IP, always or as a fallback afterprimary_ip. - Add static hosts (
hosts:) for machines that are not in NetBox, with user, port, tags, and SSH options, managed withnetssh hosts list|add|removeand innetssh configure. They are found before NetBox, work offline and without any NetBox, and support shortcuts, rules (kind: static), completion, aliases, sftp, scp, tunnels, and the TUI. - Fix options added by netssh landing after
--(netssh --no-jump -- host), where ssh read them as the destination.
v0.0.22
- Fix shell completion with multiple NetBox instances: typing a hostname without an instance prefix (
fsn1-bx1<Tab>) found nothing in bash and zsh, because onlyprod/…was offered. Hostnames that are unique across all instances are now offered without the prefix; connecting to them still checks every instance for ambiguous names. - zsh also accepts instance-qualified matches for the typed hostname, so names that exist in several instances are offered as
prod/…andstg/….
v0.0.21
- Ship a zsh completion script built for large caches: 5000 hosts complete in under 0.1 s instead of hanging for seconds with Cobra's generated script.
- Add
completion.max_resultsto limit the number of hostnames offered per completion. - Register zsh completion in the managed
.zshrcblock (fpathandcompdef), also whencompinitalready ran, e.g. with oh-my-zsh. The installer reports which completions it set up. - Add
netssh uninstall [--keep-config] [--dry-run] [--yes]to remove the binary, profile entries of all versions, completions, cache, and config (with a private backup). - Write marked
# >>> netssh >>>blocks fromnetssh hook installand the wizard, replacing unmarked entries of older versions instead of appending. - Add jump host support:
ssh.proxy_jumpglobally, per NetBox instance, and per rule, plus--jump HOSTand--no-jump. - Add
ssh.host_key_checking(strict,accept-new,off) for netssh connections only. - Add
ssh.target: name|hostnameso~/.ssh/confighost patterns apply and known_hosts entries belong to the device, andssh.address_family. - Add
ssh.optionsandssh.extra_args, andssh.rulesthat match by tag, instance, kind, or name pattern. - Add
netssh --version/netssh versionandnetssh --dry-runto print the final ssh command.
v0.0.20
- Configure multiple named NetBox instances and search them together in parallel.
- Add, edit, and remove instances in the interactive setup wizard while retaining legacy single-instance configuration support.
- Display instance-qualified hostnames and support
instance/hostnamefor SSH, completion, aliases, and notes. - Keep credentials, IP resolution, comments, cache entries, and local notes tied to the correct instance.
- Preserve partial interactive search results with an outage warning; reject incomplete full refreshes and ambiguous direct connections.
- Add
cache refresh --instance NAMEand isolate caches when configured endpoints change. - Add regression tests covering duplicate names and IDs across instances, outages, SSH routing, notes, aliases, and configuration round trips.
v0.0.19
- Update Ultraviolet to commit
a45b7c8.
v0.0.18
- Require Go 1.27.3 and migrate Bubbles, Bubble Tea, Huh, and Lip Gloss to their v2 modules under
charm.land. - Update TUI rendering and keyboard events for Bubble Tea v2 while preserving alternate-screen behavior.
- Route paste events to the focused editor, size input fields explicitly, and keep host lists within the terminal height.
- Reject ambiguous cached shortcuts and skip duplicate hostnames during cache refresh.
- Use paginated, unambiguous host lookups for SSH connections.
- Accept shortcut domains with or without a leading dot during cold lookups.
- Parse combined SSH options and preserve explicit users and ports supplied through
-o. - Merge cache changes under a file lock to preserve updates from concurrent processes.
- Honor configured resolver strategies during refresh and remove entries that no longer resolve safely.
- Check the host kind before reusing a cached IP for a TUI selection.
v0.0.17
- Update Go module dependencies to the latest versions within their existing module paths, including used transitive test dependencies.
- Remove obsolete indirect requirements and refresh module checksums with
go mod tidy.
v0.0.16
- Enable Bash, Zsh, and Fish completion for the configured command alias, such as
j. - Update or remove generated alias completion files when the command alias changes.
v0.0.15
- Use
https://git.zb-server.defor release download links and API requests instead of the runner's internal Gitea service URL.
v0.0.14
- Enable Renovate updates for indirect Go modules as well as direct dependencies and CI actions.
- Enable Go version updates and keep Go module metadata tidy after dependency updates.
- Correct direct and indirect dependency declarations in
go.mod. - Include
install.shas a downloadable release asset. - Include the installer in
checksums.txtalongside the platform binaries. - Link the installation command in release notes directly to the release's installer asset.
- Generate a change list from commits since the previous version tag for every release.
v0.0.13
- Translate the remaining German setup message and test example into English.
- Correct the connection editor comment to reference
Ctrl+E.
v0.0.12
- Support updating an existing installation by running the installer again.
- Remove the installer's Python dependency.
- Require valid SHA-256 checksums before replacing the binary.
- Check required programs before downloading and list missing dependencies.
- Check for
sudobefore downloading when the installation directory requires elevated permissions. - Consolidate legacy shell hooks and aliases in Bash, Zsh, and Fish profiles.
- Back up changed profiles and preserve symlinks and file permissions.
- Regenerate aliases and completions during installation and updates.
- Add a configurable command alias, such as
j, to the setup wizard. - Refresh or remove the generated command alias when its configuration changes.
v0.0.11
- Add multiline local server notes and optional NetBox comments in the TUI.
- Add CLI commands to show, replace, and append server notes.
- Keep local notes separate from the host cache, with private permissions and atomic writes.
- Use NetBox ETags for comment conflict protection when supported by the server.
- Correct authentication for NetBox v2 tokens.
- Fix environment variable overrides for configuration keys.
- Preserve usage history when refreshing cached hosts.
- Discard stale TUI search results and use
Ctrl+Efor connection editing. - Validate port overrides and preserve an explicit port 22.
- Resolve stale and live TUI selections through the configured resolver chain.
- Reject incomplete full cache refreshes and avoid marking filtered refreshes as full refreshes.
- Stop interpreting remote command flags as SSH options when applying defaults.