From 46c5d6b3abb699ea52dd6eba6403d39ac5e7977d Mon Sep 17 00:00:00 2001 From: eding Date: Thu, 30 Jul 2026 00:49:09 +0200 Subject: [PATCH] feat: configure Tekton catalog source --- internal/bootstrap/bootstrap.go | 2 ++ internal/bootstrap/bootstrap_test.go | 6 +++--- internal/config/config.go | 8 +++++++- internal/config/config_test.go | 3 +++ internal/config/types.go | 14 ++++++++------ 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/internal/bootstrap/bootstrap.go b/internal/bootstrap/bootstrap.go index f7f1be7..5a710d2 100644 --- a/internal/bootstrap/bootstrap.go +++ b/internal/bootstrap/bootstrap.go @@ -241,6 +241,8 @@ func renderDeliveryConfig(dir string, cfg config.Config) error { "${FORGEJO_BASE_URL}", cfg.Git.BaseURL, "${WEBHOOK_HOSTNAME}", cfg.Delivery.WebhookHostname, "${WEBHOOK_PATH}", cfg.Delivery.WebhookPath, + "${TEKTON_CATALOG_REPO_URL}", cfg.Templates.TektonCatalogRepoURL, + "${TEKTON_CATALOG_REPO_REF}", cfg.Templates.TektonCatalogRepoRef, ) return filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { if err != nil || info.IsDir() { diff --git a/internal/bootstrap/bootstrap_test.go b/internal/bootstrap/bootstrap_test.go index 0c12af3..7afc789 100644 --- a/internal/bootstrap/bootstrap_test.go +++ b/internal/bootstrap/bootstrap_test.go @@ -35,10 +35,10 @@ func TestRenderCiliumConfig(t *testing.T) { func TestRenderDeliveryConfig(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "webhook.yaml") - if err := os.WriteFile(path, []byte("host: ${WEBHOOK_HOSTNAME}\npath: ${WEBHOOK_PATH}\n"), 0644); err != nil { + if err := os.WriteFile(path, []byte("host: ${WEBHOOK_HOSTNAME}\npath: ${WEBHOOK_PATH}\ncatalog: ${TEKTON_CATALOG_REPO_URL}\nref: ${TEKTON_CATALOG_REPO_REF}\n"), 0644); err != nil { t.Fatal(err) } - cfg := config.Config{Delivery: config.DeliveryConfig{WebhookHostname: "tekton.example.test", WebhookPath: "/hooks/forgejo"}} + cfg := config.Config{Delivery: config.DeliveryConfig{WebhookHostname: "tekton.example.test", WebhookPath: "/hooks/forgejo"}, Templates: config.TemplateConfig{TektonCatalogRepoURL: "https://catalog.example.test/tekton.git", TektonCatalogRepoRef: "release"}} if err := renderDeliveryConfig(dir, cfg); err != nil { t.Fatal(err) } @@ -46,7 +46,7 @@ func TestRenderDeliveryConfig(t *testing.T) { if err != nil { t.Fatal(err) } - if strings.Contains(string(content), "${") || !strings.Contains(string(content), "/hooks/forgejo") { + if strings.Contains(string(content), "${") || !strings.Contains(string(content), "/hooks/forgejo") || !strings.Contains(string(content), "https://catalog.example.test/tekton.git") || !strings.Contains(string(content), "ref: release") { t.Fatalf("delivery configuration was not rendered: %s", content) } } diff --git a/internal/config/config.go b/internal/config/config.go index 5077e55..0d0a656 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -109,6 +109,12 @@ func applyDefaults(cfg *Config) { if cfg.Templates.ManifestsRepoRef == "" { cfg.Templates.ManifestsRepoRef = "main" } + if cfg.Templates.TektonCatalogRepoURL == "" { + cfg.Templates.TektonCatalogRepoURL = "https://github.com/Pingu-Studio/tekton-pipelines.git" + } + if cfg.Templates.TektonCatalogRepoRef == "" { + cfg.Templates.TektonCatalogRepoRef = "main" + } if cfg.Cilium.TrafficInterface == "" { cfg.Cilium.TrafficInterface = "eth1" } @@ -205,7 +211,7 @@ func Validate(cfg Config) error { if strings.ContainsAny(cfg.Delivery.WebhookHostname, "/:@?#") || !strings.HasPrefix(cfg.Delivery.WebhookPath, "/") || strings.ContainsAny(cfg.Delivery.WebhookPath, "?#") { return errors.New("delivery webhookHostname must be a hostname and webhookPath must be an absolute path") } - if cfg.Templates.TalosRepoURL == "" || cfg.Templates.TalosRepoRef == "" || cfg.Templates.CICDRepoURL == "" || cfg.Templates.CICDRepoRef == "" || cfg.Templates.ManifestsRepoURL == "" || cfg.Templates.ManifestsRepoRef == "" { + if cfg.Templates.TalosRepoURL == "" || cfg.Templates.TalosRepoRef == "" || cfg.Templates.CICDRepoURL == "" || cfg.Templates.CICDRepoRef == "" || cfg.Templates.ManifestsRepoURL == "" || cfg.Templates.ManifestsRepoRef == "" || cfg.Templates.TektonCatalogRepoURL == "" || cfg.Templates.TektonCatalogRepoRef == "" { return errors.New("all template repository URLs and refs are required") } if cfg.Talos.RepoDirName == "" { diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 70834d7..f427cb6 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -35,6 +35,9 @@ func TestResolveDefaultsWebhookEndpoint(t *testing.T) { if cfg.Delivery.WebhookURL() != "https://tekton.example.test/" { t.Fatalf("WebhookURL() = %q", cfg.Delivery.WebhookURL()) } + if cfg.Templates.TektonCatalogRepoURL != "https://github.com/Pingu-Studio/tekton-pipelines.git" || cfg.Templates.TektonCatalogRepoRef != "main" { + t.Fatalf("Tekton catalog defaults = %q@%q", cfg.Templates.TektonCatalogRepoURL, cfg.Templates.TektonCatalogRepoRef) + } } func TestLoadRejectsUnknownFields(t *testing.T) { diff --git a/internal/config/types.go b/internal/config/types.go index ee14c2f..34aae8c 100644 --- a/internal/config/types.go +++ b/internal/config/types.go @@ -70,12 +70,14 @@ type FluxConfig struct { } type TemplateConfig struct { - TalosRepoURL string `yaml:"talosRepoUrl"` - TalosRepoRef string `yaml:"talosRepoRef"` - CICDRepoURL string `yaml:"cicdRepoUrl"` - CICDRepoRef string `yaml:"cicdRepoRef"` - ManifestsRepoURL string `yaml:"manifestsRepoUrl"` - ManifestsRepoRef string `yaml:"manifestsRepoRef"` + TalosRepoURL string `yaml:"talosRepoUrl"` + TalosRepoRef string `yaml:"talosRepoRef"` + CICDRepoURL string `yaml:"cicdRepoUrl"` + CICDRepoRef string `yaml:"cicdRepoRef"` + ManifestsRepoURL string `yaml:"manifestsRepoUrl"` + ManifestsRepoRef string `yaml:"manifestsRepoRef"` + TektonCatalogRepoURL string `yaml:"tektonCatalogRepoUrl"` + TektonCatalogRepoRef string `yaml:"tektonCatalogRepoRef"` } type CiliumConfig struct { -- 2.43.7