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 {
return err
}
if err := copyAndRenderTektonBase(cicdTemplateDir, dir, r.Config); err != nil {
return err
}
if err := renderDeliveryConfig(filepath.Join(dir, "base", "tekton-triggers"), r.Config); err != nil {
if err := copyAndRenderDeliveryBases(cicdTemplateDir, dir, r.Config); err != nil {
return err
}
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 {
tektonDir := filepath.Join(repoDir, "base", "tekton")
if err := copyDir(filepath.Join(templateDir, "base", "tekton"), tektonDir, true); err != nil {
return err
func copyAndRenderDeliveryBases(templateDir, repoDir string, cfg config.Config) error {
bases := []string{"gateway", "tekton", "tekton-triggers"}
for _, base := range bases {
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 {

View file

@ -51,34 +51,53 @@ func TestRenderDeliveryConfig(t *testing.T) {
}
}
func TestCopyAndRenderTektonBaseOverwritesExistingMigrationOutput(t *testing.T) {
func TestCopyAndRenderDeliveryBasesOverwritesExistingMigrationOutput(t *testing.T) {
templateDir := t.TempDir()
repoDir := t.TempDir()
templateCatalog := filepath.Join(templateDir, "base", "tekton", "catalog-source.yaml")
outputCatalog := filepath.Join(repoDir, "base", "tekton", "catalog-source.yaml")
if err := os.MkdirAll(filepath.Dir(templateCatalog), 0755); err != nil {
t.Fatal(err)
files := []struct {
base, name, template, want string
}{
{"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 {
t.Fatal(err)
for _, file := range files {
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 {
t.Fatal(err)
}
if err := os.WriteFile(outputCatalog, []byte("stale: catalog\n"), 0644); err != nil {
customGatewayFile := filepath.Join(repoDir, "base", "gateway", "custom.yaml")
if err := os.WriteFile(customGatewayFile, []byte("custom: route\n"), 0644); err != nil {
t.Fatal(err)
}
cfg := config.Config{Templates: config.TemplateConfig{TektonCatalogRepoURL: "https://catalog.example.test/tekton.git", TektonCatalogRepoRef: "release"}}
if err := copyAndRenderTektonBase(templateDir, repoDir, cfg); err != nil {
cfg := config.Config{
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)
}
content, err := os.ReadFile(outputCatalog)
if err != nil {
t.Fatal(err)
for _, file := range files {
content, err := os.ReadFile(filepath.Join(repoDir, "base", file.base, file.name))
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" {
t.Fatalf("Tekton catalog source was not copied and rendered: %q", content)
content, err := os.ReadFile(customGatewayFile)
if err != nil || string(content) != "custom: route\n" {
t.Fatalf("custom gateway file was not preserved: %q, %v", content, err)
}
}