Problem
The supported-provider list is written out by hand in at least three places that must agree:
README.md — the provider/credentials table (around line 864)
README.md — the --acme-dns-provider row in the flag table (around line 908), which lists the names inline
internal/cmd/run.go:67 — the flag's help string, which lists them again: "DNS provider for DNS-01 challenges (cloudflare, route53, digitalocean, gcloud, namecheap, godaddy, hetzner, vultr, auto)"
Adding a provider today means remembering all three. After this epic adds twelve, the inline lists become unreadable and will drift.
Proposed fix
- Build the
--acme-dns-provider help text from the registry at init: "DNS provider for DNS-01 challenges (one of: " + strings.Join(providers.Names(), ", ") + ", auto)", or — if the list gets long enough to bloat --help — point at kamal-proxy acme providers and add that subcommand to print the table.
- Generate the README table from the registry with a
go:generate step plus a test that fails when the committed table does not match what the registry produces. A generator with no drift check is a generator nobody reruns.
Acceptance criteria
- GIVEN a provider added to the registry WHEN the README table is not regenerated THEN a test fails naming the missing row
- GIVEN
kamal-proxy run --help THEN the provider list shown matches the registry exactly, with no hand-maintained copy in the source
- GIVEN the table is regenerated THEN required and optional env vars come from the registry entry, not from prose
Notes
Depends on the registry refactor. Worth doing before the two provider batches land, so those PRs get the drift check for free rather than hand-editing a 20-row table twice.
Problem
The supported-provider list is written out by hand in at least three places that must agree:
README.md— the provider/credentials table (around line 864)README.md— the--acme-dns-providerrow in the flag table (around line 908), which lists the names inlineinternal/cmd/run.go:67— the flag's help string, which lists them again:"DNS provider for DNS-01 challenges (cloudflare, route53, digitalocean, gcloud, namecheap, godaddy, hetzner, vultr, auto)"Adding a provider today means remembering all three. After this epic adds twelve, the inline lists become unreadable and will drift.
Proposed fix
--acme-dns-providerhelp text from the registry at init:"DNS provider for DNS-01 challenges (one of: " + strings.Join(providers.Names(), ", ") + ", auto)", or — if the list gets long enough to bloat--help— point atkamal-proxy acme providersand add that subcommand to print the table.go:generatestep plus a test that fails when the committed table does not match what the registry produces. A generator with no drift check is a generator nobody reruns.Acceptance criteria
kamal-proxy run --helpTHEN the provider list shown matches the registry exactly, with no hand-maintained copy in the sourceNotes
Depends on the registry refactor. Worth doing before the two provider batches land, so those PRs get the drift check for free rather than hand-editing a 20-row table twice.