Files
pad/scripts
xarmian 2c1706fbbb build(release): a shipped binary that does not start fails the release before it publishes (TASK-2035) (#1980)
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.
2026-10-09 13:50:51 -04:00
..