Porcelain for runs: list, view, logs, watch, cancel, delete, and dispatch #27

Closed
opened 2026-10-16 23:59:09 -05:00 by jeff · 1 comment
Owner

Work with a repository's runs from the command line, the way gh run and gh workflow run do, instead of through zfj op and run IDs. The terms are in GLOSSARY.md under Forgejo Actions.

Decided

  • Scope: the runs of one repository, resolved from origin or -R, and dispatching a workflow. Artifacts, secrets, variables and runners — and the org, user and admin operations — stay with zfj op for now.
  • Shape follows gh: zfj run list|view|watch|cancel|delete and zfj workflow run <file>.
  • A run is named by its run number, the one the web interface shows, never its ID; each command finds the ID with listActionRuns --run_number, and --json carries both. See docs/adr/0005-runs-are-named-by-run-number.md. A run number is always required: there is no "latest run" default, since one commit can start several runs. A number the repository does not have exits 1, saying no run 43 in jeff/zfj.
  • No prompts: cancel and delete act at once.
  • --exit-status on view and watch exits 5 when the run ended in anything but success; 5 joins 0–4 in the usage text and README.
  • Logs come from the per-job log operation, not the ZIP of the whole run.
  • workflow run dispatches on the repository's default branch unless --ref says otherwise, and prints the new run's number and URL.

Tickets

Work with a repository's runs from the command line, the way `gh run` and `gh workflow run` do, instead of through `zfj op` and run IDs. The terms are in GLOSSARY.md under **Forgejo Actions**. ## Decided - **Scope**: the runs of one repository, resolved from `origin` or `-R`, and dispatching a workflow. Artifacts, secrets, variables and runners — and the org, user and admin operations — stay with `zfj op` for now. - **Shape follows `gh`**: `zfj run list|view|watch|cancel|delete` and `zfj workflow run <file>`. - **A run is named by its run number**, the one the web interface shows, never its ID; each command finds the ID with `listActionRuns --run_number`, and `--json` carries both. See `docs/adr/0005-runs-are-named-by-run-number.md`. A run number is always required: there is no "latest run" default, since one commit can start several runs. A number the repository does not have exits 1, saying `no run 43 in jeff/zfj`. - **No prompts**: `cancel` and `delete` act at once. - **`--exit-status`** on `view` and `watch` exits **5** when the run ended in anything but `success`; 5 joins 0–4 in the usage text and README. - **Logs** come from the per-job log operation, not the ZIP of the whole run. - **`workflow run`** dispatches on the repository's default branch unless `--ref` says otherwise, and prints the new run's number and URL. ## Tickets - [x] #28 - [x] #29 - [x] #30 - [x] #31 - [x] #32 - [x] #33
Author
Owner

All six tickets landed on main in cf1d198..373ef7e.

All six tickets landed on main in cf1d198..373ef7e.
jeff closed this issue 2026-10-17 10:34:29 -05:00
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
jeff/zfj#27
No description provided.