Omit empty fields from bootstrap config output

probod-bootstrap was writing empty strings and stub blocks such as
`esign: {}` into generated YAML. The post-marshal prune pass caused
part of that by stripping empty leaf strings while leaving empty
parent maps behind.

Drop the prune round-trip in WriteConfig and rely on struct-level
omitzero/omitempty tags plus custom IsZero() helpers on probodconfig.
Only include LLM providers when an API key is set, use a nil map for
extra API headers, and extend the dev-config Makefile recipe with the
local dev defaults already documented in .env.example.

Config loading is unchanged: omitted keys still decode to Go zero
values.

Signed-off-by: Ludovic Vielle <ludovic@probo.com>
This commit is contained in:
Ludovic Vielle
2026-07-01 10:15:28 +02:00
parent 2be3e18437
commit e22aaa8b67
17 changed files with 380 additions and 195 deletions

View File

@@ -15,11 +15,19 @@
package probodconfig
type CorsConfig struct {
AllowedOrigins []string `json:"allowed-origins"`
AllowedOrigins []string `json:"allowed-origins,omitzero,omitempty"`
}
func (c CorsConfig) IsZero() bool {
return len(c.AllowedOrigins) == 0
}
type ProxyProtocolConfig struct {
TrustedProxies []string `json:"trusted-proxies"`
TrustedProxies []string `json:"trusted-proxies,omitzero,omitempty"`
}
func (c ProxyProtocolConfig) IsZero() bool {
return len(c.TrustedProxies) == 0
}
type GraphQLConfig struct {
@@ -30,9 +38,9 @@ type GraphQLConfig struct {
}
type APIConfig struct {
Addr string `json:"addr"`
ProxyProtocol ProxyProtocolConfig `json:"proxy-protocol"`
Cors CorsConfig `json:"cors"`
ExtraHeaderFields map[string]string `json:"extra-header-fields"`
GraphQL GraphQLConfig `json:"graphql"`
Addr string `json:"addr,omitempty"`
ProxyProtocol ProxyProtocolConfig `json:"proxy-protocol,omitzero"`
Cors CorsConfig `json:"cors,omitzero"`
ExtraHeaderFields map[string]string `json:"extra-header-fields,omitzero,omitempty"`
GraphQL GraphQLConfig `json:"graphql,omitzero"`
}