Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ type ImageUpdaterConfig struct {
GitCommitSignOff bool
DisableKubeEvents bool
GitCreds git.CredsStore
WebhookPort int
EnableWebhook bool
}

Expand Down
37 changes: 25 additions & 12 deletions cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
// newRunCommand implements "run" command
func newRunCommand() *cobra.Command {
var cfg *ImageUpdaterConfig = &ImageUpdaterConfig{}
var webhookCfg *WebhookConfig = &WebhookConfig{}
var once bool
var kubeConfig string
var disableKubernetes bool
Expand Down Expand Up @@ -183,7 +184,7 @@ func newRunCommand() *cobra.Command {

// Start the webhook server if enabled
var webhookServer *webhook.WebhookServer
if cfg.EnableWebhook && cfg.WebhookPort > 0 {
if cfg.EnableWebhook && webhookCfg.Port > 0 {
// Initialize the ArgoCD client for webhook server
var argoClient argocd.ArgoCD
switch cfg.ApplicationsAPIKind {
Expand All @@ -200,30 +201,36 @@ func newRunCommand() *cobra.Command {
handler := webhook.NewWebhookHandler()

// Register supported webhook handlers with default empty secrets
// In production, these would be configured via flags or environment variables
dockerHandler := webhook.NewDockerHubWebhook("")
dockerHandler := webhook.NewDockerHubWebhook(webhookCfg.DockerSecret)
handler.RegisterHandler(dockerHandler)

ghcrHandler := webhook.NewGHCRWebhook("")
ghcrHandler := webhook.NewGHCRWebhook(webhookCfg.GHCRSecret)
handler.RegisterHandler(ghcrHandler)

harborHandler := webhook.NewHarborWebhook("")
harborHandler := webhook.NewHarborWebhook(webhookCfg.HarborSecret)
handler.RegisterHandler(harborHandler)

log.Infof("Starting webhook server on port %d", cfg.WebhookPort)
webhookServer = webhook.NewWebhookServer(cfg.WebhookPort, handler, cfg.KubeClient, argoClient)
quayHandler := webhook.NewQuayWebhook(webhookCfg.QuaySecret)
handler.RegisterHandler(quayHandler)

log.Infof("Starting webhook server on port %d", webhookCfg.Port)
webhookServer = webhook.NewWebhookServer(webhookCfg.Port, handler, cfg.KubeClient, argoClient)

// Set updater config
updaterConfig := &argocd.UpdaterConfig{
webhookServer.UpdaterConfig = &argocd.UpdateConfiguration{
NewRegFN: registry.NewClient,
ArgoClient: cfg.ArgoClient,
KubeClient: cfg.KubeClient,
DryRun: cfg.DryRun,
GitCommitUser: cfg.GitCommitUser,
GitCommitEmail: cfg.GitCommitMail,
GitCommitMessage: cfg.GitCommitMessage.Tree.Root.String(),
GitCommitMessage: cfg.GitCommitMessage,
GitCommitSigningKey: cfg.GitCommitSigningKey,
GitCommitSigningMethod: cfg.GitCommitSigningMethod,
GitCommitSignOff: cfg.GitCommitSignOff,
DisableKubeEvents: cfg.DisableKubeEvents,
GitCreds: cfg.GitCreds,
}
webhookServer.UpdaterConfig = updaterConfig

whErrCh = make(chan error, 1)
go func() {
Expand All @@ -233,7 +240,7 @@ func newRunCommand() *cobra.Command {
}
}()

log.Infof("Webhook server started and listening on port %d", cfg.WebhookPort)
log.Infof("Webhook server started and listening on port %d", webhookCfg.Port)
}

// This is our main loop. We leave it only when our health probe server
Expand Down Expand Up @@ -323,9 +330,15 @@ func newRunCommand() *cobra.Command {
runCmd.Flags().BoolVar(&cfg.GitCommitSignOff, "git-commit-sign-off", env.GetBoolVal("GIT_COMMIT_SIGN_OFF", false), "Whether to sign-off git commits")
runCmd.Flags().StringVar(&commitMessagePath, "git-commit-message-path", defaultCommitTemplatePath, "Path to a template to use for Git commit messages")
runCmd.Flags().BoolVar(&cfg.DisableKubeEvents, "disable-kube-events", env.GetBoolVal("IMAGE_UPDATER_KUBE_EVENTS", false), "Disable kubernetes events")
runCmd.Flags().IntVar(&cfg.WebhookPort, "webhook-port", env.ParseNumFromEnv("WEBHOOK_PORT", 8082, 0, 65535), "Port to start the webhook server on, 0 to disable")
runCmd.Flags().BoolVar(&cfg.EnableWebhook, "enable-webhook", env.GetBoolVal("ENABLE_WEBHOOK", false), "Enable webhook server for receiving registry events")

runCmd.Flags().IntVar(&webhookCfg.Port, "webhook-port", env.ParseNumFromEnv("WEBHOOK_PORT", 8082, 0, 65535), "Port to listen on for webhook events")
runCmd.Flags().StringVar(&webhookCfg.DockerSecret, "docker-secret", env.GetStringVal("DOCKER_WEBHOOK_SECRET", ""), "Secret for validating Docker Hub webhooks")
runCmd.Flags().StringVar(&webhookCfg.GHCRSecret, "ghcr-secret", env.GetStringVal("GHCR_WEBHOOK_SECRET", ""), "Secret for validating GitHub Container Registry webhooks")
runCmd.Flags().StringVar(&webhookCfg.QuaySecret, "quay-secret", env.GetStringVal("QUAY_WEBHOOK_SECRET", ""), "Secret for validating Quay webhooks")
runCmd.Flags().StringVar(&webhookCfg.HarborSecret, "harbor-secret", env.GetStringVal("HARBOR_WEBHOOK_SECRET", ""), "Secret for validating Harbor webhooks")
runCmd.Flags().BoolVar(&webhookCfg.UpdateOnEvent, "update-on-event", true, "Whether to trigger image update checks when webhook events are received")

return runCmd
}

Expand Down
Loading