Compare commits
2 Commits
456fa36854
...
bc637b3a77
| Author | SHA1 | Date | |
|---|---|---|---|
| bc637b3a77 | |||
| 4b8a092201 |
@ -39,7 +39,13 @@ tools.versions Pinned tool versions (sourced by Makefile and pre-push
|
|||||||
- **Module imports** — always use the full module path `gitea.djmil.dev/go/template/...`
|
- **Module imports** — always use the full module path `gitea.djmil.dev/go/template/...`
|
||||||
- **Packages** — keep `cmd/` thin (wiring only); business logic belongs in `internal/`
|
- **Packages** — keep `cmd/` thin (wiring only); business logic belongs in `internal/`
|
||||||
- **Types** — expose concrete types from constructors (`New(...) *Type`); never wrap in an interface at the implementation site. Consumers define their own interfaces if they need one (Go's implicit satisfaction makes this free)
|
- **Types** — expose concrete types from constructors (`New(...) *Type`); never wrap in an interface at the implementation site. Consumers define their own interfaces if they need one (Go's implicit satisfaction makes this free)
|
||||||
- **Errors** — wrap with `fmt.Errorf("context: %w", err)`; never swallow errors silently
|
- **Errors** — `pkg/result` is the default error-handling mechanism for all code in this repo, including public APIs:
|
||||||
|
- functions return `result.Expect[T]` instead of `(T, error)`
|
||||||
|
- callers unwrap with `.Expect("context")` (panics with annotated error + stack trace) or `.Must()` (panics with raw error)
|
||||||
|
- top-level entry points (e.g. `cmd/` functions, HTTP handlers) defer `result.Catch(&err)` to convert any result panic into a normal Go error; genuine runtime panics (nil-deref, etc.) are re-panicked
|
||||||
|
- bridge existing `(T, error)` stdlib/third-party calls with `result.Of(...)`: `result.Of(os.ReadFile("cfg.json")).Expect("read config")`
|
||||||
|
- use `result.StackTrace(err)` to retrieve the capture-site stack from a caught error
|
||||||
|
- still use `fmt.Errorf("context: %w", err)` when wrapping errors *before* constructing a `result.Fail`
|
||||||
- **Logging** — use `log.WithField("key", val)` for structured context; never `fmt.Sprintf` in log messages; `log/slog` is the backend
|
- **Logging** — use `log.WithField("key", val)` for structured context; never `fmt.Sprintf` in log messages; `log/slog` is the backend
|
||||||
- **Config** — all configuration through `internal/config` (flag-parsed); no hard-coded values in logic packages
|
- **Config** — all configuration through `internal/config` (flag-parsed); no hard-coded values in logic packages
|
||||||
|
|
||||||
|
|||||||
7
Makefile
7
Makefile
@ -1,4 +1,4 @@
|
|||||||
.PHONY: help init setup build run test test-race lint lint-fix security clean
|
.PHONY: help init setup build run test test-race lint lint-fix security docs clean
|
||||||
|
|
||||||
include tools.versions
|
include tools.versions
|
||||||
|
|
||||||
@ -30,6 +30,7 @@ tools: ## Install tool binaries to GOPATH/bin (versions from tools.versions)
|
|||||||
go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION)
|
go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION)
|
||||||
go install github.com/securego/gosec/v2/cmd/gosec@$(GOSEC_VERSION)
|
go install github.com/securego/gosec/v2/cmd/gosec@$(GOSEC_VERSION)
|
||||||
go install golang.org/x/vuln/cmd/govulncheck@$(GOVULNCHECK_VERSION)
|
go install golang.org/x/vuln/cmd/govulncheck@$(GOVULNCHECK_VERSION)
|
||||||
|
go install golang.org/x/pkgsite/cmd/pkgsite@$(PKGSITE_VERSION)
|
||||||
|
|
||||||
# ── Build ──────────────────────────────────────────────────────────────────────
|
# ── Build ──────────────────────────────────────────────────────────────────────
|
||||||
build: ## Compile the binary to ./bin/
|
build: ## Compile the binary to ./bin/
|
||||||
@ -64,6 +65,10 @@ security: ## Run gosec + govulncheck
|
|||||||
@echo "--- govulncheck ---"
|
@echo "--- govulncheck ---"
|
||||||
go run golang.org/x/vuln/cmd/govulncheck@$(GOVULNCHECK_VERSION) ./...
|
go run golang.org/x/vuln/cmd/govulncheck@$(GOVULNCHECK_VERSION) ./...
|
||||||
|
|
||||||
|
# ── Docs ───────────────────────────────────────────────────────────────────────
|
||||||
|
docs: ## Serve package documentation locally via pkgsite (http://localhost:8080)
|
||||||
|
go run golang.org/x/pkgsite/cmd/pkgsite@$(PKGSITE_VERSION) -open .
|
||||||
|
|
||||||
# ── Release ────────────────────────────────────────────────────────────────────
|
# ── Release ────────────────────────────────────────────────────────────────────
|
||||||
release: ## List releases, or tag+push a new one (usage: make release VERSION=v0.1.0)
|
release: ## List releases, or tag+push a new one (usage: make release VERSION=v0.1.0)
|
||||||
ifdef VERSION
|
ifdef VERSION
|
||||||
|
|||||||
@ -2,3 +2,4 @@ DELVE_VERSION=v1.26.1
|
|||||||
GOLANGCI_LINT_VERSION=v1.64.8
|
GOLANGCI_LINT_VERSION=v1.64.8
|
||||||
GOSEC_VERSION=v2.24.7
|
GOSEC_VERSION=v2.24.7
|
||||||
GOVULNCHECK_VERSION=v1.1.4
|
GOVULNCHECK_VERSION=v1.1.4
|
||||||
|
PKGSITE_VERSION=latest
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user