Repository navigation
fix(ci): fail the merge gate on cancelled jobs, and key the lint cache on the toolchain - #58
Merged
Merged
Conversation
…e on the toolchain Build Success runs under !cancelled(), which still fires when individual needs were cancelled but the run as a whole was not. needs.*.result then contains cancelled rather than failure, so Any jobs failed? was skipped and All jobs passed or skipped? exited 0: branch protection saw the gate green even though a required job never reached a verdict. Reachable here because concurrency cancels in-progress runs on pull_request, so a superseded push is the ordinary path into that state. The golangci-lint cache holds analyzer facts, so a stale or partial entry does not just cost time: it turns staticcheck checks like SA5011 into false positives on code the commit never touched. home-operations/miroir hit exactly that and it blocked its merge queue. The key hashed only go.sum and .golangci.yml, so a bad entry survives any commit touching neither, and the bare-prefix restore-keys hands it to every subsequent run until GitHub's 7-day eviction. The key now covers .mise/mise.lock so a golangci-lint or Go bump starts fresh, and restore-keys is gone so a miss starts cold rather than inheriting the newest entry under the prefix. Both defects were swept across the org after surfacing in miroir. Signed-off-by: Devin Buhl <devin@buhl.casa>
Merged
gabrielcosi
pushed a commit
to gabrielcosi/home-ops
that referenced
this pull request
Aug 21, 2026
….2 ➔ 0.2.3) (#473) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/home-operations/charts/echo](https://github.com/home-operations/echo) | patch | `0.2.2` → `0.2.3` | --- ### Release Notes <details> <summary>home-operations/echo (ghcr.io/home-operations/charts/echo)</summary> ### [`v0.2.3`](https://github.com/home-operations/echo/blob/HEAD/CHANGELOG.md#023-2026-08-21) [Compare Source](home-operations/echo@0.2.2...0.2.3) ##### Bug Fixes - **chart:** keep example comments out of unrelated schema descriptions ([#​83](home-operations/echo#83)) ([6ce9ab2](home-operations/echo@6ce9ab2)) - **ci:** fail the merge gate on cancelled jobs, and key the lint cache on the toolchain ([#​58](home-operations/echo#58)) ([b4afcdd](home-operations/echo@b4afcdd)) - **go:** update module go (1.26.4 → 1.26.5) ([#​70](home-operations/echo#70)) ([8661ad5](home-operations/echo@8661ad5)) - **go:** update to go 1.27.0 ([#​84](home-operations/echo#84)) ([f9ba0a6](home-operations/echo@f9ba0a6)) ##### Documentation - add AGENTS.md with Go conventions ([#​62](home-operations/echo#62)) ([b218df4](home-operations/echo@b218df4)) - make AGENTS.md a generic, drift-resistant template ([#​64](home-operations/echo#64)) ([28d45d9](home-operations/echo@28d45d9)) ##### Build System - **mise:** add actionlint and refresh the lockfile ([#​50](home-operations/echo#50)) ([beda1ff](home-operations/echo@beda1ff)) ##### Continuous Integration - gate pull requests on a single Build Success check ([#​49](home-operations/echo#49)) ([8c394eb](home-operations/echo@8c394eb)) - **github-action:** Update action actions/stale (v10.4.0 → v11.0.0) ([#​59](home-operations/echo#59)) ([6255ec0](home-operations/echo@6255ec0)) - **github-action:** Update action docker/github-builder (v1.14.0 → v1.15.0) ([#​57](home-operations/echo#57)) ([25c7b5b](home-operations/echo@25c7b5b)) - **github-action:** Update action docker/github-builder (v1.15.0 → v1.16.0) ([#​73](home-operations/echo#73)) ([6fc568c](home-operations/echo@6fc568c)) - **github-action:** Update action docker/login-action (v4.5.1 → v4.5.2) ([#​60](home-operations/echo#60)) ([85c0d4d](home-operations/echo@85c0d4d)) - **github-action:** Update action docker/login-action (v4.5.2 → v4.6.0) ([#​63](home-operations/echo#63)) ([5cf5338](home-operations/echo@5cf5338)) - **github-action:** Update action home-operations/.github/actions/workflow-lint (v1.0.2 → v1.0.3) ([#​69](home-operations/echo#69)) ([42bac11](home-operations/echo@42bac11)) - **github-action:** Update action jdx/mise-action (v4.2.1 → v4.2.2) ([#​52](home-operations/echo#52)) ([c9298e0](home-operations/echo@c9298e0)) - **github-action:** Update action jdx/mise-action (v4.2.3 → v4.2.4) ([#​71](home-operations/echo#71)) ([5283840](home-operations/echo@5283840)) - **github-action:** Update github-actions ([#​53](home-operations/echo#53)) ([d6334ce](home-operations/echo@d6334ce)) - **github-action:** update workflow-lint action (1.0.0 → v1.0.2) ([#​66](home-operations/echo#66)) ([967c73a](home-operations/echo@967c73a)) - lint workflows with the shared composite action ([#​51](home-operations/echo#51)) ([c668830](home-operations/echo@c668830)) - skip release-please version-bump PRs in checks ([#​48](home-operations/echo#48)) ([2de44cc](home-operations/echo@2de44cc)) - wire govulncheck into mise and CI ([#​68](home-operations/echo#68)) ([2eb630c](home-operations/echo@2eb630c)) ##### Miscellaneous Chores - **github-action:** update action jdx/mise-action (v4.2.4 → v4.2.5) ([#​78](home-operations/echo#78)) ([d4e845d](home-operations/echo@d4e845d)) - **go:** pin go directive to 1.26.0 ([#​79](home-operations/echo#79)) ([88e2148](home-operations/echo@88e2148)) - **mise:** prune lockfile to used platforms ([#​67](home-operations/echo#67)) ([32591e5](home-operations/echo@32591e5)) - **mise:** Update tool cosign (3.1.2 → 3.1.3) ([#​74](home-operations/echo#74)) ([5edab8a](home-operations/echo@5edab8a)) - **mise:** update tool go (1.26.5 → 1.26.6) ([#​82](home-operations/echo#82)) ([9d4a187](home-operations/echo@9d4a187)) - **mise:** update tool go:golang.org/x/vuln/cmd/govulncheck (1.6.0 → v1.7.0) ([#​77](home-operations/echo#77)) ([731f12d](home-operations/echo@731f12d)) - **mise:** update tool helm (4.2.3 → 4.2.4) ([#​81](home-operations/echo#81)) ([32b85b4](home-operations/echo@32b85b4)) - **mise:** Update tool oxfmt (0.60.0 → 0.61.0) ([#​54](home-operations/echo#54)) ([d40cd22](home-operations/echo@d40cd22)) - **mise:** Update tool oxfmt (0.61.0 → 0.62.0) ([#​72](home-operations/echo#72)) ([5b7a778](home-operations/echo@5b7a778)) - **mise:** Update tool oxfmt (0.62.0 → 0.63.0) ([#​75](home-operations/echo#75)) ([7114dc7](home-operations/echo@7114dc7)) - **mise:** Update tool zizmor (1.28.0 → 1.29.0) ([#​65](home-operations/echo#65)) ([4ad14aa](home-operations/echo@4ad14aa)) - **release-please:** standardize the release pull request title pattern ([#​61](home-operations/echo#61)) ([d13101b](home-operations/echo@d13101b)) - standardize release-please changelog sections ([#​56](home-operations/echo#56)) ([007ec54](home-operations/echo@007ec54)) </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Berlin) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zMC4zIiwidXBkYXRlZEluVmVyIjoiNDQuMzAuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUvY29udGFpbmVyIiwidHlwZS9wYXRjaCJdfQ==--> Reviewed-on: https://git.xcd.dev/gabrielcosi/home-ops/pulls/473
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.
Two CI defects, both swept across the org after they surfaced in home-operations/miroir. Sibling PRs are open elsewhere with the identical changes.
Build Successtreatedcancelledas passingThe job runs under
if: ${{ !cancelled() }}, which still fires when individualneedswere cancelled but the run as a whole was not.needs.*.resultthen containscancelled, notfailure, soAny jobs failed?is skipped andAll jobs passed or skipped?exits 0. Branch protection sees the gate green even though a required job never reached a verdict.Reachable here:
concurrency.cancel-in-progressis on forpull_request, so a superseded push is the ordinary way into that state, not a corner case.The golangci-lint cache could poison itself
That cache holds analyzer facts (staticcheck's "does this call return?"), so a stale or partial entry does not just cost time: it turns checks like SA5011 into false positives on code the commit never touched. miroir hit exactly that, twice, on byte-identical trees, and it blocked its merge queue.
The key hashed only
go.sumand.golangci.yml, so a bad entry survives any commit touching neither, and the bare-prefixrestore-keyshands it to every subsequent run until GitHub's 7-day eviction..mise/mise.lock, so a golangci-lint or Go bump starts fresh instead of handing a new binary the old one's factsrestore-keysis gone: a miss must start cold rather than fall back to the newest entry under the prefixExact hits stay the norm, since the three hashed inputs are stable across most PRs. When one does change, a cold cache is the correct outcome.
Verified:
actionlint(with the org's-ignoreflags),zizmor,oxfmt --check.