Skip to content

Releases: Sahilll15/lazygocd

v0.10.4

Choose a tag to compare

@github-actions github-actions released this 25 Aug 16:13

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

Choose a tag to compare

@github-actions github-actions released this 25 Aug 11:19

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

Choose a tag to compare

@github-actions github-actions released this 25 Aug 09:36

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

Choose a tag to compare

@Sahilll15 Sahilll15 released this 25 Aug 07:09

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 lazygocd

Full Changelog: v0.10.0...v0.10.1

v0.10.0

Choose a tag to compare

@Sahilll15 Sahilll15 released this 25 Aug 06:38

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.

  • enter opens or closes the selected folder, or opens a file in the browser
  • l / 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 lazygocd

Full Changelog: v0.9.0...v0.10.0

v0.9.0

Choose a tag to compare

@Sahilll15 Sahilll15 released this 24 Aug 11:46

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 lazygocd

Full Changelog: v0.8.1...v0.9.0

v0.8.1

Choose a tag to compare

@Sahilll15 Sahilll15 released this 24 Aug 11:11

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 immediately
brew upgrade lazygocd

Full Changelog: v0.8.0...v0.8.1

v0.8.0

Choose a tag to compare

@Sahilll15 Sahilll15 released this 24 Aug 10:54

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, so EDITOR="code --wait" behaves as you would expect.
  • Works on the Console and Materials tabs. Falls back to less, then vi, 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 lazygocd

Full Changelog: v0.7.0...v0.8.0

v0.7.0

Choose a tag to compare

@Sahilll15 Sahilll15 released this 24 Aug 10:34

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 lazygocd

Full Changelog: v0.6.1...v0.7.0

v0.6.1

Choose a tag to compare

@Sahilll15 Sahilll15 released this 22 Aug 07:06

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 f overwrote favorites.json with demo names, a dashboard refresh overwrote the cache, and completing the A or @ forms rewrote config.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 lazygocd

Full Changelog: v0.6.0...v0.6.1