Contribuire
Leggi prima Architettura: mostra dove si trovano parser, guard, enrich e blocklist nel flusso dei dati. Per le firme dei pacchetti, consulta API / Pacchetti.
Configurazione
git clone https://github.com/lenny-ts/caddy-analyzer.git && cd caddy-analyzer
go version # 1.25+
Test e lint — comandi esatti (come in CI)
# full suite (what CI runs)
go vet ./...
go test -race -v ./...
go test -race -coverprofile=coverage.out ./... && go tool cover -func=coverage.out | tail
# coverage gate is 55% (CI enforces <55 → error)
# fmt
gofmt -l .
# should be empty; fix with:
gofmt -w .
# lint (golangci-lint v2, 17 linters, see .golangci.yml)
golangci-lint run
# security / vuln
govulncheck ./...
gosec -exclude G204,G302,G304,G401,G501,G505 ./...
# gitleaks (secrets)
gitleaks detect --source .
Testa solo il modulo modificato
Riscontro piu rapido: esegui il pacchetto, non l'intera suite:
go test -race ./pkg/analysis -run TestDetector -count=1
go test -race ./pkg/guard -run TestGuard -count=1
go test -race ./pkg/enrich -count=1
go test -race ./pkg/blocklist -count=1
go test -race ./cmd -run TestResolveSources -count=1
Oppure un singolo file (quando ne modifichi uno):
go test -race ./pkg/parser -run TestParse -count=1 -v
Dove aggiungere elementi
| Cosa | Dove | Nota |
|---|---|---|
| Nuova categoria di rilevamento | pkg/analysis/detect.go | Aggiungi pattern + ID MITRE, aggiungi il test in detect_test.go, assicurati che TestPatternUniqueness passi |
| Feed blocklist | pkg/blocklist/blocklist.go + test | Implementa fetch/parse di Source, rispetta cacheTTL 7d |
| Backend firewall | pkg/guard/firewall/ | Implementa l'interfaccia Backend, copri Detect() |
| Flag CLI | cmd/root.go + cmd/tuning.go | Persistente oppure solo root, gestisci applyTuning |
| Formato di output | pkg/output/* | Table/JSON/CSV/HTML — mantieni defang e csvSafe |
Convenzione dei commit
Riga singola, imperativo, 35–62 caratteri. Nessun corpo, nessun prefisso type:, nessun prefisso di versione.
Add GeoIP filter for ASN
Fix guard state persistence across restarts
Update blocklist cache TTL handling
Non valido: feat: add ..., v0.6.1: fix o corpo su piu righe. Consulta AGENTS.md. Il rilascio avviene tramite tag v* → GoReleaser + Syft + cosign (gestisci tu merge + tag + push).
Checklist PR
go vet ./... && go test -race ./... && golangci-lint runcompletati con successo- Test per il nuovo codice, documentazione aggiornata con
node tools/build-docs.js && bash tools/minify.shse hai modificatodocs/src/ - Messaggio di commit di 35–62 caratteri, imperativo
Vedi anche
Architettura — flusso dei dati e mappa dei pacchetti. API / Pacchetti — importazione e uso per pacchetto.