feat: introduce new event for repo deletion and refactor existing pullreqevents to repoevents (#736)

This commit is contained in:
Akhilesh Pandey 2023-11-13 18:37:53 +00:00 committed by Harness
parent d219d79395
commit 66ff29d36e
10 changed files with 228 additions and 21 deletions

View File

@ -24,6 +24,7 @@ import (
"github.com/harness/gitness/app/api/usererror" "github.com/harness/gitness/app/api/usererror"
"github.com/harness/gitness/app/auth" "github.com/harness/gitness/app/auth"
"github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/auth/authz"
repoevents "github.com/harness/gitness/app/events/repo"
"github.com/harness/gitness/app/services/codeowners" "github.com/harness/gitness/app/services/codeowners"
"github.com/harness/gitness/app/services/importer" "github.com/harness/gitness/app/services/importer"
"github.com/harness/gitness/app/services/protection" "github.com/harness/gitness/app/services/protection"
@ -51,6 +52,7 @@ type Controller struct {
gitRPCClient gitrpc.Interface gitRPCClient gitrpc.Interface
importer *importer.Repository importer *importer.Repository
codeOwners *codeowners.Service codeOwners *codeowners.Service
eventReporter *repoevents.Reporter
} }
func NewController( func NewController(
@ -68,6 +70,7 @@ func NewController(
gitRPCClient gitrpc.Interface, gitRPCClient gitrpc.Interface,
importer *importer.Repository, importer *importer.Repository,
codeOwners *codeowners.Service, codeOwners *codeowners.Service,
eventReporter *repoevents.Reporter,
) *Controller { ) *Controller {
return &Controller{ return &Controller{
defaultBranch: defaultBranch, defaultBranch: defaultBranch,
@ -84,6 +87,7 @@ func NewController(
gitRPCClient: gitRPCClient, gitRPCClient: gitRPCClient,
importer: importer, importer: importer,
codeOwners: codeOwners, codeOwners: codeOwners,
eventReporter: eventReporter,
} }
} }

View File

@ -21,6 +21,7 @@ import (
apiauth "github.com/harness/gitness/app/api/auth" apiauth "github.com/harness/gitness/app/api/auth"
"github.com/harness/gitness/app/api/controller" "github.com/harness/gitness/app/api/controller"
"github.com/harness/gitness/app/auth" "github.com/harness/gitness/app/auth"
repoevents "github.com/harness/gitness/app/events/repo"
"github.com/harness/gitness/gitrpc" "github.com/harness/gitness/gitrpc"
"github.com/harness/gitness/types" "github.com/harness/gitness/types"
"github.com/harness/gitness/types/enum" "github.com/harness/gitness/types/enum"
@ -63,6 +64,12 @@ func (c *Controller) DeleteNoAuth(ctx context.Context, session *auth.Session, re
return fmt.Errorf("failed to delete repo from db: %w", err) return fmt.Errorf("failed to delete repo from db: %w", err)
} }
c.eventReporter.Deleted(
ctx,
&repoevents.DeletedPayload{
RepoID: repo.ID,
},
)
return nil return nil
} }

View File

@ -16,6 +16,7 @@ package repo
import ( import (
"github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/auth/authz"
repoevents "github.com/harness/gitness/app/events/repo"
"github.com/harness/gitness/app/services/codeowners" "github.com/harness/gitness/app/services/codeowners"
"github.com/harness/gitness/app/services/importer" "github.com/harness/gitness/app/services/importer"
"github.com/harness/gitness/app/services/protection" "github.com/harness/gitness/app/services/protection"
@ -34,15 +35,26 @@ var WireSet = wire.NewSet(
ProvideController, ProvideController,
) )
func ProvideController(config *types.Config, tx dbtx.Transactor, urlProvider url.Provider, func ProvideController(
uidCheck check.PathUID, authorizer authz.Authorizer, repoStore store.RepoStore, config *types.Config,
spaceStore store.SpaceStore, pipelineStore store.PipelineStore, tx dbtx.Transactor,
principalStore store.PrincipalStore, ruleStore store.RuleStore, protectionManager *protection.Manager, urlProvider url.Provider,
rpcClient gitrpc.Interface, importer *importer.Repository, codeOwners *codeowners.Service, uidCheck check.PathUID,
authorizer authz.Authorizer,
repoStore store.RepoStore,
spaceStore store.SpaceStore,
pipelineStore store.PipelineStore,
principalStore store.PrincipalStore,
ruleStore store.RuleStore,
protectionManager *protection.Manager,
rpcClient gitrpc.Interface,
importer *importer.Repository,
codeOwners *codeowners.Service,
reporeporter *repoevents.Reporter,
) *Controller { ) *Controller {
return NewController(config.Git.DefaultBranch, tx, urlProvider, return NewController(config.Git.DefaultBranch, tx, urlProvider,
uidCheck, authorizer, repoStore, uidCheck, authorizer, repoStore,
spaceStore, pipelineStore, spaceStore, pipelineStore,
principalStore, ruleStore, protectionManager, principalStore, ruleStore, protectionManager,
rpcClient, importer, codeOwners) rpcClient, importer, codeOwners, reporeporter)
} }

View File

@ -0,0 +1,20 @@
// Copyright 2023 Harness, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package events
const (
// category defines the event category used for this package.
category = "repo"
)

View File

@ -0,0 +1,47 @@
// Copyright 2023 Harness, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package events
import (
"context"
"github.com/harness/gitness/events"
"github.com/rs/zerolog/log"
)
const DeletedEvent events.EventType = "deleted"
type DeletedPayload struct {
RepoID int64 `json:"repo_id"`
}
func (r *Reporter) Deleted(ctx context.Context, payload *DeletedPayload) {
if payload == nil {
return
}
eventID, err := events.ReporterSendEvent(r.innerReporter, ctx, DeletedEvent, payload)
if err != nil {
log.Ctx(ctx).Err(err).Msgf("failed to send repo deleted event")
return
}
log.Ctx(ctx).Debug().Msgf("reported repo deleted event with id '%s'", eventID)
}
func (r *Reader) RegisterRepoDeleted(fn events.HandlerFunc[*DeletedPayload],
opts ...events.HandlerOption) error {
return events.ReaderRegisterEvent(r.innerReader, DeletedEvent, fn, opts...)
}

38
app/events/repo/reader.go Normal file
View File

@ -0,0 +1,38 @@
// Copyright 2023 Harness, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package events
import (
"github.com/harness/gitness/events"
)
func NewReaderFactory(eventsSystem *events.System) (*events.ReaderFactory[*Reader], error) {
readerFactoryFunc := func(innerReader *events.GenericReader) (*Reader, error) {
return &Reader{
innerReader: innerReader,
}, nil
}
return events.NewReaderFactory(eventsSystem, category, readerFactoryFunc)
}
// Reader is the event reader for this package.
type Reader struct {
innerReader *events.GenericReader
}
func (r *Reader) Configure(opts ...events.ReaderOption) {
r.innerReader.Configure(opts...)
}

View File

@ -0,0 +1,37 @@
// Copyright 2023 Harness, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package events
import (
"errors"
"github.com/harness/gitness/events"
)
// Reporter is the event reporter for this package.
type Reporter struct {
innerReporter *events.GenericReporter
}
func NewReporter(eventsSystem *events.System) (*Reporter, error) {
innerReporter, err := events.NewReporter(eventsSystem, category)
if err != nil {
return nil, errors.New("failed to create new GenericReporter from event system")
}
return &Reporter{
innerReporter: innerReporter,
}, nil
}

35
app/events/repo/wire.go Normal file
View File

@ -0,0 +1,35 @@
// Copyright 2023 Harness, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package events
import (
"github.com/harness/gitness/events"
"github.com/google/wire"
)
// WireSet provides a wire set for this package.
var WireSet = wire.NewSet(
ProvideReaderFactory,
ProvideReporter,
)
func ProvideReaderFactory(eventsSystem *events.System) (*events.ReaderFactory[*Reader], error) {
return NewReaderFactory(eventsSystem)
}
func ProvideReporter(eventsSystem *events.System) (*Reporter, error) {
return NewReporter(eventsSystem)
}

View File

@ -35,6 +35,7 @@ import (
"github.com/harness/gitness/app/bootstrap" "github.com/harness/gitness/app/bootstrap"
gitevents "github.com/harness/gitness/app/events/git" gitevents "github.com/harness/gitness/app/events/git"
pullreqevents "github.com/harness/gitness/app/events/pullreq" pullreqevents "github.com/harness/gitness/app/events/pullreq"
repoevents "github.com/harness/gitness/app/events/repo"
"github.com/harness/gitness/app/pipeline/canceler" "github.com/harness/gitness/app/pipeline/canceler"
"github.com/harness/gitness/app/pipeline/commit" "github.com/harness/gitness/app/pipeline/commit"
"github.com/harness/gitness/app/pipeline/file" "github.com/harness/gitness/app/pipeline/file"
@ -110,6 +111,7 @@ func initSystem(ctx context.Context, config *types.Config) (*cliserver.System, e
authz.WireSet, authz.WireSet,
gitevents.WireSet, gitevents.WireSet,
pullreqevents.WireSet, pullreqevents.WireSet,
repoevents.WireSet,
cliserver.ProvideGitRPCServerConfig, cliserver.ProvideGitRPCServerConfig,
gitrpcserver.WireSet, gitrpcserver.WireSet,
cliserver.ProvideGitRPCClientConfig, cliserver.ProvideGitRPCClientConfig,

View File

@ -32,8 +32,9 @@ import (
"github.com/harness/gitness/app/auth/authn" "github.com/harness/gitness/app/auth/authn"
"github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/auth/authz"
"github.com/harness/gitness/app/bootstrap" "github.com/harness/gitness/app/bootstrap"
events3 "github.com/harness/gitness/app/events/git" events4 "github.com/harness/gitness/app/events/git"
events2 "github.com/harness/gitness/app/events/pullreq" events3 "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/canceler"
"github.com/harness/gitness/app/pipeline/commit" "github.com/harness/gitness/app/pipeline/commit"
"github.com/harness/gitness/app/pipeline/file" "github.com/harness/gitness/app/pipeline/file"
@ -154,7 +155,16 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro
} }
codeownersConfig := server.ProvideCodeOwnerConfig(config) codeownersConfig := server.ProvideCodeOwnerConfig(config)
codeownersService := codeowners.ProvideCodeOwners(gitrpcInterface, repoStore, codeownersConfig, principalStore) codeownersService := codeowners.ProvideCodeOwners(gitrpcInterface, repoStore, codeownersConfig, principalStore)
repoController := repo.ProvideController(config, transactor, provider, pathUID, authorizer, repoStore, spaceStore, pipelineStore, principalStore, ruleStore, protectionManager, gitrpcInterface, repository, codeownersService) eventsConfig := server.ProvideEventsConfig(config)
eventsSystem, err := events.ProvideSystem(eventsConfig, universalClient)
if err != nil {
return nil, err
}
reporter, err := events2.ProvideReporter(eventsSystem)
if err != nil {
return nil, err
}
repoController := repo.ProvideController(config, transactor, provider, pathUID, authorizer, repoStore, spaceStore, pipelineStore, principalStore, ruleStore, protectionManager, gitrpcInterface, repository, codeownersService, reporter)
executionStore := database.ProvideExecutionStore(db) executionStore := database.ProvideExecutionStore(db)
checkStore := database.ProvideCheckStore(db, principalInfoCache) checkStore := database.ProvideCheckStore(db, principalInfoCache)
stageStore := database.ProvideStageStore(db) stageStore := database.ProvideStageStore(db)
@ -192,31 +202,26 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro
pullReqReviewStore := database.ProvidePullReqReviewStore(db) pullReqReviewStore := database.ProvidePullReqReviewStore(db)
pullReqReviewerStore := database.ProvidePullReqReviewerStore(db, principalInfoCache) pullReqReviewerStore := database.ProvidePullReqReviewerStore(db, principalInfoCache)
pullReqFileViewStore := database.ProvidePullReqFileViewStore(db) pullReqFileViewStore := database.ProvidePullReqFileViewStore(db)
eventsConfig := server.ProvideEventsConfig(config) eventsReporter, err := events3.ProvideReporter(eventsSystem)
eventsSystem, err := events.ProvideSystem(eventsConfig, universalClient)
if err != nil {
return nil, err
}
reporter, err := events2.ProvideReporter(eventsSystem)
if err != nil { if err != nil {
return nil, err return nil, err
} }
migrator := codecomments.ProvideMigrator(gitrpcInterface) migrator := codecomments.ProvideMigrator(gitrpcInterface)
readerFactory, err := events3.ProvideReaderFactory(eventsSystem) readerFactory, err := events4.ProvideReaderFactory(eventsSystem)
if err != nil { if err != nil {
return nil, err return nil, err
} }
eventsReaderFactory, err := events2.ProvideReaderFactory(eventsSystem) eventsReaderFactory, err := events3.ProvideReaderFactory(eventsSystem)
if err != nil { if err != nil {
return nil, err return nil, err
} }
repoGitInfoView := database.ProvideRepoGitInfoView(db) repoGitInfoView := database.ProvideRepoGitInfoView(db)
repoGitInfoCache := cache.ProvideRepoGitInfoCache(repoGitInfoView) repoGitInfoCache := cache.ProvideRepoGitInfoCache(repoGitInfoView)
pullreqService, err := pullreq.ProvideService(ctx, config, readerFactory, eventsReaderFactory, reporter, gitrpcInterface, repoGitInfoCache, repoStore, pullReqStore, pullReqActivityStore, codeCommentView, migrator, pullReqFileViewStore, pubSub, provider, streamer) pullreqService, err := pullreq.ProvideService(ctx, config, readerFactory, eventsReaderFactory, eventsReporter, gitrpcInterface, repoGitInfoCache, repoStore, pullReqStore, pullReqActivityStore, codeCommentView, migrator, pullReqFileViewStore, pubSub, provider, streamer)
if err != nil { if err != nil {
return nil, err return nil, err
} }
pullreqController := pullreq2.ProvideController(transactor, provider, authorizer, pullReqStore, pullReqActivityStore, codeCommentView, pullReqReviewStore, pullReqReviewerStore, repoStore, principalStore, pullReqFileViewStore, membershipStore, checkStore, gitrpcInterface, reporter, mutexManager, migrator, pullreqService, protectionManager, streamer, codeownersService) pullreqController := pullreq2.ProvideController(transactor, provider, authorizer, pullReqStore, pullReqActivityStore, codeCommentView, pullReqReviewStore, pullReqReviewerStore, repoStore, principalStore, pullReqFileViewStore, membershipStore, checkStore, gitrpcInterface, eventsReporter, mutexManager, migrator, pullreqService, protectionManager, streamer, codeownersService)
webhookConfig := server.ProvideWebhookConfig(config) webhookConfig := server.ProvideWebhookConfig(config)
webhookStore := database.ProvideWebhookStore(db) webhookStore := database.ProvideWebhookStore(db)
webhookExecutionStore := database.ProvideWebhookExecutionStore(db) webhookExecutionStore := database.ProvideWebhookExecutionStore(db)
@ -225,11 +230,11 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro
return nil, err return nil, err
} }
webhookController := webhook2.ProvideController(webhookConfig, authorizer, webhookStore, webhookExecutionStore, repoStore, webhookService, encrypter) webhookController := webhook2.ProvideController(webhookConfig, authorizer, webhookStore, webhookExecutionStore, repoStore, webhookService, encrypter)
eventsReporter, err := events3.ProvideReporter(eventsSystem) reporter2, err := events4.ProvideReporter(eventsSystem)
if err != nil { if err != nil {
return nil, err return nil, err
} }
githookController := githook.ProvideController(authorizer, principalStore, repoStore, eventsReporter, pullReqStore, provider, protectionManager) githookController := githook.ProvideController(authorizer, principalStore, repoStore, reporter2, pullReqStore, provider, protectionManager)
serviceaccountController := serviceaccount.NewController(principalUID, authorizer, principalStore, spaceStore, repoStore, tokenStore) serviceaccountController := serviceaccount.NewController(principalUID, authorizer, principalStore, spaceStore, repoStore, tokenStore)
principalController := principal.ProvideController(principalStore) principalController := principal.ProvideController(principalStore)
checkController := check2.ProvideController(transactor, authorizer, repoStore, checkStore, gitrpcInterface) checkController := check2.ProvideController(transactor, authorizer, repoStore, checkStore, gitrpcInterface)