Thank you for your interest in contributing to DNSWeaver!
- Go 1.24 or later
- Docker (for testing)
- Access to a Docker Swarm cluster (optional, for integration testing)
-
Clone the repository:
git clone https://github.com/maxfield-allison/dnsweaver.git cd dnsweaver -
Install dependencies:
go mod download
-
Build:
go build -o dnsweaver ./cmd/dnsweaver
-
Run tests:
go test -v ./...
We follow GitFlow:
| Branch | Purpose |
|---|---|
main |
Stable releases only (tagged) |
develop |
Integration branch |
feature/* |
New features |
bugfix/* |
Bug fixes |
hotfix/* |
Urgent production fixes |
feature/[issue-number]-short-description
bugfix/[issue-number]-short-description
hotfix/[issue-number]-short-description
Example: feature/21-multi-provider-design
We use Conventional Commits:
type(scope): description
[optional body]
[optional footer]
Types:
feat: New featurefix: Bug fixdocs: Documentation onlystyle: Formatting, no code changerefactor: Code change that neither fixes a bug nor adds a featureperf: Performance improvementtest: Adding testsbuild: Build system or dependenciesci: CI/CD changeschore: Other changes
Examples:
feat(provider): add Cloudflare DNS provider
fix(reconciler): handle empty hostname list
docs: update configuration reference
- Use
gofmtfor formatting - Use
golangci-lintfor linting - Follow Effective Go
- Add comments for exported functions, types, and packages
- Write table-driven tests
- Test behavior, not implementation
- Aim for meaningful coverage, not 100%
- Mock external dependencies (Docker, DNS APIs)
- Create a feature branch from
develop - Make your changes with tests
- Ensure CI passes
- Create a merge request to
develop - Address review feedback
- Squash and merge
Open an issue or reach out to the maintainers.