fix: propagate delivery template updates #5

Merged
eding merged 1 commit from fix/copy-delivery-bases into main 2026-07-31 19:34:04 +02:00
2 changed files with 52 additions and 27 deletions

View file

@ -125,10 +125,7 @@ func (r Runner) Run() error {
if err := renderCiliumConfig(filepath.Join(dir, "base", "cilium-config"), r.Config); err != nil { if err := renderCiliumConfig(filepath.Join(dir, "base", "cilium-config"), r.Config); err != nil {
return err return err
} }
if err := copyAndRenderTektonBase(cicdTemplateDir, dir, r.Config); err != nil { if err := copyAndRenderDeliveryBases(cicdTemplateDir, dir, r.Config); err != nil {
return err
}
if err := renderDeliveryConfig(filepath.Join(dir, "base", "tekton-triggers"), r.Config); err != nil {
return err return err
} }
if err := writeDemocraticCSISecret(filepath.Join(dir, "base", "democratic-csi", "secret.sops.yaml"), r.Config.DemocraticCSI, r.Config.SOPS.AgeKeyPath); err != nil { if err := writeDemocraticCSISecret(filepath.Join(dir, "base", "democratic-csi", "secret.sops.yaml"), r.Config.DemocraticCSI, r.Config.SOPS.AgeKeyPath); err != nil {
@ -256,12 +253,21 @@ func renderDeliveryConfig(dir string, cfg config.Config) error {
}) })
} }
func copyAndRenderTektonBase(templateDir, repoDir string, cfg config.Config) error { func copyAndRenderDeliveryBases(templateDir, repoDir string, cfg config.Config) error {
tektonDir := filepath.Join(repoDir, "base", "tekton") bases := []string{"gateway", "tekton", "tekton-triggers"}
if err := copyDir(filepath.Join(templateDir, "base", "tekton"), tektonDir, true); err != nil { for _, base := range bases {
return err baseDir := filepath.Join(repoDir, "base", base)
if err := copyDir(filepath.Join(templateDir, "base", base), baseDir, true); err != nil {
return err
}
} }
return renderDeliveryConfig(tektonDir, cfg) for _, base := range bases {
baseDir := filepath.Join(repoDir, "base", base)
if err := renderDeliveryConfig(baseDir, cfg); err != nil {
return err
}
}
return nil
} }
func writeDemocraticCSISecret(path string, csi config.DemocraticCSIConfig, ageKeyPath string) error { func writeDemocraticCSISecret(path string, csi config.DemocraticCSIConfig, ageKeyPath string) error {

View file

@ -51,34 +51,53 @@ func TestRenderDeliveryConfig(t *testing.T) {
} }
} }
func TestCopyAndRenderTektonBaseOverwritesExistingMigrationOutput(t *testing.T) { func TestCopyAndRenderDeliveryBasesOverwritesExistingMigrationOutput(t *testing.T) {
templateDir := t.TempDir() templateDir := t.TempDir()
repoDir := t.TempDir() repoDir := t.TempDir()
templateCatalog := filepath.Join(templateDir, "base", "tekton", "catalog-source.yaml") files := []struct {
outputCatalog := filepath.Join(repoDir, "base", "tekton", "catalog-source.yaml") base, name, template, want string
if err := os.MkdirAll(filepath.Dir(templateCatalog), 0755); err != nil { }{
t.Fatal(err) {"gateway", "route.yaml", "host: ${WEBHOOK_HOSTNAME}\npath: ${WEBHOOK_PATH}\n", "host: tekton.example.test\npath: /hooks/forgejo\n"},
{"tekton", "catalog-source.yaml", "url: ${TEKTON_CATALOG_REPO_URL}\nref: ${TEKTON_CATALOG_REPO_REF}\n", "url: https://catalog.example.test/tekton.git\nref: release\n"},
{"tekton-triggers", "trigger.yaml", "app: ${APP_NAME}\nrepo: ${APP_REPO_URL}\n", "app: demo\nrepo: https://git.example.test/demo.git\n"},
} }
if err := os.MkdirAll(filepath.Dir(outputCatalog), 0755); err != nil { for _, file := range files {
t.Fatal(err) templatePath := filepath.Join(templateDir, "base", file.base, file.name)
outputPath := filepath.Join(repoDir, "base", file.base, file.name)
if err := os.MkdirAll(filepath.Dir(templatePath), 0755); err != nil {
t.Fatal(err)
}
if err := os.MkdirAll(filepath.Dir(outputPath), 0755); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(templatePath, []byte(file.template), 0644); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(outputPath, []byte("stale: output\n"), 0644); err != nil {
t.Fatal(err)
}
} }
if err := os.WriteFile(templateCatalog, []byte("url: ${TEKTON_CATALOG_REPO_URL}\nref: ${TEKTON_CATALOG_REPO_REF}\n"), 0644); err != nil { customGatewayFile := filepath.Join(repoDir, "base", "gateway", "custom.yaml")
t.Fatal(err) if err := os.WriteFile(customGatewayFile, []byte("custom: route\n"), 0644); err != nil {
}
if err := os.WriteFile(outputCatalog, []byte("stale: catalog\n"), 0644); err != nil {
t.Fatal(err) t.Fatal(err)
} }
cfg := config.Config{Templates: config.TemplateConfig{TektonCatalogRepoURL: "https://catalog.example.test/tekton.git", TektonCatalogRepoRef: "release"}} cfg := config.Config{
if err := copyAndRenderTektonBase(templateDir, repoDir, cfg); err != nil { Delivery: config.DeliveryConfig{AppName: "demo", AppRepoURL: "https://git.example.test/demo.git", WebhookHostname: "tekton.example.test", WebhookPath: "/hooks/forgejo"},
Templates: config.TemplateConfig{TektonCatalogRepoURL: "https://catalog.example.test/tekton.git", TektonCatalogRepoRef: "release"},
}
if err := copyAndRenderDeliveryBases(templateDir, repoDir, cfg); err != nil {
t.Fatal(err) t.Fatal(err)
} }
content, err := os.ReadFile(outputCatalog) for _, file := range files {
if err != nil { content, err := os.ReadFile(filepath.Join(repoDir, "base", file.base, file.name))
t.Fatal(err) if err != nil || string(content) != file.want {
t.Fatalf("%s was not copied and rendered: %q, %v", file.base, content, err)
}
} }
if string(content) != "url: https://catalog.example.test/tekton.git\nref: release\n" { content, err := os.ReadFile(customGatewayFile)
t.Fatalf("Tekton catalog source was not copied and rendered: %q", content) if err != nil || string(content) != "custom: route\n" {
t.Fatalf("custom gateway file was not preserved: %q, %v", content, err)
} }
} }