Releases: charmbracelet/wish
v1.3.0
PTYs, Subsystems, and More
This release is loaded with improvements and new features like support for exec, server banners, subsystems, and client color profiles. Read on for more!
Exec and PTYs
At last, now you can get real a PTY for reach SSH connection. This allows you to exec.Command on the remote. This also means bubbletea.Exec will now work as expected1!
// Open a file in Vim in Bubble Tea (on the server)
c := wish.Command(m.sess, "vim", "file.txt")
cmd := tea.Exec(c, func(err error) tea.Msg {
if err != nil {
log.Error("vim finished", "error", err)
}
return cmdFinishedMsg{err: err}
})Lip Gloss Renderers
You can now use MakeRenderer to create a Lip Gloss renderer for the each user's session. This will suss out the user's terminal and render colors using the best available color profile as well as detect whether the background is dark or light. You can then use that renderer to init your app's styles.
Before this update, it would use the server's environment variables to figure this out, which could cause wrong results, especially when running via Docker/Systemd.
The behavior of MiddlewareWithColorProfile has also changed: now, the provided color profile will be used as "the minimal color profile supported".
Server Banners
Time to fire up figlet: server banners are here! Enjoy! 🫶
Subsystems
You can now use the WithSubsystem option to add handlers for specific subsystems (for instance, SFTP).
Git Improvements
If you ever wanted to use Wish's private ensureRepo function, you'll be happy to know it is now public (i.e. EnsureRepo). Ensure repo creates Git repos on demand.
Go 1.19
Wish now requires Go 1.19 to run.
Docs
We added new examples in the examples directory, as well as updated many of the previously existing ones.
Check them out to learn more about Wish. 😬
Changelog
New Features
- e5d20f5: feat: WithSubsystem (#224) (@caarlos0)
- ef54347: feat: add wish.Command and wish.Cmd (#229) (@caarlos0)
- 8aefea8: feat: make EnsureRepo public (#211) (@caarlos0)
- ddb47df: feat: support server banners (#210) (@caarlos0)
- 714e30a: feat: use go 1.19 (#189) (@caarlos0)
- 7f44d6d: feat: use real pty (#197) (@caarlos0)
Bug fixes
- 82263ca: fix: do not kill server on conpty close on windows (#231) (@caarlos0)
- 83e64f6: fix: elapsed middleware package name (#206) (@dezren39)
Dependency updates
- dee9e71: feat(deps): bump github.com/charmbracelet/bubbletea (#200) (@dependabot[bot])
- 472a6ab: feat(deps): bump github.com/charmbracelet/log from 0.2.5 to 0.3.0 (#188) (@dependabot[bot])
- c0a21c1: feat(deps): bump github.com/charmbracelet/log from 0.3.0 to 0.3.1 (#193) (@dependabot[bot])
- cb19676: feat(deps): bump github.com/cloudflare/circl from 1.3.3 to 1.3.7 (#217) (@dependabot[bot])
- 1b87f7b: feat(deps): bump github.com/go-git/go-git/v5 from 5.10.0 to 5.10.1 (#195) (@dependabot[bot])
- b329826: feat(deps): bump github.com/go-git/go-git/v5 from 5.10.1 to 5.11.0 (#199) (@dependabot[bot])
- fe9563c: feat(deps): bump golang.org/x/crypto from 0.14.0 to 0.15.0 (#190) (@dependabot[bot])
- 2a07e04: feat(deps): bump golang.org/x/crypto from 0.15.0 to 0.16.0 (#192) (@dependabot[bot])
- b3a8a2d: feat(deps): bump golang.org/x/crypto from 0.16.0 to 0.17.0 (@dependabot[bot])
- 8e099f1: feat(deps): bump golang.org/x/crypto from 0.17.0 to 0.18.0 (#222) (@dependabot[bot])
- 40dcd79: feat(deps): bump golang.org/x/sync from 0.4.0 to 0.5.0 (#186) (@dependabot[bot])
- 3e6f92a: feat(deps): bump golang.org/x/sync from 0.5.0 to 0.6.0 (#215) (@dependabot[bot])
- 57958d3: feat(deps): bump golang.org/x/time from 0.3.0 to 0.4.0 (#187) (@dependabot[bot])
- d8d92bc: feat(deps): bump golang.org/x/time from 0.4.0 to 0.5.0 (#194) (@dependabot[bot])
Documentation updates
- 54e6a3d: docs: add an example of reverse proxy (#214) (@caarlos0)
- f3d7e48: docs: add elapsed middleware to an example (#212) (@caarlos0)
- e116a63: docs: add more details to elapsed (#216) (@dezren39)
- 502154d: docs: document command better (@caarlos0)
- 0337c4b: docs: example of MakeRenderer (@caarlos0)
- 91171be: docs: example using multiple authentication methods (@caarlos0)
- 1fbb5ec: docs: fix broken examples (@caarlos0)
- d47ec1a: docs: update ratelimiter docs (@caarlos0)
- ee243c6: docs: update wish.Command docs (@caarlos0)
Other work
- 4a0119d: build(deps): bump github.com/cloudflare/circl in /examples (#218) (@dependabot[bot])
- 0345b92: build(deps): bump golang.org/x/crypto from 0.16.0 to 0.17.0 in /examples (@dependabot[bot])
- a85a96d: ci: fix golangci-lint configuration (@caarlos0)
- e5a919c: ci: update dependabot (@caarlos0)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
-
Windows support is limited, see charmbracelet/ssh#20 and #232. ↩
v1.2.0
Changelog
Bug fixes
- e6e4f48: fix(bubbletea): stop window change watching loop after tea.Program stopped (#145) (@LindsayZhou)
- a7e4853: fix(ci): remove soft-serve workflow (@aymanbagabas)
- 5551c89: fix(examples): properly shut down if failed to start (#138) (@caarlos0)
- dcc6e56: fix(tea): set the color profile once (@aymanbagabas)
- ab47213: fix: typos (#156) (@jamesreprise)
Dependency updates
- 5ad0ab2: feat(deps): bump github.com/charmbracelet/bubbletea (#135) (@dependabot[bot])
- 726eb8b: feat(deps): bump github.com/charmbracelet/bubbletea (#141) (@dependabot[bot])
- dd8de09: feat(deps): bump github.com/charmbracelet/bubbletea (#143) (@dependabot[bot])
- db69421: feat(deps): bump github.com/charmbracelet/keygen from 0.4.2 to 0.4.3 (#152) (@dependabot[bot])
- a1cd587: feat(deps): bump github.com/charmbracelet/keygen from 0.4.3 to 0.5.0 (#178) (@dependabot[bot])
- f9e6cbb: feat(deps): bump github.com/charmbracelet/lipgloss from 0.8.0 to 0.9.0 (#181) (@dependabot[bot])
- 36a45e3: feat(deps): bump github.com/charmbracelet/lipgloss from 0.9.0 to 0.9.1 (#184) (@dependabot[bot])
- 4999a21: feat(deps): bump github.com/charmbracelet/log from 0.2.1 to 0.2.2 (#139) (@dependabot[bot])
- c28386b: feat(deps): bump github.com/charmbracelet/log from 0.2.2 to 0.2.3 (@dependabot[bot])
- df65023: feat(deps): bump github.com/charmbracelet/log from 0.2.3 to 0.2.4 (#167) (@dependabot[bot])
- 2e008af: feat(deps): bump github.com/charmbracelet/log from 0.2.4 to 0.2.5 (#174) (@dependabot[bot])
- 76e05ae: feat(deps): bump github.com/cloudflare/circl from 1.1.0 to 1.3.3 (#136) (@dependabot[bot])
- 7c54a75: feat(deps): bump github.com/go-git/go-git/v5 from 5.6.1 to 5.7.0 (#140) (@dependabot[bot])
- 99c7d10: feat(deps): bump github.com/go-git/go-git/v5 from 5.8.0 to 5.8.1 (#161) (@dependabot[bot])
- ed073b6: feat(deps): bump github.com/go-git/go-git/v5 from 5.8.1 to 5.9.0 (#171) (@dependabot[bot])
- 5067156: feat(deps): bump github.com/go-git/go-git/v5 from 5.9.0 to 5.10.0 (#185) (@dependabot[bot])
- 68c3e76: feat(deps): bump github.com/google/go-cmp from 0.5.9 to 0.6.0 (#180) (@dependabot[bot])
- 78e6bbd: feat(deps): bump github.com/hashicorp/golang-lru/v2 from 2.0.2 to 2.0.3 (#144) (@dependabot[bot])
- 707e42f: feat(deps): bump github.com/hashicorp/golang-lru/v2 from 2.0.3 to 2.0.4 (@dependabot[bot])
- 95f5c7d: feat(deps): bump github.com/hashicorp/golang-lru/v2 from 2.0.4 to 2.0.5 (#165) (@dependabot[bot])
- c835269: feat(deps): bump github.com/hashicorp/golang-lru/v2 from 2.0.5 to 2.0.6 (#168) (@dependabot[bot])
- ecc6060: feat(deps): bump github.com/muesli/termenv from 0.15.1 to 0.15.2 (#151) (@dependabot[bot])
- 12a7e83: feat(deps): bump golang.org/x/crypto from 0.10.0 to 0.11.0 (#153) (@dependabot[bot])
- e6e6359: feat(deps): bump golang.org/x/crypto from 0.11.0 to 0.12.0 (#164) (@dependabot[bot])
- 83db8d5: feat(deps): bump golang.org/x/crypto from 0.12.0 to 0.13.0 (#170) (@dependabot[bot])
- fe2fc5d: feat(deps): bump golang.org/x/crypto from 0.8.0 to 0.9.0 (#134) (@dependabot[bot])
- 4b288bf: feat(deps): bump golang.org/x/crypto from 0.9.0 to 0.10.0 (#146) (@dependabot[bot])
- c11939b: feat(deps): bump golang.org/x/net from 0.15.0 to 0.17.0 (#182) (@dependabot[bot])
- 728302d: feat(deps): bump golang.org/x/sync from 0.1.0 to 0.2.0 (#133) (@dependabot[bot])
- aee8e60: feat(deps): bump golang.org/x/sync from 0.2.0 to 0.3.0 (#147) (@dependabot[bot])
- c7a753f: feat(deps): bump golang.org/x/sync from 0.3.0 to 0.4.0 (#175) (@dependabot[bot])
- 0b49def: feat(deps): bump the gomod group with 1 update (#157) (@dependabot[bot])
- 8a3f50f: feat(deps): update dependencies (#177) (@caarlos0)
Documentation updates
- 0d4efc7: docs(deps): bump the gomod group in /examples with 2 updates (#155) (@dependabot[bot])
- 2851336: docs(examples): add ssh chat example (@maaslalani)
- b22bf45: docs: update license (@caarlos0)
- e1c4450: docs: updated ssh-warm-welcome example URL (#172) (@arunsathiya)
Other work
- 4bb0060: Revert "build: group dependabot updates (#154)" (@caarlos0)
- 283520d: build(deps): bump golang.org/x/net from 0.15.0 to 0.17.0 in /examples (#183) (@dependabot[bot])
- 170a92f: build: group dependabot updates (#154) (@caarlos0)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v1.1.1
Changelog
New Features
- f45b56f: feat: bump charmbracelet/keygen (@aymanbagabas)
Bug fixes
- 59b452f: fix: cleanup test emissions (@aymanbagabas)
Dependency updates
- b02fea5: feat(deps): bump github.com/charmbracelet/log from 0.1.2 to 0.2.1 (#129) (@dependabot[bot])
- 17cde30: feat(deps): bump golang.org/x/crypto from 0.7.0 to 0.8.0 (#130) (@dependabot[bot])
- 024a7f3: feat(deps): bump keygen (#131) (@maaslalani)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v1.1.0
Changelog
New Features
- b0c730e: feat: update lipgloss (#124) (@caarlos0)
- 35c79d9: feat: use charm/logger (#116) (@caarlos0)
Bug fixes
- d7c49d2: fix(deps): update deps to fix CVE-2022-32149 (@aymanbagabas)
- 9f7e0f5: fix: properly handle server closed on examples (#122) (@caarlos0)
Dependency updates
- aa9dc6b: feat(deps): bump github.com/charmbracelet/bubbletea (#113) (@dependabot[bot])
- b85de0c: feat(deps): bump github.com/go-git/go-git/v5 from 5.5.1 to 5.5.2 (#111) (@dependabot[bot])
- ac39f69: feat(deps): bump github.com/go-git/go-git/v5 from 5.5.2 to 5.6.0 (#119) (@dependabot[bot])
- 6437ff0: feat(deps): bump github.com/go-git/go-git/v5 from 5.6.0 to 5.6.1 (@dependabot[bot])
- 4f7fada: feat(deps): bump github.com/hashicorp/golang-lru/v2 from 2.0.1 to 2.0.2 (@dependabot[bot])
- c6c1e85: feat(deps): bump github.com/matryer/is from 1.4.0 to 1.4.1 (#118) (@dependabot[bot])
- 4347d49: feat(deps): bump github.com/muesli/termenv from 0.13.0 to 0.14.0 (#112) (@dependabot[bot])
- 7820220: feat(deps): bump golang.org/x/crypto from 0.3.0 to 0.6.0 (#114) (@dependabot[bot])
- 56b404c: feat(deps): bump golang.org/x/crypto from 0.6.0 to 0.7.0 (#120) (@dependabot[bot])
- 269ee65: feat(deps): bump golang.org/x/net from 0.6.0 to 0.7.0 (#115) (@dependabot[bot])
- 6e67df0: feat(deps): bump golang.org/x/time (#117) (@dependabot[bot])
Documentation updates
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v1.0.0
Changelog
💫 Wish v1.0.0 replaces the amazing gliderlabs/ssh with charmbracelet/ssh, which is a fork of the former under our control. This should help us ship new features and improvements faster, and all changes are submitted back to GliderLabs.
This change, however, requires you to change import paths. But don't fire your seds and search/replaces yet, you can do it with gofmt:
go get github.com/charmbracelet/wish@latest
gofmt -l -w -r '"github.com/gliderlabs/ssh" -> "github.com/charmbracelet/ssh"' .
go mod tidyNew Features
Bug fixes
- 2eed2c1: fix(git): tests: quote ssh key path (@aymanbagabas)
- 9e9765d: fix: fd leaks, tests on windows (#103) (@caarlos0)
- 0e4e2e5: fix: scp bug when copying / (#104) (@caarlos0)
- a14cf6d: fix: using our ssh fork (#95) (@caarlos0)
Dependency updates
- 0185fd6: feat(deps): bump github.com/go-git/go-git/v5 from 5.4.2 to 5.5.1 (#108) (@dependabot[bot])
- 7fe3248: feat(deps): bump github.com/google/go-cmp from 0.5.5 to 0.5.9 (#106) (@dependabot[bot])
Documentation updates
Other work
- c4e5490: feat(ci): use meta workflows (@aymanbagabas)
- f7f0c95: refactor: type aliasing ssh types (#94) (@caarlos0)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.7.0
Changelog
New Features
- d2ae592: feat: always read the authorized keys file (#88) (@caarlos0)
- 1da25a2: feat: update golang-lru to v2 (#87) (@caarlos0)
Bug fixes
- 8808de5: fix(git): allow user repos (@aymanbagabas)
- 9f2a257: fix: better authorized_keys parsing (#81) (@caarlos0)
- c57f98c: fix: deprecated use of start (@caarlos0)
- 9a56088: fix: goroutine leak (#79) (@caarlos0)
Dependency updates
- cc9a621: feat(deps): bump github.com/charmbracelet/bubbletea (#85) (@dependabot[bot])
- 0466f8f: feat(deps): bump github.com/charmbracelet/bubbletea (#93) (@dependabot[bot])
- 45af061: feat(deps): bump github.com/hashicorp/golang-lru/v2 from 2.0.0 to 2.0.1 (#92) (@dependabot[bot])
Documentation updates
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.6.0
Changelog
New Features
- d110d6b: feat(ci): add dependabot (@aymanbagabas)
- ce61721: feat(logging): custom logger (@aymanbagabas)
- e22a568: feat(opts): add WithKeyboardInteractiveAuth option (@aymanbagabas)
- e634690: feat: add coment middleware (@aymanbagabas)
- b544e65: feat: add elapsed middleware (@aymanbagabas)
Bug fixes
- 154409b: fix(scp): do not proceed chain (#59) (@caarlos0)
- 3ee156c: fix: branch (@caarlos0)
- 8c99fdc: fix: branch (@caarlos0)
- 8721f94: fix: checkout (@caarlos0)
- a7109ac: fix: filename (@caarlos0)
Dependency updates
- 804a709: feat(deps): bump github.com/charmbracelet/bubbletea (@dependabot[bot])
- 50e9ea3: feat(deps): bump github.com/charmbracelet/bubbletea (@dependabot[bot])
- 40749ba: feat(deps): bump github.com/charmbracelet/lipgloss from 0.4.0 to 0.5.0 (@dependabot[bot])
- b52d548: feat(deps): bump github.com/charmbracelet/lipgloss from 0.5.0 to 0.6.0 (#70) (@dependabot[bot])
- bc39d47: feat(deps): bump github.com/gliderlabs/ssh from 0.3.4 to 0.3.5 (#69) (@dependabot[bot])
Documentation updates
- 6c27039: docs(examples): disable cobra completions over ssh (@caarlos0)
- 189fe54: docs: cobra examples (#58) (@caarlos0)
- 48fcb5b: docs: fix cobra example (@caarlos0)
- 2269aa5: docs: fix readme images (@meowgorithm)
- 61ca856: docs: new readme footer (@muesli)
Other work
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.5.0
Changelog
New Features
- 5f42312: feat: add print/fatal/error convenience methods (#48) (@aymanbagabas)
- 9d12881: feat: use a thread safe lru cache (@caarlos0)
Bug fixes
- c7c99ee: fix: EOL when force-closing the connection (#50) (@caarlos0)
- 6fca3ff: fix: use the git binary to run upload/receive commands (@aymanbagabas)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Slack.
v0.4.0
Changelog
💫 Wish v0.4.0 is a big update that has support for SSH certificates (yay!), rate limiting and better error handling.
New Features
- 2c392aa: feat(deps): update gliberlabs/ssh from v0.3.3 to v0.3.4 (@caarlos0)
- 0ff7811: feat: add wish.Fatal and wish.Error (#41) (@caarlos0)
- 0e10f47: feat: rate limit middleware (#44) (@caarlos0)
- 7aaf336: feat: ssh user certificate auth support (#36) (@caarlos0)
Bug fixes
Others
- 696d131: chore: use goreleaser workflow for releases (@aymanbagabas)
- 379581d: chore: use tagged dep (@caarlos0)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Slack.
v0.3.1
What's Changed
This release features new Wish middleware that gives you a hook to the underlying SSH session tea.Program. It will allow you to p.Send() messages directly to the running Bubble Tea programs, which should simplify some messaging use-cases.
- docs: add ssh-warm-welcome by @decentral1se in #35
- Update keygen and add server tests by @aymanbagabas in #38
- feat: add bubbletea program middleware by @aymanbagabas in #39
New Contributors
- @decentral1se made their first contribution in #35
Full Changelog: v0.3.0...v0.3.1
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or Slack.
