~/lazygocd/changelog

Changelog

Every shipped lazygocd release, rendered from the project changelog. Use this page to track what changed before upgrading with Homebrew, cargo, or a release binary.

release timeline
v0.11.0

A command line, not just a UI

  • Naming a pipeline prints its latest run and exits, without opening the UI: lazygocd web-app. You get the status, who triggered it, the commit, every stage and job, and the recent runs.
  • The name is matched in tiers, so it rarely needs typing in full: an exact name wins, then a unique substring, then fzf-style initials. A query matching several pipelines lists them and exits 1 rather than guessing which one you meant.
  • --logs prints a job's console output and -f keeps tailing it while the pipeline runs. It picks the running job, else the failed one, else the last job of the last stage. --stage, --job, --run and --interval override that.
  • --history lists recent runs on their own, and --json prints everything machine-readably. Exit status is 0 for a match and 1 for a miss, so it works as a shell condition.
  • Shell completion fills in pipeline names from the on-disk dashboard cache, so lazygocd web plus tab is instant and works offline.
  • A running job reported its result as Unknown instead of Building, because GoCD only sets a result once a job finishes and keeps the live word in state. Fixed in both the CLI and the TUI.
v0.10.8

Open the selection in GoCD

  • O opens whatever is selected in the GoCD web UI, so a run you just triggered is one keystroke from the page you would otherwise have clicked four levels deep to reach.
  • The target narrows with focus. A pipeline in the tree opens its activity page, a run in the history pane opens its value stream map, and a stage or job opens its own page, including from inside the job view. A group header opens the dashboard.
  • Triggering a pipeline now says so in the status line and names the key, which is the only place it announces itself while you are working. Lowercase o still opens the GitHub commit, so the two do not collide.
  • Pipeline, stage and job names come from the server and end up in a URL handed to the OS, so each segment is validated first and a name outside GoCD's own character set reports instead of opening anything.
v0.10.7

Filter by group name

  • ctrl+g folds pipeline group names into the filter. The tree starts collapsed because a large org has thousands of pipelines, so / is the way in, but it only ever matched pipeline names. A group whose name matched exactly was still dropped unless one of its pipelines happened to match too. A group-name hit now keeps the whole group.
  • Off by default, and identical to the old filter until you ask for it. Works whether the filter box is open or already committed, and the box title carries the state.
  • The header now keeps the active filter after the box closes, which previously left no on-screen trace of what was filtering the tree.
  • Contributed by @AdityaShah7867 in #4.
v0.10.6

The GitHub check says what went wrong

  • A token rejected with 401 or 403 is retried once against gh auth token, and the status line says when that is what worked. A stale or SSO-blocked github_token used to shadow a working GitHub CLI session forever, because the token was chosen once at startup and never reconsidered after a failure.
  • The reason is shown instead of thrown away. Every failure used to render as can't check (connect GitHub with '@'), which is wrong advice when a token is present and merely rejected. The detail pane now says needs SSO authorization, token invalid, repo or branch not found or check failed, with the full message in the message row.
  • A SAML rejection names the organisation and both fixes: authorize the token for that org under Configure SSO, or clear github_token and let the gh CLI token be used. A classic personal access token created by hand carries no SSO grant, while the gh CLI's OAuth token usually does.
v0.10.5

Jump to a pane with a number

  • 1, 2 and 3 go straight to the groups, history and details panes. tab only cycled, so reaching details from groups took two presses and there was no way to step back by one.
  • The job view already used those digits for its Console, Artifacts and Materials tabs. It is dispatched as a modal that returns before the main key handler, so the digits were free at the top level and now mean the same kind of thing in both places.
  • tab still cycles, and focus changes now rebuild the details rows whichever key caused the switch.
v0.10.4

No more TLS question

  • The connect form ends at the credential. Certificates are always verified, and there is no prompt to turn that off. The old question defaulted to the safe answer, but it asked people to decide at the one moment they had the least information, and its only hint was "only for self-signed certs", which never said what saying yes costs.
  • A rejected certificate now tells you what to do: add the server's CA to your trust store, or set insecure_skip_verify = true in config.toml. The message row grows to two lines when an error runs wider than the terminal, so the half naming the setting is no longer the half that gets cut off.
  • insecure_skip_verify is config-only now and is never rewritten by reconnecting, so a value you set by hand survives pressing A.
v0.10.3

Security hardening

No feature or keybinding changed. Upgrading is worth doing anyway, particularly on a shared machine or on Windows.

  • Logs opened with e now go in a private per-user directory (mode 0700, file mode 0600) instead of loose in a shared /tmp under a predictable name. A console log routinely holds build secrets, so on a multi-user Linux box another local user could read one, or pre-create a symlink there to redirect the write.
  • dashboard_cache.json and favorites.json are written mode 0600, and the config directory is created mode 0700. The cache lists every pipeline and group name on your server and was world-readable.
  • config.toml is created owner-only rather than written and then chmodded, which left the credential readable for the moment in between. An existing file at looser permissions is tightened on the next write.
  • Host, owner and repo parsed from a GoCD Git material are validated before they reach a URL, and the browser handoff rejects anything unexpected. Windows opens URLs through cmd /C start, which re-parses &, | and ^ that Rust's argument quoting leaves alone, so a crafted material URL could run a command when you pressed o.
  • Pipeline, stage, job and branch names are percent-encoded into request paths rather than interpolated raw.
  • The GitHub token is only sent over https, never to a plain-http API base.
v0.10.2

Housekeeping, no behaviour change

  • 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 pages quoted the exact group and pipeline counts of that instance.
  • The measurements those numbers supported are unchanged: a 5.3 MB dashboard payload down to 165 KB gzipped, and a ~20 second cold load down to 2 to 4 seconds, on GoCD 23.5.0.
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. 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 in both directions.
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 a deep artifact tree filled the pane with rows you could not fold up.
  • Folders now start closed. enter opens or closes one (on a file it opens the browser), l/right opens, h/left closes and steps out to the parent. Open shows ▾, closed ▸.
  • A node carrying children counts as a folder even when GoCD omits the type field, and open state is keyed by full path so two folders sharing a name under different parents no longer open together.
v0.9.0

Editor setting in config.toml

  • e 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.
  • Set editor = "code --wait" in config.toml instead. Precedence is config, then $VISUAL, then $EDITOR, then less or vi. A blank value falls through rather than shadowing the environment.
v0.8.1

Fixed e with GUI editors

  • VS Code and Zed return as soon as the window has the file, about four seconds for a cold VS Code launch, so deleting the temp log when the command exited pulled it out from under the open tab. The file is now left in place and stale ones are swept at startup.
  • Set EDITOR=nvim for an inline editor, EDITOR="code --wait" to return to the TUI when you close the tab, or EDITOR=code to return immediately.
v0.8.0

Open the log in your own editor

  • e opens the current log in $VISUAL or $EDITOR. Search, regex, folding and copying are all things your editor does better than a TUI reimplementation, so lazygocd hands the buffer over instead of rebuilding them.
  • Inline editors (vim, nvim, emacs, less) take over the terminal; lazygocd suspends properly and restores the screen, mouse capture and your place in the job view on exit. GUI editors (code, zed) open beside it and the TUI returns immediately.
  • Works on the Console and Materials tabs, falls back to less then vi, and sanitizes temp filenames so a pipeline name containing a path separator cannot escape the temp directory.
v0.7.0

Deployed-commit check on deploy pipelines

  • The check previously appeared only on build pipelines. A build run carries a Git material with a real commit, but a deploy run's only material is a Pipeline dependency whose revision reads upstream-name/389/stage/1, so there was no commit in its build cause 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 labels the result via <pipeline> #<counter> so an inherited commit is never mistaken for a direct one.
v0.6.1

Demo mode isolation fix

  • --demo read the real favorites file, so actual pipeline names appeared in a mode meant for screenshots and screen sharing. It now seeds fictional favorites and never reads that file.
  • --demo could also write to the real config directory: f overwrote favorites, a refresh overwrote the dashboard cache, and the A and @ 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.
v0.6.0

Demo mode

  • lazygocd --demo launches the full interface against fictional pipelines: four groups, fourteen pipelines, paginated run history, a console log with severity colouring and unicode, an artifact tree, and three personalized views. No server, no credentials, and nothing written to disk.
  • Mutating keys are no-ops in demo mode, so the confirm dialogs stay explorable without anything happening.
  • The fixtures are parsed by the same serde models the live API path uses, so a GoCD response-shape change breaks the demo's tests rather than letting the demo drift out of date.
v0.5.0

Interface pass

  • The footer shows only what the focused pane can do, six hints labelled with the pane, instead of fourteen that ran off the edge of the screen. Keys that change server state render red.
  • One header line instead of two: host name in place of the full URL, with the fleet counts promoted into it. The row below is now a dedicated message line, so an error gets full width instead of being cut off mid-sentence.
  • ? help is grouped into four task blocks across two columns, 16 lines down from 35, with a legend for the status glyphs.
  • Confirm dialogs lead with the target, pipeline name and run number, on its own line before the action.
  • Pressing v after a failed views fetch reports the failure instead of claiming the server has no views. g/G jump to the ends of the picker.
  • Error text no longer echoes raw HTML when a proxy answers instead of GoCD; 403 and timeout errors suggest a likely cause.
  • Snyk CI integration: generates a CycloneDX SBOM for Cargo dependencies and scans it with snyk sbom test when SNYK_TOKEN is configured.
v0.4.1

Verified release and fixed release runners

  • Release verification against a live GoCD 23.5.0 server passed: creating a temporary personalized view, loading it through server-side viewName filtering, and removing it again all worked.
  • Release workflow fixed for current GitHub-hosted macOS Intel runners: macos-15-intel replaced the retired macos-13 image.
  • Rust sources formatted with cargo fmt; unused personalized-view helper removed.
v0.4.0

Personalized dashboard views

  • v opens a picker of your GoCD web dashboard views, filtered server-side with viewName and shown in the header when active.
  • V saves the current / filter matches as a new whitelist view on the GoCD server, visible in the web UI too.
  • View writes use If-Match so concurrent web UI edits fail loudly instead of being silently overwritten.
  • CHANGELOG.md introduced with the full release history to date.
v0.3.0

P1 feature wave

  • R reruns a failed run: y for failed jobs only, a for the whole stage.
  • T triggers with environment variables.
  • History pagination loads older runs as you reach the bottom, while background refreshes keep the paginated tail.
  • Every git material is checked and shown, not just the first.
  • GitHub Enterprise support via github_api_base.
  • Desktop notifications when a favorited pipeline starts failing.
  • Homebrew bottle support so brew install can pour a prebuilt binary.
v0.2.0

Performance and CLI polish

  • Incremental console tailing with ?startLineNumber and ETag/304 dashboard polls for near-zero steady-state network cost.
  • y copies commit SHA, pipeline/group names, and artifact URLs via OSC 52.
  • --version, --help, --config-dir, and $XDG_CONFIG_HOME support.
  • Built-in shell completions and man page subcommands.
  • CI on pushes and pull requests; Windows job in the release pipeline.
v0.1.4

Bug bash

  • Fixed three UTF-8 panics in console rendering, search highlighting, and materials.
  • Fixed reconnect state leak, global ctrl-c handling, materials scroll, and favorites prefetch.
v0.1.3

Job tabs and log search

  • Tabbed job view: Console, Artifacts, and Materials.
  • Console log search with inline highlighting and n/N match jumping.
  • Severity-colored logs: failures red, warnings yellow, passes green, agent chatter dimmed.
v0.1.2

Run counters

  • Run counter shown alongside the label so timer reruns of one commit stay distinguishable.
v0.1.1

GitHub open action

  • o opens the run's commit on GitHub, or the pending diff when the deployed run is behind.
  • GitHub token picked up from gh auth token automatically.
v0.1.0

Initial release

  • Three-pane dashboard, trigger/pause/unpause/cancel, live console logs with tail-follow, fuzzy filter, favorites, mouse, GitHub stale-deploy check, and instant startup from a disk cache.