Closes #6.
Detail. BuildLogView rendered the log and nothing else, so a build
opened from the Feed showed "Build #60" and raw text — no status, ref,
commit or timing. It is now BuildDetailView, loading build show
alongside the log, with the sha linking to the commit as the web's page
does. A queued build whose log does not exist yet still renders its
header rather than failing the screen.
Trigger. The old control was a text field prefilled with the most
recent job name — a guess the server then rejected. build jobs
(krz/gitbay#50, deployed) lists what it will accept, so it is a menu of
jobs carrying each one's schedule or tag glob, disabled where the repo
has no job file. The web hides its form in exactly that case.
Status icon and colour moved onto Build; the row and the header must
agree on what "failure" looks like.
Tests: 183 unit tests, plus testBuildJobsAndDetail against gitbay.org.
Two notes on the UI tests:
- The no-jobs assertion is behavioural (tap, expect no job offered)
rather than
isEnabled, because a disabled SwiftUIMenustill reports itself enabled to XCUITest. testRepoManagementFlowswas already failing on main at the merge requirements toggle — a List does not build rows it has not shown, so the assertion now scrolls the section into existence. Confirmed pre-existing by running the same test on main before this branch.