Skip to content

Commit fa2de9b

Browse files
authored
feat(webhook): add webhook handler for quay.io and make improvements to the community PR (#1197)
Signed-off-by: Christopher Coco <[email protected]>
1 parent 274cfbc commit fa2de9b

File tree

8 files changed

+526
-203
lines changed

8 files changed

+526
-203
lines changed

cmd/main.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ type ImageUpdaterConfig struct {
5151
GitCommitSignOff bool
5252
DisableKubeEvents bool
5353
GitCreds git.CredsStore
54-
WebhookPort int
5554
EnableWebhook bool
5655
}
5756

cmd/run.go

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
// newRunCommand implements "run" command
3333
func newRunCommand() *cobra.Command {
3434
var cfg *ImageUpdaterConfig = &ImageUpdaterConfig{}
35+
var webhookCfg *WebhookConfig = &WebhookConfig{}
3536
var once bool
3637
var kubeConfig string
3738
var disableKubernetes bool
@@ -183,7 +184,7 @@ func newRunCommand() *cobra.Command {
183184

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

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

207-
ghcrHandler := webhook.NewGHCRWebhook("")
207+
ghcrHandler := webhook.NewGHCRWebhook(webhookCfg.GHCRSecret)
208208
handler.RegisterHandler(ghcrHandler)
209209

210-
harborHandler := webhook.NewHarborWebhook("")
210+
harborHandler := webhook.NewHarborWebhook(webhookCfg.HarborSecret)
211211
handler.RegisterHandler(harborHandler)
212212

213-
log.Infof("Starting webhook server on port %d", cfg.WebhookPort)
214-
webhookServer = webhook.NewWebhookServer(cfg.WebhookPort, handler, cfg.KubeClient, argoClient)
213+
quayHandler := webhook.NewQuayWebhook(webhookCfg.QuaySecret)
214+
handler.RegisterHandler(quayHandler)
215+
216+
log.Infof("Starting webhook server on port %d", webhookCfg.Port)
217+
webhookServer = webhook.NewWebhookServer(webhookCfg.Port, handler, cfg.KubeClient, argoClient)
215218

216219
// Set updater config
217-
updaterConfig := &argocd.UpdaterConfig{
220+
webhookServer.UpdaterConfig = &argocd.UpdateConfiguration{
221+
NewRegFN: registry.NewClient,
222+
ArgoClient: cfg.ArgoClient,
223+
KubeClient: cfg.KubeClient,
218224
DryRun: cfg.DryRun,
219225
GitCommitUser: cfg.GitCommitUser,
220226
GitCommitEmail: cfg.GitCommitMail,
221-
GitCommitMessage: cfg.GitCommitMessage.Tree.Root.String(),
227+
GitCommitMessage: cfg.GitCommitMessage,
222228
GitCommitSigningKey: cfg.GitCommitSigningKey,
223229
GitCommitSigningMethod: cfg.GitCommitSigningMethod,
224230
GitCommitSignOff: cfg.GitCommitSignOff,
231+
DisableKubeEvents: cfg.DisableKubeEvents,
232+
GitCreds: cfg.GitCreds,
225233
}
226-
webhookServer.UpdaterConfig = updaterConfig
227234

228235
whErrCh = make(chan error, 1)
229236
go func() {
@@ -233,7 +240,7 @@ func newRunCommand() *cobra.Command {
233240
}
234241
}()
235242

236-
log.Infof("Webhook server started and listening on port %d", cfg.WebhookPort)
243+
log.Infof("Webhook server started and listening on port %d", webhookCfg.Port)
237244
}
238245

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

335+
runCmd.Flags().IntVar(&webhookCfg.Port, "webhook-port", env.ParseNumFromEnv("WEBHOOK_PORT", 8082, 0, 65535), "Port to listen on for webhook events")
336+
runCmd.Flags().StringVar(&webhookCfg.DockerSecret, "docker-webhook-secret", env.GetStringVal("DOCKER_WEBHOOK_SECRET", ""), "Secret for validating Docker Hub webhooks")
337+
runCmd.Flags().StringVar(&webhookCfg.GHCRSecret, "ghcr-webhook-secret", env.GetStringVal("GHCR_WEBHOOK_SECRET", ""), "Secret for validating GitHub Container Registry webhooks")
338+
runCmd.Flags().StringVar(&webhookCfg.QuaySecret, "quay-webhook-secret", env.GetStringVal("QUAY_WEBHOOK_SECRET", ""), "Secret for validating Quay webhooks")
339+
runCmd.Flags().StringVar(&webhookCfg.HarborSecret, "harbor-webhook-secret", env.GetStringVal("HARBOR_WEBHOOK_SECRET", ""), "Secret for validating Harbor webhooks")
340+
329341
return runCmd
330342
}
331343

0 commit comments

Comments
 (0)