Thanks for your interest in improving queue. This document is the contract for contributions.
git clone https://github.com/adrianbrad/queue.git
cd queue
go test ./...Go 1.20+ is required.
- Bugs: https://github.com/adrianbrad/queue/issues
- Security issues: see SECURITY.md — do not file public issues for security problems.
- Feature ideas: open an issue first to discuss scope before opening a PR.
- Fork, then branch from
main. Use conventional-branch prefixes:feature/,bugfix/,chore/,hotfix/. - Make changes on the branch. Keep PRs focused — one logical change per PR.
- Ensure every local gate passes before pushing:
make lint # golangci-lint --fix; must be clean make test-coverage # unit + race tests; fails if coverage != 100%
- Open a PR against
main. - CI must be green:
Lint,Test,Analyze(CodeQL),gitleaks,grype.
- Style:
gofumpt+goimports(applied bymake lint --fix). - Lint config:
.golangci.yml. New code must satisfy every enabled linter. - Tests: every exported behavior must be covered. Coverage gate is 100% of statements; PRs that drop coverage will fail CI.
- Concurrency: queue implementations must remain safe under
-race. Add a regression test when touching locking.
Follow Conventional Commits:
<type>(<scope>): <summary>
<optional body explaining the *why*>
Types used here: feat, fix, perf, refactor, test, docs, style, build, chore.
- A CODEOWNER approval is required (see
.github/CODEOWNERS). - Status checks must pass; the branch must be up to date with
main. - Discussions are resolved before merge; commits are squash-merged.
Tagged releases follow SemVer. Maintainers bump the version by tagging vX.Y.Z on main; CHANGELOG.md is updated in the same commit.