chore: trim spaces for x-caddy, diff Caddy configs when comparing service specs

This commit is contained in:
Pasha Sviderski
2025-08-13 19:27:40 +10:00
parent 12c07812a2
commit dd7bc6c982
5 changed files with 101 additions and 11 deletions
+13
View File
@@ -1,8 +1,21 @@
package api
import "strings"
// CaddySpec is the Caddy reverse proxy configuration for a service.
type CaddySpec struct {
// Config contains the Caddy config (Caddyfile) content. It must not conflict with the Caddy configs
// of other services.
Config string
}
func (c *CaddySpec) Equals(other *CaddySpec) bool {
if c == nil {
return other == nil || strings.TrimSpace(other.Config) == ""
}
if other == nil {
return strings.TrimSpace(c.Config) == ""
}
return strings.TrimSpace(c.Config) == strings.TrimSpace(other.Config)
}
+3 -1
View File
@@ -84,9 +84,11 @@ func transformServicesCaddyExtension(project *types.Project) (*types.Project, er
}
caddy.Config = string(content)
service.Extensions[CaddyExtensionKey] = caddy
}
caddy.Config = strings.TrimSpace(caddy.Config)
service.Extensions[CaddyExtensionKey] = caddy
return service, nil
})
}
+36 -2
View File
@@ -27,8 +27,25 @@ services:
`,
wantConfig: `example.com {
reverse_proxy web:80
}`,
},
{
name: "x-caddy as string with extra spaces",
composeYAML: `
services:
web:
image: nginx
x-caddy: |+
example.com {
reverse_proxy web:80
}
`,
wantConfig: `example.com {
reverse_proxy web:80
}`,
},
{
name: "x-caddy as object with config field",
@@ -44,8 +61,26 @@ services:
`,
wantConfig: `example.com {
reverse_proxy web:80
}`,
},
{
name: "x-caddy as object with config field and extra spaces",
composeYAML: `
services:
web:
image: nginx
x-caddy:
config: |+
example.com {
reverse_proxy web:80
}
`,
wantConfig: `example.com {
reverse_proxy web:80
}`,
},
{
name: "x-caddy with path to Caddyfile",
@@ -57,8 +92,7 @@ services:
`,
wantConfig: `test.example.com {
reverse_proxy test:8000
}
`,
}`,
},
{
name: "x-caddy with empty object",
+41 -4
View File
@@ -264,8 +264,7 @@ func TestServiceSpecFromCompose(t *testing.T) {
Caddy: &api.CaddySpec{
Config: `test-caddy-config.example.com {
reverse_proxy {{ upstreams 80 }}
}
`,
}`,
},
},
},
@@ -315,8 +314,27 @@ services:
want: &api.CaddySpec{
Config: `example.com {
reverse_proxy web:80
}`,
},
},
{
name: "x-caddy as string with extra spaces",
composeYAML: `
services:
web:
image: nginx
x-caddy: |+
example.com {
reverse_proxy web:80
}
`,
want: &api.CaddySpec{
Config: `example.com {
reverse_proxy web:80
}`,
},
},
{
@@ -334,8 +352,28 @@ services:
want: &api.CaddySpec{
Config: `example.com {
reverse_proxy web:80
}`,
},
},
{
name: "x-caddy as object with config field and extra spaces",
composeYAML: `
services:
web:
image: nginx
x-caddy:
config: |+
example.com {
reverse_proxy web:80
}
`,
want: &api.CaddySpec{
Config: `example.com {
reverse_proxy web:80
}`,
},
},
{
@@ -349,8 +387,7 @@ services:
want: &api.CaddySpec{
Config: `test.example.com {
reverse_proxy test:8000
}
`,
}`,
},
},
{
+4
View File
@@ -72,6 +72,10 @@ func EvalContainerSpecChange(current api.ServiceSpec, new api.ServiceSpec) Conta
}
// Check if any mutable properties changed.
if !current.Caddy.Equals(new.Caddy) {
return ContainerNeedsRecreate
}
if !reflect.DeepEqual(current.Container.Resources, newResources) {
return ContainerNeedsUpdate
}