Add first-class Actions management (#63)

This commit is contained in:
Georg Bauer
2026-08-15 20:06:52 +02:00
parent f84ab774e6
commit 59bcddfadf
32 changed files with 4039 additions and 275 deletions

View File

@@ -44,7 +44,8 @@ Run `cargo run -p gotcha-tui -- --server NAME` in a normal terminal and in a
Herdr pane. Use a non-production account with at least two server profiles and
representative repositories.
- [ ] The five numbered panes open Home, Issues, Repos, PRs, and Milestones;
- [ ] The six numbered panes open Home, Issues, Repos, PRs, Milestones, and
Actions;
the selected pane and row remain visibly distinct at narrow and wide
terminal sizes.
- [ ] `j`/`k`, arrows, `g`/`G`, Page Up/Down, Enter, and Backspace provide
@@ -72,6 +73,14 @@ representative repositories.
added and the current user's comments edited.
- [ ] Milestones can be created, edited, closed/reopened, and deleted after
confirmation; milestone details route to their issues and pulls.
- [ ] Actions selects a repository, lists workflows and paginated runs, and
preserves selection while active runs refresh. Dispatch a workflow with a
branch or tag plus multiple `KEY=VALUE` inputs; open the resulting run,
inspect every job, open its grouped setup/task/completion entries, and
open each group's complete scrollable log text. Verify a long multi-job
workflow such as RuDS release run 30 stays navigable without flattening
all jobs and logs into one view.
Queued, running, successful, failed, and cancelled states remain distinct.
- [ ] Server profiles can be added, authenticated, selected, edited, renamed,
and deleted. Blank token on edit preserves the existing token; removing
the last server leaves the server manager available.
@@ -89,6 +98,17 @@ representative repositories.
`target/release/gotcha-tui`, and the installed executable starts from
`PATH`.
## Actions CLI
- [ ] `gotcha action workflow list OWNER/REPOSITORY` lists the repository's
workflows without using `api request`.
- [ ] `gotcha action workflow dispatch OWNER/REPOSITORY WORKFLOW --ref REF`
accepts repeated `--input KEY=VALUE` values, rejects malformed or
duplicate inputs, and creates a run with the requested ref and inputs.
- [ ] `gotcha action run list OWNER/REPOSITORY` supports page/limit plus event,
branch, status, actor, and SHA filters. `run show` returns every job and
step, and `run logs` returns every job's complete log.
Build and install the simulator app:
```sh
@@ -209,7 +229,8 @@ source update are published, and installs or updates Gotcha through AltStore PAL
The native refresh control appears, reloads data, and disappears.
- [ ] On accounts/repositories with more than 30 results, Home activity,
repositories, issues, pull requests, milestones, milestone contents,
commit history, and pull-request files initially show one page plus a
Action runs, commit history, and pull-request files initially show one
page plus a
**Pull up or tap to load more**
footer. Pull upward past the bottom and verify the footer changes to a
native loading indicator, the next page appends without duplicates, and
@@ -240,18 +261,27 @@ source update are published, and installs or updates Gotcha through AltStore PAL
without clipping either edge.
- [ ] Activity rows have the correct icon, repository, summary, and date.
- [ ] The compact icon row below the activity graph sits flat on the normal
background with no border or pill and defaults to the clock. Select the
issue and pull-request icons in turn; each shows only matching recent
activity or the native empty state, then the clock restores all rows.
The people and bell icons remain separate, accessible Server Activity
and Notifications destinations.
- [ ] Tap **Server Activity**. The pushed native list combines activity from
every user visible to the selected server account in newest-first order,
identifies each actor, supports pull-to-refresh and pagination without
duplicates, and uses a native empty state when no activity is visible.
background with no border or pill. **Your activity** is selected by
default with a filled accent-colored icon. Switch to **All users** and
**Notifications**; only the current timeline uses the accent color and
selected accessibility trait, and returning to **Your activity** restores
the user's unfiltered feed. Rapid switching never replaces the selected
timeline with a cancelled result.
- [ ] The timeline mini-icons come first, followed immediately by every
non-timeline destination omitted from the tab bar. Each destination opens
its native screen and remains reachable when the row must scroll
horizontally at large Dynamic Type sizes. A pushed destination
keeps the native Back button and returns to the selected Home timeline.
- [ ] The **All users** timeline combines activity from every user visible to
the selected server account in newest-first order, identifies each actor,
supports pull-to-refresh and pagination without duplicates, and uses a
native empty state when no activity is visible.
Tap another user's repository, issue, pull request, and commit events;
each opens the corresponding native detail screen and Back returns to
Server Activity.
each opens the corresponding native detail screen and Back returns to the
selected Home timeline.
- [ ] The **Notifications** timeline shows open notification rows with unread
state, supports pull-to-refresh and pagination, marks a selected unread
row read before routing, and keeps non-linkable rows non-tappable.
- [ ] Pull-request activity includes older creation and close events beyond the
first activity-feed page without requiring a manual pull-up; the empty
state appears only after every available page has been checked.
@@ -260,6 +290,32 @@ source update are published, and installs or updates Gotcha through AltStore PAL
Back button and left-edge interactive swipe return directly to Home.
- [ ] Non-linkable server activity does not navigate or appear tappable.
## Actions
- [ ] Open Actions, select a repository, and switch repeatedly between native
Workflows and Runs segments. Pull to refresh both lists; load multiple run
pages without duplicate or stale rows and verify active runs refresh
automatically without disrupting navigation.
- [ ] Open a workflow. The native grouped dispatch form starts with the
repository's default branch, requires a non-empty reference, accepts
multiline `KEY=VALUE` inputs, keeps standard iOS text selection/editing,
reports invalid or duplicate inputs, and dismisses only after the server
accepts the dispatch.
- [ ] Open queued, running, successful, failed, and cancelled runs. Their
symbols, labels, progress, and jobs match Gitea and update while active.
Drill down through Run, Job, and grouped setup/task/completion lists;
each higher level shows its outcome and a disclosure indicator. Success
uses a green filled checkmark, failure a red filled X, and waiting,
queued, running, skipped, and cancelled remain visually distinct.
Finished jobs and tasks show elapsed time instead of a log-line count. Open a
group to verify its complete monospaced log text is selectable, readable,
and accessible at large Dynamic Type sizes. Use a long multi-job workflow
such as RuDS release run 30 to verify the hierarchy remains manageable.
- [ ] Exercise empty repositories, a network error, rapid mode changes, Back,
interactive swipe, pull-to-refresh, background/foreground, and request
cancellation. No stale result replaces newer content and no loading or
refresh indicator remains stuck.
## Notifications
- [ ] Launch a fresh install. Gotcha does not request notification permission
@@ -274,15 +330,15 @@ source update are published, and installs or updates Gotcha through AltStore PAL
the app switch persists across relaunches, and iOS Settings remains the
source of truth for alerts, sounds, Focus, and scheduled summaries.
Turning the app switch off cancels pending alerts and background refresh.
- [ ] Tap the Home bell. Open and Closed each show the matching server
notification threads with a type icon, title, repository, date, Dynamic
Type layout, and accessible Open/Closed value. Pull to refresh, switch
status repeatedly, and load a list longer than one page without duplicate
or stale rows.
- [ ] Select the Home **Notifications** timeline. The inline Open/Closed control
shows matching server notification threads with a type icon, title,
repository, date, Dynamic Type layout, and accessible Open/Closed value.
Pull to refresh, switch status repeatedly, and load a list longer than one
page without duplicate or stale rows.
- [ ] Tap open and closed issue, pull-request, commit, and repository
notifications. Each opens the native destination on the Home navigation
stack; opening an unread thread marks it read, Back returns to the
notification list, and the next refresh moves it from Open to Closed.
selected Home timeline, and the next refresh moves it from Open to Closed.
- [ ] After the first poll establishes a cursor, create or receive another
server notification. Launch the Debug simulator build with
`xcrun simctl launch booted de.rfc1437.gotcha --validate-background-notifications`,
@@ -534,6 +590,16 @@ source update are published, and installs or updates Gotcha through AltStore PAL
## Settings, accessibility, and lifecycle
- [ ] Settings opens from the gear button on Home and is not a tab.
- [ ] Home, Issues, Repositories, Pull Requests, Milestones, Actions, and Server
Activity use the destination name as the primary navigation title and the
selected server as the smaller subtitle; changing servers updates both.
- [ ] Primary Navigation always keeps Home first and allows up to four ordered,
unique choices from Issues, Repos, Pulls, Milestones, Actions, and Server
Activity. Add, remove, and reorder destinations with native table
controls; tab order updates immediately, omitted destinations remain on
Home, and the configuration survives relaunch and server changes. An
upgrade from the previous build starts with Issues, Repos, Pulls, and
Milestones.
- [ ] Appearance changes between Auto, Light, and Dark immediately; Auto follows
the simulator system appearance.
- [ ] Icon and appearance settings remain selected after relaunch.