mirror of
https://github.com/PerpetualSoftware/pad.git
synced 2026-10-26 06:19:49 +00:00
2c1706fbbb
A GoReleaser builds[].hooks.post runs scripts/release-smoke.sh on every binary right after its build and before anything is archived, signed, notarized, pushed or uploaded; a non-zero exit fails 'release' at the build stage with nothing published. No skip switch (lead ruling): a flake gets a re-run, not a bypass. - Every target, statically (go version -m reads any GOOS/GOARCH): a Go executable whose main is github.com/PerpetualSoftware/pad/cmd/pad, with the GOOS/GOARCH it claims and the version and commit the release sets in its -ldflags (GoReleaser builds without VCS stamping). - linux/amd64 natively and linux/arm64 under qemu-user also BOOT: --version names the version and commit, and 'server start' on a free loopback port with an empty HOME/data dir answers /api/v1/health with status ok, the same version and commit, and an embedded web bundle built from the same commit; then it must stop on SIGTERM. - darwin and windows cannot run on the ubuntu runner; ci.yml's native-smoke job boots them from source on every PR. The binary runs with an empty environment: the hook inherits the GoReleaser step's env, which carries the macOS signing and notary secrets. qemu-user comes from Ubuntu's own package, not a new third-party action, since this job holds contents:write and the GHCR token. Verified with goreleaser v2.15.4 --snapshot (publish, sign, notarize, docker and sbom skipped): all six pass; a hook expecting the wrong version fails all six at the build stage, and a binary that exits at 'server start' fails linux/amd64 and linux/arm64 there; both produce no archive.