Repository navigation
Conversation
A step that ran its own shell was a second copy of the build that only ever ran on a push. Each of the 37 is now `go tool task <name>`: an existing task where one already did the same thing (boot:roms, boot:compat), a new one beside it otherwise, with what only the workflow knows in the step's env: and its outputs, env and summary written by the task (to stdout outside CI). Task is a go.mod tool at 3.54.0, the version versions.yaml pins for the image, so a workflow needs only setup-go, and the Taskfiles call themselves through TASK_EXE. go-tools moves to spin-stack/go-tools#50 for its two new gates, which task lint runs: taskgate, with no exemption, and sfw, which finds no JavaScript here and holds the first package.json to pnpm through Socket Firewall. attestgate is told which tasks publish (qemu:publish, report:publish) and which attests (release:sign), since the YAML now names them only. lab, report and release run Task with interleaved output: a prefixed line hides the ::error:: commands their tasks print. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
spin-stack/go-tools#50 and #51 are on main: the pin moves from the PR's commit to main's, which also finds the Task go.mod pins for refs and holds pnpm run to installing nothing on its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aledbf
marked this pull request as ready for review
October 24, 2026 19:00
… task Through spin-stack/go-tools#52: refs ran the path `go tool -n task` printed, a build directory that in CI was gone once go returned, and lint failed on it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Every
run:step of every workflow is now onego tool task <name>, andtask lintholds the repository to that with go-tools'taskgate, and to pnpm through Socket Firewall withsfw check.Depends on spin-stack/go-tools#50 (not merged yet). go.mod pins go-tools at that PR's commit
8cf54b0. When #50 merges, re-pin withgo get github.com/spin-stack/go-tools@<main's commit>.What changed
cmd/taskgate,cmd/sfwand Task (github.com/go-task/task/v3/cmd/task@v3.54.0) are added as tools. 3.54.0 is the version versions.yaml already pins for the image. Thattaskentry stays, because the image'sinstall-dev-tools.shandhack/releaseread it.go-task/setup-taskstep is gone from all nine, so they need onlysetup-go. Inreport.yml,setup-gomoves above "What this runner has", because that step is now a task.coveragemutate.mutatenow works out the base in CI fromGITHUB_EVENT_NAME,GITHUB_BASE_REFandBEFORE; locally it still defaults toorigin/main.vsockboot:buildkitboot:hereboot:romsboot:compatosv:issuestouches -- <entries> -- <paths>. The lists stay in the YAML, beside the path filters they mirror.qemu:build,kernel:build,e2fsprogs:buildandimage:build.CACHE_BACKENDandCACHE_EXPORTnow go in the step'senv:.qemu:summary,kernel:summary,image:summaryqemu:versionqemu:publishvsocklab:unpack,lab:fetch,lab:place,lab:vars,lab:about,lab:run,lab:foundrelease:version,release:notes,release:provenance,release:sign,release:tag. "Tag the commit" now readsVERSIONfromenv:and no longer from${{ }}in the script.report:runner,report:unpack,report:compare,report:publish$GITHUB_OUTPUT,$GITHUB_ENVand$GITHUB_STEP_SUMMARYmoved into the tasks. Outside CI they go to stdout. Scripts that ran under Actions'bash -enow start withset -e, so a failure stops them as before.{{.TASK_EXE}}(lint,default,bump,lab:run), because notaskbinary is on PATH in CI any more.TASK_OUTPUT: interleavedis set for the lab, report and release jobs. Task's prefixed output puts[name]before::error::, and GitHub then no longer reads it as a workflow command.workflows/workflows_test.go) is told thatqemu:publishandreport:publishupload and thatrelease:signattests. The YAML now names only the tasks..github/taskgate-allow.txt.Verified
go tool taskgate: "every workflow step runs a task (0 exempt)".go tool sfw check: OK. There is no JavaScript in this repository.go tool task lintpasses: gofmt, vet, the Taskfiles parse, shell, ctxlife, testquality, refs, mutate -stale-exempts, taskgate, sfw, actionlint, and every action pinned by commit.go tool task testpasses (89.6%).go test ./workflows/(attestgate) passes.--list-all).coverage(with and without coverage.out)touchesqemu:versionrelease:version: given, generated, and refusing a bad versionmutate: the PR base, the push base, the HEAD~1 fallback, the local default, an explicit BASElab:vars: accepted, refused, and reserved nameslab:fetch: no runs, and a bad run idlab:place: beside and instead, on a fake treelab:aboutlab:run: nestedTASK_EXEand the log teelab:foundreport:runner: through a sudo that fails--dryrenders ofboot:hereandqemu:publish.env:in Task 3.54, which compat.yml's ROM and checkpoint steps rely on.Not verified
These need KVM, a release download, registry or release credentials, or a real CI run:
vsock(sudo chmod on the host)boot:buildkit(would make a builder on the host)boot:here,boot:romsandboot:compatend to endqemu/kernel/image:summaryandqemu:publish, which need buildsosv:issues(it writes issues)release:notes,release:sign,release:tagandrelease:provenancelab:unpack,report:unpack,report:compareandreport:publishThe first run of each workflow on this branch is the check for those.
Worth knowing
^\s{4}grep found nothing. With interleaved output it now gets the test's lines.qemu:publishtagsghcr.io/$GITHUB_REPOSITORY/qemu, as before. Outside CI it falls back to spin-stack/spin-machine.🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.