format job crashes the formatter instead of checking formatting #512
Labels
No labels
agent-ready
bug
contract
documentation
duplicate
enhancement
good first issue
help wanted
invalid
needs-human
needs-input
question
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
iterative-works/iw-cli#512
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?
scala-cli fmt --check .died in theformatjob with a Scala Native crash, exit 139:Run 630 on PR #511, job 1840. It crashed at 0% — before formatting anything — so it is not a file the formatter cannot parse.
Not reproducible locally
Same command, same
.scalafmt.conf(version = "3.10.4"), same 523 files: exits 0 with "All files are formatted with scalafmt :)". The job succeeded on runs 625 and 627 within the preceding hour, on the same branch family.Why it matters
formatis a required check, so a crash in the tool blocks a merge with a message that reads like a formatting failure. The banner says the code is unformatted; the code is formatted. That is the same class of defect as #468's "PUSH BLOCKED over passing output" — the gate reporting something other than what it found.Worth checking
formatandlintjobs run in parallel on one self-hosted runner and both fetch tools into a shared coursier cache. Contention there is the first thing to rule out.actions/checkout@v4had been rate-limited by GitHub twice, so the host may simply have been under pressure.Related
formatalso downloads scalafmt fromgithub.comunauthenticated, which is the dependency that took the whole pipeline down twice (fixed for actions in9559b0f9, still present for the formatter binary). A rate limit there would fail this job too, with a different message.Did not reproduce on the next run of the same branch (
9559b0f9):formatpassed, and so did every other job. Same 523 files, same scalafmt 3.10.4, same runner.So it is intermittent, not a file the formatter cannot parse — which the 0% progress already suggested. It stays open: an intermittent crash in a required check still blocks a merge while reporting something other than what it found, and the shared-cache and memory questions above are unanswered.
Intake: needs-human
Workflow: diagnostic
Reason: 3 open CLARIFY markers (G1) — all three need access to the self-hosted runner host, which the worktree cannot reach
Analysis: project-management/issues/IW-512/analysis.md on branch IW-512
Intake: needs-input
Workflow: diagnostic
Reason: G1 (3 CLARIFY markers) — all three need facts from the self-hosted runner host
Analysis: project-management/issues/IW-512/analysis.md on branch IW-512
formatjob crashed with exit 139 in 2 of 79 runs. The fix for Hypothesis 1 (a scalafmt version whose native binary does not crash;.scalafmt.confpins 3.10.4) does not wait for these answers. Hypotheses 2-4 turn on the runner's container setup, which is in the Forgejo runner'sconfig.ymlon the host, not in this repository:memory.maxandcpu.maxof a job container, whethernprocinside it reports the host's cores, whether a host directory is mounted as the coursier cache, and the runner'scapacity(job containers at once). What do you give? Options: a) the four values, in the answer b) the values are not known now: build the Hypothesis 1 fix and the crash instrumentation of Defect 2, which makes the next crash report these facts in the job log, and leave Hypotheses 2-4 open Recommended: b)dmesg -Tnear those times, or the core file of "Segmentation fault (core dumped)" (its place iskernel.core_pattern), whose backtrace names the faulting frame. The logs show exit 139 and no OOM message, which already argues against an OOM kill (exit 137) and Scala Native heap exhaustion (exit 1). What do you give? Options: a) whatdmesgand the core file show, in the answer b) the evidence is gone: rely on the signature match and the Defect 2 instrumentation Recommended: b)Answer in a comment on this issue; intake reads it on its next iteration.
Drop it now.