CI's shellcheck sweep never lints .github/scripts/*.sh — including release-lib.sh, which decides what gets published #70
Labels
No labels
attention
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-ruling
needs-triage
offsite
post-merge
ready
release
scope:bootstrap
scope:coolify
scope:db
scope:docs
scope:drill
scope:installer
scope:labels
scope:platform
scope:runner
scope:users
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/rig#70
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?
rig-side record of
heavy-duty/box#116. Same defect, same cause — and here it is the changelog extraction that escapes linting.The gap
.github/workflows/ci.yml's shellcheck step uses:globstarmakes**descend into subdirectories, but globs do not match dot-prefixed names withoutdotglob..githubis dot-prefixed, so**/never descends into it.Measured on
main, the tracked.shfiles CI never lints:Why
release-lib.shmakes this worth fixing hererelease-lib.shholdschangelog_section— the extractionrelease.ymlsources to build the published release body, and the same functiontest/release.sh'schangelog_armedguard (#66/#67) calls to decide whethermainis armed.So the script that decides both what gets published and whether the changelog is safe is the one shellcheck never sees. It is also the file most likely to be edited next, since #66's fix landed in it.
Current state: latent, not broken
The gap is that nothing would catch a regression, not that anything is broken today. Worth confirming both files pass before fixing, so the change is a no-op on current code rather than a bug-fix in disguise.
Suggested fix
shopt -s globstar dotglob, then verify what elsedotglobpulls intobin/*and**/*.shrather than assuming it is only.github.Better paired with an assertion that the globbed set covers
git ls-files '*.sh', so the gap cannot reopen silently — the class-check shapeheavy-duty/box#112used for its EOF-guard sweep.Note rig's CI line differs slightly from box's in which files it enumerates; fix rig's on its own terms rather than copying box's patch verbatim.
Siblings
heavy-duty/box#116— misseschangelog-armed.sh,release-notes.sh,labels-reconcile.shheavy-duty/cast— missesrelease-notes.sh,labels-reconcile.sh(filed separately)Refs
Found during the
release: 0.2.0drill (#69), while replicating CI's exact sweep on a real host.