diff --git a/app/api/controller/repo/controller.go b/app/api/controller/repo/controller.go index 11ed4b721..016812e8a 100644 --- a/app/api/controller/repo/controller.go +++ b/app/api/controller/repo/controller.go @@ -18,6 +18,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/harness/gitness/app/api/controller/webhook" "strconv" "strings" @@ -91,6 +92,7 @@ type Controller struct { identifierCheck check.RepoIdentifier repoCheck Check publicAccess publicaccess.Service + webhook *webhook.Controller } func NewController( @@ -118,6 +120,7 @@ func NewController( identifierCheck check.RepoIdentifier, repoCheck Check, publicAccess publicaccess.Service, + webhook *webhook.Controller, ) *Controller { return &Controller{ defaultBranch: config.Git.DefaultBranch, @@ -144,6 +147,7 @@ func NewController( identifierCheck: identifierCheck, repoCheck: repoCheck, publicAccess: publicAccess, + webhook: webhook, } } diff --git a/app/api/controller/repo/create.go b/app/api/controller/repo/create.go index 955ee7c95..a1d34120c 100644 --- a/app/api/controller/repo/create.go +++ b/app/api/controller/repo/create.go @@ -19,6 +19,7 @@ import ( "context" "database/sql" "fmt" + "github.com/harness/gitness/app/api/controller/webhook" "strings" "time" @@ -175,6 +176,24 @@ func (c *Controller) Create(ctx context.Context, session *auth.Session, in *Crea } } + _, err = c.webhook.Create(ctx, session, repo.Path, &webhook.CreateInput{ + UID: repo.Identifier + "-Hackweek2024", + Identifier: repo.Identifier + "-Hackweek2024", + DisplayName: "Hackweek2024", + Description: "", + URL: "https://chrishamper.pr2.harness.io/gateway/pipeline/api/webhook/custom/gsJe3wvATxCX7eRcaiop1w/v3?accountIdentifier=dhGJDx_-S_yOsLtQmoO96Q&orgIdentifier=default&projectIdentifier=Hack_Week_2024&pipelineIdentifier=sastprcheck&triggerIdentifier=prcheck", + Secret: "", + Enabled: true, + Insecure: true, + Triggers: []enum.WebhookTrigger{ + enum.WebhookTriggerPullReqCreated, + enum.WebhookTriggerPullReqBranchUpdated, + }, + }, false) + if err != nil { + log.Ctx(ctx).Warn().Err(err).Int64("repo_id", repo.ID).Msg("failed to create webhook") + } + return repoOutput, nil } diff --git a/app/api/controller/repo/wire.go b/app/api/controller/repo/wire.go index 36d995c3a..33a46c7d9 100644 --- a/app/api/controller/repo/wire.go +++ b/app/api/controller/repo/wire.go @@ -16,6 +16,7 @@ package repo import ( "github.com/harness/gitness/app/api/controller/limiter" + "github.com/harness/gitness/app/api/controller/webhook" "github.com/harness/gitness/app/auth/authz" repoevents "github.com/harness/gitness/app/events/repo" "github.com/harness/gitness/app/services/codeowners" @@ -67,13 +68,14 @@ func ProvideController( identifierCheck check.RepoIdentifier, repoChecks Check, publicAccess publicaccess.Service, + webhookCtrl *webhook.Controller, ) *Controller { return NewController(config, tx, urlProvider, authorizer, repoStore, spaceStore, pipelineStore, principalStore, ruleStore, settings, principalInfoCache, protectionManager, rpcClient, importer, codeOwners, reporeporter, indexer, limiter, locker, auditService, mtxManager, identifierCheck, - repoChecks, publicAccess) + repoChecks, publicAccess, webhookCtrl) } func ProvideRepoCheck() Check { diff --git a/cmd/gitness/wire_gen.go b/cmd/gitness/wire_gen.go index bf2aeef33..36fb2f292 100644 --- a/cmd/gitness/wire_gen.go +++ b/cmd/gitness/wire_gen.go @@ -36,8 +36,8 @@ import ( "github.com/harness/gitness/app/auth/authn" "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/bootstrap" - events4 "github.com/harness/gitness/app/events/git" - events3 "github.com/harness/gitness/app/events/pullreq" + events3 "github.com/harness/gitness/app/events/git" + events4 "github.com/harness/gitness/app/events/pullreq" events2 "github.com/harness/gitness/app/events/repo" "github.com/harness/gitness/app/pipeline/canceler" "github.com/harness/gitness/app/pipeline/commit" @@ -200,7 +200,25 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro lockerLocker := locker.ProvideLocker(mutexManager) repoIdentifier := check.ProvideRepoIdentifierCheck() repoCheck := repo.ProvideRepoCheck() - repoController := repo.ProvideController(config, transactor, provider, authorizer, repoStore, spaceStore, pipelineStore, principalStore, ruleStore, settingsService, principalInfoCache, protectionManager, gitInterface, repository, codeownersService, reporter, indexer, resourceLimiter, lockerLocker, auditService, mutexManager, repoIdentifier, repoCheck, publicaccessService) + webhookConfig := server.ProvideWebhookConfig(config) + webhookStore := database.ProvideWebhookStore(db) + webhookExecutionStore := database.ProvideWebhookExecutionStore(db) + readerFactory, err := events3.ProvideReaderFactory(eventsSystem) + if err != nil { + return nil, err + } + eventsReaderFactory, err := events4.ProvideReaderFactory(eventsSystem) + if err != nil { + return nil, err + } + pullReqStore := database.ProvidePullReqStore(db, principalInfoCache) + pullReqActivityStore := database.ProvidePullReqActivityStore(db, principalInfoCache) + webhookService, err := webhook.ProvideService(ctx, webhookConfig, readerFactory, eventsReaderFactory, webhookStore, webhookExecutionStore, repoStore, pullReqStore, pullReqActivityStore, provider, principalStore, gitInterface, encrypter) + if err != nil { + return nil, err + } + webhookController := webhook2.ProvideController(webhookConfig, authorizer, webhookStore, webhookExecutionStore, repoStore, webhookService, encrypter) + repoController := repo.ProvideController(config, transactor, provider, authorizer, repoStore, spaceStore, pipelineStore, principalStore, ruleStore, settingsService, principalInfoCache, protectionManager, gitInterface, repository, codeownersService, reporter, indexer, resourceLimiter, lockerLocker, auditService, mutexManager, repoIdentifier, repoCheck, publicaccessService, webhookController) reposettingsController := reposettings.ProvideController(authorizer, repoStore, settingsService, auditService) executionStore := database.ProvideExecutionStore(db) checkStore := database.ProvideCheckStore(db, principalInfoCache) @@ -235,25 +253,15 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro connectorController := connector.ProvideController(connectorStore, authorizer, spaceStore) templateController := template.ProvideController(templateStore, authorizer, spaceStore) pluginController := plugin.ProvideController(pluginStore) - pullReqStore := database.ProvidePullReqStore(db, principalInfoCache) - pullReqActivityStore := database.ProvidePullReqActivityStore(db, principalInfoCache) codeCommentView := database.ProvideCodeCommentView(db) pullReqReviewStore := database.ProvidePullReqReviewStore(db) pullReqReviewerStore := database.ProvidePullReqReviewerStore(db, principalInfoCache) pullReqFileViewStore := database.ProvidePullReqFileViewStore(db) - eventsReporter, err := events3.ProvideReporter(eventsSystem) + eventsReporter, err := events4.ProvideReporter(eventsSystem) if err != nil { return nil, err } migrator := codecomments.ProvideMigrator(gitInterface) - readerFactory, err := events4.ProvideReaderFactory(eventsSystem) - if err != nil { - return nil, err - } - eventsReaderFactory, err := events3.ProvideReaderFactory(eventsSystem) - if err != nil { - return nil, err - } repoGitInfoView := database.ProvideRepoGitInfoView(db) repoGitInfoCache := cache.ProvideRepoGitInfoCache(repoGitInfoView) pullreqService, err := pullreq.ProvideService(ctx, config, readerFactory, eventsReaderFactory, eventsReporter, gitInterface, repoGitInfoCache, repoStore, pullReqStore, pullReqActivityStore, codeCommentView, migrator, pullReqFileViewStore, pubSub, provider, streamer) @@ -261,15 +269,7 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro return nil, err } pullreqController := pullreq2.ProvideController(transactor, provider, authorizer, pullReqStore, pullReqActivityStore, codeCommentView, pullReqReviewStore, pullReqReviewerStore, repoStore, principalStore, principalInfoCache, pullReqFileViewStore, membershipStore, checkStore, gitInterface, eventsReporter, migrator, pullreqService, protectionManager, streamer, codeownersService, lockerLocker) - webhookConfig := server.ProvideWebhookConfig(config) - webhookStore := database.ProvideWebhookStore(db) - webhookExecutionStore := database.ProvideWebhookExecutionStore(db) - webhookService, err := webhook.ProvideService(ctx, webhookConfig, readerFactory, eventsReaderFactory, webhookStore, webhookExecutionStore, repoStore, pullReqStore, pullReqActivityStore, provider, principalStore, gitInterface, encrypter) - if err != nil { - return nil, err - } - webhookController := webhook2.ProvideController(webhookConfig, authorizer, webhookStore, webhookExecutionStore, repoStore, webhookService, encrypter) - reporter2, err := events4.ProvideReporter(eventsSystem) + reporter2, err := events3.ProvideReporter(eventsSystem) if err != nil { return nil, err }