CI: build the dev image only from a commit CI passed #716
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#716
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Measured from Forgejo's task API and job logs, runs 561–710 (24 Sep – 4 Oct 2026): wall time per push about 52–55 min, up from about 15; the browser suite grew from 149 to 645 tests in five days and runs serially (29 min); the runner takes two jobs at a time, in the order the workflow file lists them, so the browser job starts 19–22 min after the push; and Forgejo cancels the older push run when a newer push lands, which stopped 18 of 56 browser jobs before they gave a verdict.
dev-image.ymlbuilds and publishes:devon every push tomain, at the same time as CI: 14–19 minutes of amd64+arm64 (the arm64 half under QEMU) on the same six-core host as the two CI slots. So the image competes with the tests for the processor, and an instance following:devcan be given a commit whose tests failed.Decision (user, 2026-10-04)
ci.ymlthatneeds:the test jobs, runs ondocker, only formain(push or manual run), withcontents: readandpackages: writeat job level. Its steps do not change.dev-image.ymlgoes; a rebuild without a commit is a manual run of CI onmain.tests/test_image_build.py's list of workflows that build the image follows.concurrency: dev-imagegoes too: Forgejo already cancels the older push run when a newer one lands, dev-image job included.To check before relying on it
On postulo-firefox, a tag-only job with a job-level
ifandneeds:was still handed to the runner on every branch push and ended in "Early termination" (2026-09-18, #251). This is tried on a throwaway branch first. If it misbehaves here, the fallback keepsdev-image.ymlon push and gives it a first step that waits for the commit's CI result through the API and stops before building unless it passed.Done when
Probed on a throwaway branch
ci-probe(runs 715 and 716, deleted afterwards). The runner is forgejo-runner v6.4.0 against Forgejo 15:if:that is false fails its job ("Early termination"), with or withoutneeds:;needs:works when the dependent job'sifis true, across runners (ubuntu-latest → docker);timeout-minutesis ignored (a 1-minute job ran 2 m 30 s); step-leveltimeout-minutesworks ("context deadline exceeded" at 1 m 0 s);githubcontext:fromJSON(github.ref == … && '[…]' || '[…]'), byref,ref_nameorevent_name, always took the last branch.Upgrading the runner may fix the first and third; that is a host change.
A dev-image job in
ci.ymlwould need a job-leveliffor pull requests and release branches, so it stayed indev-image.yml, whose first step isrelease_tools.py wait-ci $GITHUB_SHA: it waits for the push's own CI jobs (unit, browser, checks) and builds nothing unless all pass (b3cb4e7ba).