F-02: Config loader (bookshelf-qqz.2) #2

Merged
zombor merged 1 commit from bd-bookshelf-qqz.2 into main 2026-05-20 17:08:57 +00:00
Owner

Summary

  • Adds internal/config package built on github.com/peterbourgon/ff/v4, parsing a stdlib flag.FlagSet with env vars (BOOKSHELF_ prefix) and an optional key=value config file.
  • Config documents every field; Load resolves precedence (flags > env > file > defaults), validates LogLevel/LogFormat, normalizes to lower-case, and mirrors MetricsAddr to HTTPAddr when unset.
  • Pulls in Ginkgo v2 + Gomega and adds config_suite_test.go plus full spec coverage.

Test plan

  • go vet ./internal/config/...
  • go test -race -cover ./internal/config/... (100.0% coverage)
  • Defaults match spec (:8080, ./data, info, json)
  • Flag overrides env, env overrides file, file overrides defaults
  • Invalid --log-level / --log-format rejected; unknown flag returns parse error
  • Missing config file is tolerated

Closes bead bookshelf-qqz.2 on merge.

## Summary - Adds `internal/config` package built on `github.com/peterbourgon/ff/v4`, parsing a stdlib `flag.FlagSet` with env vars (`BOOKSHELF_` prefix) and an optional key=value config file. - `Config` documents every field; `Load` resolves precedence (flags > env > file > defaults), validates `LogLevel`/`LogFormat`, normalizes to lower-case, and mirrors `MetricsAddr` to `HTTPAddr` when unset. - Pulls in Ginkgo v2 + Gomega and adds `config_suite_test.go` plus full spec coverage. ## Test plan - [x] `go vet ./internal/config/...` - [x] `go test -race -cover ./internal/config/...` (100.0% coverage) - [x] Defaults match spec (`:8080`, `./data`, `info`, `json`) - [x] Flag overrides env, env overrides file, file overrides defaults - [x] Invalid `--log-level` / `--log-format` rejected; unknown flag returns parse error - [x] Missing config file is tolerated Closes bead bookshelf-qqz.2 on merge.
Adds internal/config package implementing flag/env/file resolution with
precedence: flags > BOOKSHELF_-prefixed env > optional key=value file >
defaults. Validates LogLevel/LogFormat and mirrors MetricsAddr to HTTPAddr
when unset. Ginkgo specs cover defaults, every precedence path, validation
errors, and case normalization at 100% coverage.
zombor merged commit 6305c410d0 into main 2026-05-20 17:08:57 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
zombor/pergamum!2
No description provided.