Actions: show a run's jobs, progress and logs #130

Closed
opened 2026-10-10 16:34:36 -05:00 by deadstyle · 2 comments
Owner

Problem

The Actions box [3] shows a run's workflow, status, branch and duration, and nothing else. You can't see which steps ran, how far a run got, or why it failed without leaving for the browser. Both adapters already fetch a run's jobs and a job's log (forge.RunLister.ListJobs, forge.LogReader.JobLog); the UI and core never use them.

Acceptance criteria

  • A run's Overview tab lists its jobs with a status icon, name and duration, so you can see which jobs passed, failed or are still running (design.md → Boxes: Actions)
  • A run has a Logs tab (design.md → Boxes: Actions, "Overview · Logs")
  • The Logs tab shows the log of the job chosen in the Overview, scrollable with j/k; with one job it opens that job's log directly
  • A run that is still running refreshes its jobs and log while it is on screen, so progress updates without pressing a key
  • The Logs tab is hidden on a host whose adapter has no forge.LogReader; jobs are hidden without forge.RunLister
  • A failed log fetch shows the reason in the pane, not a crash

Plan

  • core: Jobs(ctx, repo, runID) and JobLog(ctx, repo, jobID) on Service (cached jobs; log read with a size cap, tail kept)
  • ui: Run tabs Overview · Logs, job list with cursor, log viewport reusing details.vp, stale-key drop per runID/jobID, poll tick while the run is running
  • docs: update design.md to move the Logs tab out of "After v1" and record the above

Out of scope

Re-running jobs, log search, per-step breakdown (the Forgejo API exposes jobs, not steps).

## Problem The Actions box `[3]` shows a run's workflow, status, branch and duration, and nothing else. You can't see which steps ran, how far a run got, or why it failed without leaving for the browser. Both adapters already fetch a run's jobs and a job's log (`forge.RunLister.ListJobs`, `forge.LogReader.JobLog`); the UI and core never use them. ## Acceptance criteria - A run's Overview tab lists its jobs with a status icon, name and duration, so you can see which jobs passed, failed or are still running *(design.md → Boxes: Actions)* - A run has a Logs tab *(design.md → Boxes: Actions, "Overview · Logs")* - The Logs tab shows the log of the job chosen in the Overview, scrollable with `j`/`k`; with one job it opens that job's log directly - A run that is still running refreshes its jobs and log while it is on screen, so progress updates without pressing a key - The Logs tab is hidden on a host whose adapter has no `forge.LogReader`; jobs are hidden without `forge.RunLister` - A failed log fetch shows the reason in the pane, not a crash ## Plan - core: `Jobs(ctx, repo, runID)` and `JobLog(ctx, repo, jobID)` on `Service` (cached jobs; log read with a size cap, tail kept) - ui: Run tabs `Overview · Logs`, job list with cursor, log viewport reusing `details.vp`, stale-key drop per runID/jobID, poll tick while the run is running - docs: update design.md to move the Logs tab out of "After v1" and record the above ## Out of scope Re-running jobs, log search, per-step breakdown (the Forgejo API exposes jobs, not steps).
Author
Owner

🤖 Correcting AC 1: jobs show status icon, name and attempt, not duration. domain.Job has no timing field and the Forgejo job list used here (gitea/actions.go job struct) returns none, so a per-job duration needs adapter and API work and is out of scope here. The run's total duration still shows in the Overview. Everything else in the AC list is unchanged.

🤖 Correcting AC 1: jobs show status icon, name and attempt, not duration. `domain.Job` has no timing field and the Forgejo job list used here (`gitea/actions.go` `job` struct) returns none, so a per-job duration needs adapter and API work and is out of scope here. The run's total duration still shows in the Overview. Everything else in the AC list is unchanged.
Author
Owner

🤖 merged: #131

🤖 merged: https://git.bobparsons.dev/deadstyle/lazyforge/pulls/131
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
deadstyle/lazyforge#130
No description provided.