- Go (version in
go.mod) - golangci-lint v2+ (
make toolsinstalls the pinned version) - bats-core and
jqformake test-e2e - mise (optional, for toolchain management)
Install dev tools:
make toolsmake buildThe binary is written to bin/hey.
make testRun with race detector:
make race-testCross-package coverage, enforcing the floor set in the Makefile:
make coverageIt writes coverage.out, coverage.func.txt and coverage.packages.txt, then prints a
package summary and the lowest-covered functions.
The bats suite covers the installers and release scripts (scripts/install.sh,
scripts/install.ps1, scripts/notify-issue.sh, …), which Go tests cannot reach:
make test-e2eTests that exercise install.ps1 need pwsh and skip without it locally.
make lintCheck formatting:
make fmt-checkmake checkThis runs fmt-check, vet, lint, test, tidy-check, check-surface
and check-release-lockstep.
.surface is the committed list of commands and flags. Adding or removing one
fails make check-surface; regenerate with make update-surface and commit the
diff. Removals also fail the release-time make check-surface-compat unless
listed in .surface-breaking.
Compares the current CLI surface against the previous tagged release to detect breaking changes.
- Fork and create a feature branch from
main. - Make your changes.
- Run
make checkand ensure everything passes. - Open a pull request against
main.
See RELEASING.md.