Skip to content

Installing assent

Assent ships as a single static Go binary. Prefer a checksum-verified install for release artifacts; use go install when developing from source.

Only the release archives and the Homebrew bottle carry a stamped version — goreleaser injects it at link time (-s -w -X main.version={{.Version}} in .goreleaser.yaml). A go install build has no such injection; see the caveat below before you rely on assent version for provenance.

go install

Requires Go 1.25+ (see go.mod).

go install github.com/PlatformRelay/assent/cmd/assent@latest

Pin a tag when you need a reproducible toolchain:

go install github.com/PlatformRelay/assent/cmd/assent@v0.1.0

Confirm:

assent version

go install binaries report 0.0.0-dev

go install does not pass the release ldflags, so the version stays at its compile-time default whatever ref you build:

$ go install github.com/PlatformRelay/assent/cmd/assent@v0.1.0
$ assent version
assent 0.0.0-dev

That is cosmetic for local policy authoring (assent lint / assent test). A DecisionRecord from such a binary is still identifiable — pins.toolDigest is a sha256 over the binary's Go build info (D-120), so different builds differ regardless of the version string — but pins.toolVersion reads 0.0.0-dev and cannot be mapped back to a released tag. Use the release archive or Homebrew route when the version string itself has to be true.

curl / local install script (checksum-verified)

hack/install.sh verifies the archive SHA256 against a goreleaser checksums.txt before extract (D-110 — fail-closed on mismatch). Cosign verification runs when a sibling .sigstore.json bundle is present; snapshot builds without signatures skip cosign. Pass --require-signature to fail closed when bundles are absent (post-S06 signed releases).

Local snapshot (dist/)

After task release-snapshot:

./hack/install.sh \
  --archive dist/assent_*_$(uname -s | tr '[:upper:]' '[:lower:]')_*.tar.gz \
  --checksums dist/checksums.txt \
  --dest ~/.local/bin

Pick the archive that matches your OS/arch if the glob expands to more than one file.

GitHub release URL pattern

Tagged releases publish under this pattern (v0.1.0 onwards):

VERSION=0.1.0
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
BASE="https://github.com/PlatformRelay/assent/releases/download/v${VERSION}"

curl -fsSL -o "/tmp/assent_${VERSION}_${OS}_${ARCH}.tar.gz" \
  "${BASE}/assent_${VERSION}_${OS}_${ARCH}.tar.gz"
curl -fsSL -o /tmp/checksums.txt "${BASE}/checksums.txt"

./hack/install.sh \
  --archive "/tmp/assent_${VERSION}_${OS}_${ARCH}.tar.gz" \
  --checksums /tmp/checksums.txt \
  --dest ~/.local/bin

Default --dest is /usr/local/bin when writable, otherwise ~/.local/bin.

Homebrew

Assent is packaged via the PlatformRelay/homebrew-tap (E9-S07b, D-107). Formula updates ship on tagged releases when HOMEBREW_TAP_GITHUB_TOKEN is set (maintainer runbook: hack/release/README.md).

Third-party taps require an explicit trust step on current Homebrew:

brew tap PlatformRelay/tap
brew trust PlatformRelay/tap   # needed if brew refuses an untrusted tap
brew install assent
assent version

Review template: hack/release/homebrew/assent.rb.template (in-repo Formula shape; release checksums are authoritative).