2025-11-03 18:19:12 +00:00
|
|
|
# Contributing to Poindexter
|
|
|
|
|
|
|
|
|
|
Thanks for your interest in contributing! This document describes how to build, test, lint, and propose changes.
|
|
|
|
|
|
|
|
|
|
## Getting started
|
|
|
|
|
|
2025-11-04 00:38:18 +00:00
|
|
|
- Go 1.23+
|
2025-11-03 18:19:12 +00:00
|
|
|
- `git clone https://github.com/Snider/Poindexter`
|
|
|
|
|
- `cd Poindexter`
|
|
|
|
|
|
|
|
|
|
## Build and test
|
|
|
|
|
|
|
|
|
|
- Tidy deps: `go mod tidy`
|
|
|
|
|
- Build: `go build ./...`
|
|
|
|
|
- Run tests: `go test ./...`
|
|
|
|
|
- Run race tests: `go test -race ./...`
|
|
|
|
|
- Run examples: `go run ./examples/...`
|
|
|
|
|
|
|
|
|
|
## Lint and vet
|
|
|
|
|
|
|
|
|
|
We use golangci-lint in CI. To run locally:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
# Install once
|
|
|
|
|
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
|
|
|
|
|
|
|
|
|
|
# Run
|
|
|
|
|
golangci-lint run
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Also run `go vet ./...` periodically.
|
|
|
|
|
|
|
|
|
|
## Fuzzing and benchmarks
|
|
|
|
|
|
|
|
|
|
- Fuzz (manually): `go test -run=NONE -fuzz=Fuzz -fuzztime=10s`
|
|
|
|
|
- Benchmarks: `go test -bench=. -benchmem`
|
|
|
|
|
|
|
|
|
|
## Pull requests
|
|
|
|
|
|
|
|
|
|
- Create a branch from `main`.
|
|
|
|
|
- Ensure `go mod tidy` produces no changes.
|
|
|
|
|
- Ensure `go test -race ./...` passes.
|
|
|
|
|
- Ensure `golangci-lint run` has no issues.
|
|
|
|
|
- Update CHANGELOG.md (Unreleased section) with a brief summary.
|
|
|
|
|
|
|
|
|
|
## Coding style
|
|
|
|
|
|
|
|
|
|
- Follow standard Go formatting and idioms.
|
|
|
|
|
- Public APIs must have doc comments starting with the identifier name and should be concise.
|
|
|
|
|
- Avoid breaking changes in minor versions; use SemVer.
|
|
|
|
|
|
|
|
|
|
## Release process
|
|
|
|
|
|
2025-11-03 18:58:44 +00:00
|
|
|
We use GoReleaser to publish GitHub Releases when a semver tag is pushed.
|
|
|
|
|
|
|
|
|
|
Steps for maintainers:
|
|
|
|
|
- Ensure `CHANGELOG.md` has an entry for the version and links are updated at the bottom (Unreleased compares from latest tag).
|
|
|
|
|
- Ensure `poindexter.Version()` returns the new version and tests pass.
|
|
|
|
|
- Merge all changes to `main` and wait for CI to be green.
|
|
|
|
|
- Create an annotated tag and push:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
VERSION=vX.Y.Z
|
|
|
|
|
git tag -a "$VERSION" -m "Release $VERSION"
|
|
|
|
|
git push origin "$VERSION"
|
|
|
|
|
```
|
|
|
|
|
- GitHub Actions workflow `.github/workflows/release.yml` will run tests and GoReleaser to publish the Release.
|
|
|
|
|
- Verify the release notes and badges (README release badge updates automatically).
|
|
|
|
|
|
|
|
|
|
Optional:
|
|
|
|
|
- Dry-run locally without publishing:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
goreleaser release --skip=publish --clean
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
See `RELEASE.md` for more details.
|
2025-11-03 18:19:12 +00:00
|
|
|
|
|
|
|
|
Thanks for helping improve Poindexter!
|