Thank you for considering a contribution to godeploy-platform.
- Go: version pinned in
go.mod(use the same family as CI when possible). - Docker: local Engine for
builder,scheduler, and observability integrations. - Git: required for the runtime pipeline and for clones in integration tests.
- Optional tools:
golangci-lint,govulncheck,gosec(aligned with theMakefile).
- Follow
gofmt/ idiomatic Go: Effective Go and Go Code Review Comments. - Documentation comments on exported symbols: full sentence starting with the name; use
[Type]links within the same module when helpful. - Error messages and operator-facing logs are in English, consistent with the codebase.
make validateClosest gate to CI (includes coverage floor on -short tests):
make validate-fullMinimum equivalent:
make fmt
make vet
make test-short
make build
make lintmake test-race: runsgo test -race ./...(on Windows you may needCGO_ENABLED=1; Linux CI uses-race).make test-cover-check:-shorttests with a coverage profile; fails if total coverage is belowCOVER_MIN(default 29%; override withmake test-cover-check COVER_MIN=30).- Git hooks: after clone,
make install-hooksuses.githooks/pre-commit. Alternative: pre-commit with.pre-commit-config.yamlat the repo root.
On Windows, if antivirus blocks *.test.exe under %TEMP%\go-build*, tests in internal/detector may be skipped by build tag; use WSL, Linux CI, or go test -tags=force_detector_tests ./internal/detector/ after Defender exclusions (see README).
Prefer type(optional scope): description (imperative, short first line):
| Type | Use |
|---|---|
feat |
New feature |
fix |
Bug fix |
refactor |
Refactor without behaviour change |
docs |
Documentation only |
test |
Tests |
chore |
Maintenance, dependencies, tooling |
ci |
CI pipelines and automation |
perf |
Performance |
security |
Security fixes |
Examples: fix(proxy): tighten dial timeout, docs(readme): sync Makefile targets.
- Branches (repository): on
main, use branch protection with required review and checks for the main gate (lint,verifyin theciworkflow). Thevulncheckjob (govulncheck) runs in parallel for visibility; it may be non-blocking while a dependency lacks an OSV fix tag on the module. Avoid shared force-push on branches others reuse. - Branches: prefer descriptive names, e.g.
fix/proxy-timeoutordocs/readme-api. - Commits: clear imperative messages (see table above); avoid huge commits that are hard to review.
- Description: explain the problem, solution, and regression risk; reference issues when they exist.
- Review: reply to comments; keep the PR focused on one goal.
- Tags
v*(e.g.v0.2.0) trigger the GitHub Actionsreleaseworkflow, which uses GoReleaser (.goreleaser.yaml) to publish artifacts per OS/architecture (bundle withgodeployd,godeploy-tui, andgodeploy-logtail, plus checksums). - Validate config locally:
goreleaser check. Snapshot build without publishing:goreleaser release --snapshot --clean(useful before tagging).
- Integration tests gated on
testing.Short()and environments with Docker. - Small, testable operational security improvements (headers, limits, logging).
- Documentation (
README,docs/, godoc comments) and reproducible examples.
Participation is governed by the Code of Conduct.