ci(coverage): stop swallowing test failures, and drop the unused codecov config - #2115
Merged
Conversation
…cov config
The Coverage job ended its test run with `|| true`, which defeated the
`set -o pipefail` on the line directly above it. A failing or panicking package
was discarded, the partial coverage.txt was uploaded regardless, and the job
reported success. A real test failure therefore surfaced only as a slightly
lower coverage percentage on coveralls — indistinguishable from ordinary
measurement noise, and invisible in the job status.
Capture go-acc's exit status instead. The profile is still uploaded, so a failed
run does not also become a reporting blind spot, and the job then fails with an
explicit ::error:: naming the exit code. In push.yml the check is placed after
`docker rm -f minio` so the container is torn down even when the run failed.
Also removes codecov.yml. No workflow references codecov — coverage goes to
coveralls via goveralls in pull.yml and push.yml — so the file only misled
anyone editing it expecting an effect.
Verified: both workflows still parse as YAML (5 and 10 jobs); the modified run
blocks pass `bash -n`; no `${{ }}` interpolation was introduced; and the
exit-status logic was exercised directly — pass exits 0, failure exits non-zero
while still performing the upload.
Not addressed here, deliberately: coverage is measured nondeterministically
(consecutive master builds drift by ~0.006% with no coverage-relevant change),
and the external coverage/coveralls status reports failure even when coverage
increases. That status is set from the coveralls.io project settings, not from
this repository.
Collaborator
SimoneLazzaris
approved these changes
Jul 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
coverage/coverallscheck is currently red on every open PR — including one that changes 4 lines of README and no Go at all. Investigating that turned up three separate issues. This PR fixes the two that live in this repository.1. The Coverage job swallowed test failures
The
|| truedefeats theset -o pipefailon the line directly above it. A failing or panicking package was discarded, the partialcoverage.txtwas uploaded anyway, and the job reported success. A real test failure surfaced only as a slightly lower percentage on coveralls — indistinguishable from ordinary measurement noise.Now the exit status is captured. The profile is still uploaded, so a failed run does not also become a reporting blind spot, and the job then fails with an explicit
::error:::In
push.ymlthe check sits afterdocker rm -f minio, so the container is torn down even when the run failed.Behaviour, verified by running the logic directly:
2.
codecov.ymlwas dead configNo workflow references codecov — coverage goes to coveralls via
goveralls. The file sat in the repo root with anignore:list that has never had any effect, misleading anyone who edits it. Removed.Verification
runblocks passbash -n${{ }}interpolation introduced — the diff adds only shell-local variables, no untrusted input3. Not fixed here — it is not in this repository
Two things this PR deliberately does not touch, because neither is controlled by repo config:
The coveralls status fails regardless of the result. Sampled across the open PRs:
failurefailurefailureCoverage going up still posts
failure, so this is not a no-decrease gate. The pattern fits an absolute minimum threshold set above current coverage (~84.9%) in the coveralls.io project settings. Note the GitHub ActionsCoveragejob itself reportssuccess— the red mark is an external commit status.Measurement is nondeterministic. Consecutive
masterbuilds drift by −0.006% / −0.007%. The clearest case: the master build after #2111 reported −0.006%, and #2111 changed onlydocs/security/vulnerabilities/linear-fake/**— a separate Go module not in the main module’s./..., whose true effect on coverage is exactly zero.Consequence: any threshold at 0.01% resolution is a coin flip. Both need a change in coveralls.io project settings — raising/lowering the floor to sit below current coverage, or switching to "fail only on decrease > 0.5%" so it clears the noise band.
Follow-up worth considering
The filter chain is substring-based, not path-anchored:
Any path merely containing
test,fs,versionortoolsis dropped, not just the intended packages. Left alone here on purpose: correcting it changes what is measured and would shift the reported baseline, which should be a deliberate decision rather than a side effect of a CI fix.