Releases: Sahilll15/lazygocd
Release list
v0.10.4
The connect form no longer asks about TLS.
What changed
The last step of the connect form used to be "Skip TLS certificate verification?" with No preselected. Safe by default, but it asked people to make a security decision at the one moment they had the least information to make it with, and the only hint under it read "only for self-signed certs". That never said what answering yes actually costs: your token or password goes out on every request over a connection nothing authenticates.
Certificates are now always verified, and the form ends at the credential.
When a certificate is rejected
Instead of echoing the HTTP client's wording, you get a line that names both fixes:
TLS certificate rejected. Add the server's CA to your trust store, or set
insecure_skip_verify = true in config.toml
The first of those is the real fix and works for every other tool on your machine at the same time. If your organisation runs TLS inspection, that root is often already installed on a managed laptop, so check there first.
That message runs 116 characters, so the message row now grows to two lines when an error is wider than the terminal. Otherwise the half naming the setting is exactly the half that gets clipped.
Also
insecure_skip_verify is config-only now, and reconnecting no longer rewrites it. A value you set by hand survives pressing A, which was not true before.
Upgrading
brew update && brew upgrade lazygocd
brew update matters. Homebrew refreshes a tap at most once a day, so without it brew upgrade can report an older version as already the latest.
v0.10.3
Security hardening. No feature or keybinding changed, so nothing you use day to day moves. Upgrading is still worth doing, particularly on a shared machine or on Windows.
What was wrong
Logs opened with e sat in a shared temp directory. They were written to /tmp/lazygocd-<pipeline> at a predictable path with default permissions. A GoCD console log routinely carries build secrets, so on a multi-user Linux box any other local user could read one. The predictable name also meant someone could pre-create a symlink there and redirect the write. Logs now go in a private per-user directory, mode 0700, with files at 0600.
The dashboard cache was world-readable. dashboard_cache.json lists every pipeline and group name on your server, and it was written at 0644. It and favorites.json are now 0600, and the config directory is created 0700.
The config file was briefly readable. It was written and then chmodded, which left the credential at default permissions for the moment in between. It is now created owner-only. A file left behind at looser permissions by an older version is tightened on the next write.
A crafted material URL could run a command on Windows. Pressing o opens a commit in your browser, and on Windows that goes through cmd /C start, which re-parses &, | and ^ that Rust's argument quoting leaves alone. The host, owner and repo came straight out of a GoCD Git material description with no validation, so anyone who could configure a pipeline's material could reach a Windows user who pressed o. Those parts are now validated, and the browser handoff rejects anything unexpected.
Names were interpolated raw into request paths. Pipeline, stage, job and branch names are now percent-encoded.
The GitHub token could go out over plain http. It is now only sent to an https API base.
Also in this release
Docs now say what skipping TLS verification actually costs: your credential goes out on every request over a connection nothing authenticates. In CI, the Snyk token reaches only the scan step rather than the steps that run crates.io build scripts, and the release workflow passes the ref name through the environment instead of interpolating it into a shell command.
Upgrading
brew update && brew upgrade lazygocd
brew update matters. Homebrew refreshes a tap at most once a day, so without it brew upgrade can report that an older version is already the latest.
v0.10.2
No behaviour change. This release exists to get earlier housekeeping into the published package.
The source, tests, and documentation no longer carry details of the private GoCD instance lazygocd was developed against. A test fixture used a real pipeline name, and several docs pages quoted that instance's exact group and pipeline counts.
The measurements those numbers supported are unchanged, and still come from a real GoCD 23.5.0 server: a 5.3 MB dashboard payload down to 165 KB gzipped, and a cold load of roughly 20 seconds down to 2 to 4 seconds.
Install
brew update && brew upgrade lazygocd
cargo install lazygocd
Apple Silicon macOS pours a prebuilt bottle, so the install takes seconds instead of compiling. Other platforms build from source.
If brew upgrade reports that an older version is already the latest, run brew update first. Homebrew only refreshes taps once every 24 hours by default.
v0.10.1
The Details pane scrolls
It rendered without a scroll offset, so on a run with several stages and jobs everything past the pane height was clipped and unreachable. Worse, the selection cursor kept moving into that clipped region, so it vanished off-screen and enter opened a console log you could not see you had selected.
The pane now follows the selected stage or job, scrolling in both directions.
brew upgrade lazygocdFull Changelog: v0.10.0...v0.10.1
v0.10.0
The Artifacts tab is a real tree
Every folder was permanently expanded. The API tree was flattened once at fetch time and the structure thrown away, so there was nothing left to collapse: a build with a deep artifact tree just filled the pane with rows you could not fold up.
Folders now start closed.
enteropens or closes the selected folder, or opens a file in the browserl/ right opens (only opens, so repeats never toggle it shut)h/ left closes, and from a child it collapses the parent and moves to it- An open folder shows
▾, a closed one▸
Two details worth knowing: a node carrying children is treated as a folder even when GoCD omits the type field, which previously left its children unreachable; and open state is keyed by full path, so one/logs and two/logs no longer open together.
brew upgrade lazygocdFull Changelog: v0.9.0...v0.10.0
v0.9.0
Set your editor in config.toml
e previously depended entirely on the shell, and plenty of machines set neither $VISUAL nor $EDITOR. On those, lazygocd fell back to the less pager, which looked broken rather than unconfigured.
# ~/.config/lazygocd/config.toml
editor = "code --wait" # or "nvim", "zed --wait", "subl --wait"Precedence is config, then $VISUAL, then $EDITOR, then less or vi. A blank config value falls through rather than shadowing the environment.
brew upgrade lazygocdFull Changelog: v0.8.1...v0.9.0
v0.8.1
Fixes e with VS Code, Zed, and other GUI editors
v0.8.0 deleted the temp log as soon as the editor command exited. That is right for vim, which blocks until you quit, and wrong for GUI editors: code and zed return as soon as the window has the file (a cold VS Code launch measured about four seconds), so the delete raced the open tab and left it pointing at a file that no longer existed.
The temp file is now left in place, and lazygocd sweeps its own stale files at startup instead.
Set your editor once:
export EDITOR=nvim # inline, takes over the terminal
export EDITOR="code --wait" # VS Code; returns to the TUI when you close the tab
export EDITOR=code # VS Code; returns to the TUI immediatelybrew upgrade lazygocdFull Changelog: v0.8.0...v0.8.1
v0.8.0
Open the log in your own editor
Press e in the job view and the current log opens in $VISUAL or $EDITOR.
Search, regex, folding, multi-cursor and copying are all things your editor already does better than any TUI reimplementation, so lazygocd hands the buffer over instead of rebuilding them.
- Inline editors (
vim,nvim,emacs -nw,less) take over the terminal. lazygocd suspends properly and restores the screen, the mouse capture and your place in the job view on exit. - GUI editors (
code,zed,subl) open beside the terminal and the TUI returns immediately. Values with flags work, soEDITOR="code --wait"behaves as you would expect. - Works on the Console and Materials tabs. Falls back to
less, thenvi, when nothing is configured.
Temp files are written to your temp directory and removed afterwards, with filenames sanitized so a pipeline name containing a path separator cannot escape it.
brew upgrade lazygocd
cargo install lazygocdFull Changelog: v0.7.0...v0.8.0
v0.7.0
The deployed-commit check now works on deploy pipelines
Previously it only ever appeared on build pipelines. The reason is in the data: a build run carries a Git material with a real commit, while a deploy run's only material is a Pipeline dependency whose revision reads upstream-name/389/stage/1. There is no commit in a deploy run's build cause at all, so there was nothing to compare.
lazygocd now walks that dependency chain when a run has no Git material of its own, up to four hops with a cycle guard, and reports the commit it finds:
GitHub: acme/ui-app@release 25d63f5 up to date
via my-app-lint-test-build #389
The via line makes clear the commit was inherited from upstream rather than read directly, so you are never misled about where it came from.
Deploy pipelines are exactly where "which commit is actually live?" matters most, so this closes the most useful gap in the feature.
brew upgrade lazygocd
cargo install lazygocdFull Changelog: v0.6.1...v0.7.0
v0.6.1
Demo mode isolation fix
v0.6.0 said --demo touched nothing. That was not true.
- It read your real favorites file, so actual pipeline names appeared in a mode meant for screenshots and screen sharing. Demo mode now seeds fictional favorites and never reads that file.
- It could write to your real config directory. Pressing
foverwrotefavorites.jsonwith demo names, a dashboard refresh overwrote the cache, and completing theAor@forms rewroteconfig.toml. All four writes are suppressed in demo mode.
A regression test asserts every demo favorite is one of the fixture pipelines, so a real name reappearing fails the build.
If you ran --demo on v0.6.0 and pressed f, check your favorites: cat ~/.config/lazygocd/favorites.json.
brew upgrade lazygocd
cargo install lazygocdFull Changelog: v0.6.0...v0.6.1