Files
zeekayandHanzo Dev 1b7446e42c ci: canonical pair — hanzo.yml + forge caller
github.com has no runner for hanzo-build-linux-amd64, so a caller under
.github/workflows is a gate that can never be scheduled. This is the ~7-line
caller on the plane that can (git.hanzo.ai git-runner fleet), pinned @v1.

Also fixes the one defect the new gate found on its first run:
example/loopback passed an UNBUFFERED channel to signal.Notify, which drops the
SIGTERM that unmounts the filesystem whenever the receiving goroutine is not
already parked. Buffered by 1, per os/signal's own documented contract.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-06 02:39:08 -07:00

23 lines
1.2 KiB
YAML

# Canonical CI/CD config for hanzoai/go-fuse — read by the hanzoai/ci reusable
# workflow (.hanzo/workflows/cicd.yml) and by platform.hanzo.ai.
#
# LIBRARY: native Go bindings for the FUSE kernel module. No image, no deploy.
#
# The gate is build + vet, and NOT `go test ./...`, for one concrete reason:
# almost every test in fs/ and fuse/ actually MOUNTS a filesystem. That needs
# /dev/fuse and CAP_SYS_ADMIN, which a container runner does not have, so
# `go test ./...` here would report a property of the runner rather than of the
# code — the most expensive kind of red, because it is never the code's fault
# and so nobody reads it twice. Mount-level testing belongs on a privileged
# host, out of band.
#
# `go vet` is what makes this more than a compile check: vet type-checks the
# _test.go files too, so a broken test still fails the gate, and it runs the
# real analyzers. It earned that on its first run — it found
# `make(chan os.Signal)` passed to signal.Notify in example/loopback, an
# unbuffered channel that silently drops the SIGTERM that unmounts the
# filesystem. Fixed in the same commit that added this file.
test:
- name: build-and-vet
run: go build ./... && go vet ./...