From ee0083cf5725464d6e0df181c768573ab3533cfc Mon Sep 17 00:00:00 2001 From: Shawna Monero <66325812+smonero@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:23:20 -0700 Subject: [PATCH] add legacyhandler back (deleted it in 766 oops) (#769) --- .../legacy/lyft/gateway/events_controller.go | 6 ++- .../gateway/event/legacy_pull_handler.go | 36 ++++++++++++++++++ .../event/modified_pull_request_handler.go | 9 ++++- .../modified_pull_request_handler_test.go | 37 ++++++++++++++++++- 4 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 server/neptune/gateway/event/legacy_pull_handler.go diff --git a/server/legacy/lyft/gateway/events_controller.go b/server/legacy/lyft/gateway/events_controller.go index 0c5476224..9bdfc60b0 100644 --- a/server/legacy/lyft/gateway/events_controller.go +++ b/server/legacy/lyft/gateway/events_controller.go @@ -60,9 +60,13 @@ func NewVCSEventsController( clientCreator githubapp.ClientCreator, defaultTFVersion string, ) *VCSEventsController { + legacyHandler := &gateway_handlers.LegacyPullHandler{ + Logger: logger, + VCSStatusUpdater: vcsStatusUpdater, + } prSignaler := &pr.WorkflowSignaler{TemporalClient: temporalClient, DefaultTFVersion: defaultTFVersion} prRequirementChecker := requirement.NewPRAggregate(globalCfg) - modifiedPullHandler := gateway_handlers.NewModifiedPullHandler(logger, asyncScheduler, rootConfigBuilder, globalCfg, prRequirementChecker, prSignaler) + modifiedPullHandler := gateway_handlers.NewModifiedPullHandler(logger, asyncScheduler, rootConfigBuilder, globalCfg, prRequirementChecker, prSignaler, legacyHandler) closedPullHandler := &gateway_handlers.ClosedPullRequestHandler{ Logger: logger, PRCloseSignaler: prSignaler, diff --git a/server/neptune/gateway/event/legacy_pull_handler.go b/server/neptune/gateway/event/legacy_pull_handler.go new file mode 100644 index 000000000..a4bb127fa --- /dev/null +++ b/server/neptune/gateway/event/legacy_pull_handler.go @@ -0,0 +1,36 @@ +package event + +import ( + "context" + "fmt" + + "github.com/runatlantis/atlantis/server/config/valid" + "github.com/runatlantis/atlantis/server/legacy/events/command" + "github.com/runatlantis/atlantis/server/legacy/http" + "github.com/runatlantis/atlantis/server/logging" + "github.com/runatlantis/atlantis/server/models" +) + +const PlatformModeApplyStatusMessage = "THIS IS A LEGACY STATUS CHECK AND IS NOT RELEVANT PLEASE LOOK AT atlantis/deploy status checks" + +type vcsStatusUpdater interface { + UpdateCombined(ctx context.Context, repo models.Repo, pull models.PullRequest, status models.VCSStatus, cmdName fmt.Stringer, statusID string, output string) (string, error) + UpdateCombinedCount(ctx context.Context, repo models.Repo, pull models.PullRequest, status models.VCSStatus, cmdName fmt.Stringer, numSuccess int, numTotal int, statusID string) (string, error) +} + +type LegacyPullHandler struct { + VCSStatusUpdater vcsStatusUpdater + Logger logging.Logger +} + +func (l *LegacyPullHandler) Handle(ctx context.Context, request *http.BufferedRequest, event PullRequest, allRoots []*valid.MergedProjectCfg) error { + // mark legacy statuses as successful if there are no roots in general + // this is processed here to make it easy to clean up when we deprecate legacy mode + if len(allRoots) == 0 { + if _, statusErr := l.VCSStatusUpdater.UpdateCombinedCount(ctx, event.Pull.HeadRepo, event.Pull, models.SuccessVCSStatus, command.Plan, 0, 0, ""); statusErr != nil { + l.Logger.WarnContext(ctx, fmt.Sprintf("unable to update commit status: %s", statusErr)) + } + return nil + } + return nil +} diff --git a/server/neptune/gateway/event/modified_pull_request_handler.go b/server/neptune/gateway/event/modified_pull_request_handler.go index 67598b581..8973705ef 100644 --- a/server/neptune/gateway/event/modified_pull_request_handler.go +++ b/server/neptune/gateway/event/modified_pull_request_handler.go @@ -19,6 +19,10 @@ import ( "github.com/runatlantis/atlantis/server/models" ) +type legacyHandler interface { + Handle(ctx context.Context, request *http.BufferedRequest, event PullRequest, allRoots []*valid.MergedProjectCfg) error +} + type prSignaler interface { SignalWithStartWorkflow(ctx context.Context, rootCfgs []*valid.MergedProjectCfg, prRequest pr.Request) (client.WorkflowRun, error) } @@ -29,6 +33,7 @@ type ModifiedPullHandler struct { RootConfigBuilder rootConfigBuilder GlobalCfg valid.GlobalCfg RequirementChecker requirementChecker + LegacyHandler legacyHandler PRSignaler prSignaler } @@ -41,13 +46,14 @@ type PullRequest struct { InstallationToken int64 } -func NewModifiedPullHandler(logger logging.Logger, scheduler scheduler, rootConfigBuilder rootConfigBuilder, globalCfg valid.GlobalCfg, requirementChecker requirementChecker, prSignaler prSignaler) *ModifiedPullHandler { +func NewModifiedPullHandler(logger logging.Logger, scheduler scheduler, rootConfigBuilder rootConfigBuilder, globalCfg valid.GlobalCfg, requirementChecker requirementChecker, prSignaler prSignaler, legacyHandler legacyHandler) *ModifiedPullHandler { return &ModifiedPullHandler{ Logger: logger, Scheduler: scheduler, RootConfigBuilder: rootConfigBuilder, GlobalCfg: globalCfg, RequirementChecker: requirementChecker, + LegacyHandler: legacyHandler, PRSignaler: prSignaler, } } @@ -97,6 +103,7 @@ func (p *ModifiedPullHandler) handle(ctx context.Context, request *http.Buffered } fxns := []func(ctx context.Context, request *http.BufferedRequest, event PullRequest, allRoots []*valid.MergedProjectCfg) error{ + p.LegacyHandler.Handle, p.handlePlatformMode, } var combinedErrors *multierror.Error diff --git a/server/neptune/gateway/event/modified_pull_request_handler_test.go b/server/neptune/gateway/event/modified_pull_request_handler_test.go index 97f13593f..33a888d7b 100644 --- a/server/neptune/gateway/event/modified_pull_request_handler_test.go +++ b/server/neptune/gateway/event/modified_pull_request_handler_test.go @@ -61,6 +61,10 @@ func TestModifiedPullHandler_Handle_SignalerFailure(t *testing.T) { expectedT: t, rootConfigs: []*valid.MergedProjectCfg{root}, }, + LegacyHandler: &mockLegacyHandler{ + expectedAllRoots: []*valid.MergedProjectCfg{root}, + expectedT: t, + }, PRSignaler: &mockPRSignaler{ error: assert.AnError, expectedRoots: []*valid.MergedProjectCfg{root}, @@ -106,6 +110,11 @@ func TestModifiedPullHandler_Handle_BranchStrategy(t *testing.T) { pull := event.PullRequest{ Pull: pullRequest, } + legacyHandler := &mockLegacyHandler{ + expectedEvent: pull, + expectedAllRoots: []*valid.MergedProjectCfg{legacyRoot}, + expectedT: t, + } prRequest := pr.Request{ Revision: "sha", Repo: testRepo, @@ -134,10 +143,12 @@ func TestModifiedPullHandler_Handle_BranchStrategy(t *testing.T) { expectedT: t, rootConfigs: []*valid.MergedProjectCfg{legacyRoot}, }, - PRSignaler: signaler, + LegacyHandler: legacyHandler, + PRSignaler: signaler, } err := pullHandler.Handle(context.Background(), &http.BufferedRequest{}, pull) assert.NoError(t, err) + assert.True(t, legacyHandler.called) assert.True(t, signaler.called) } @@ -185,6 +196,11 @@ func TestModifiedPullHandler_Handle_MergeStrategy(t *testing.T) { pr := event.PullRequest{ Pull: pullRequest, } + legacyHandler := &mockLegacyHandler{ + expectedEvent: pr, + expectedAllRoots: []*valid.MergedProjectCfg{root}, + expectedT: t, + } pullHandler := event.ModifiedPullHandler{ Logger: logger, Scheduler: &sync.SynchronousScheduler{Logger: logger}, @@ -195,10 +211,12 @@ func TestModifiedPullHandler_Handle_MergeStrategy(t *testing.T) { expectedT: t, rootConfigs: []*valid.MergedProjectCfg{root}, }, - PRSignaler: signaler, + LegacyHandler: legacyHandler, + PRSignaler: signaler, } err := pullHandler.Handle(context.Background(), &http.BufferedRequest{}, pr) assert.NoError(t, err) + assert.True(t, legacyHandler.called) assert.True(t, signaler.called) } @@ -219,6 +237,21 @@ func (r *mockConfigBuilder) Build(_ context.Context, commit *config.RepoCommit, return r.rootConfigs, r.error } +type mockLegacyHandler struct { + expectedEvent event.PullRequest + expectedAllRoots []*valid.MergedProjectCfg + expectedT *testing.T + error error + called bool +} + +func (l *mockLegacyHandler) Handle(ctx context.Context, _ *http.BufferedRequest, event event.PullRequest, allRoots []*valid.MergedProjectCfg) error { + l.called = true + assert.Equal(l.expectedT, l.expectedEvent, event) + assert.Equal(l.expectedT, l.expectedAllRoots, allRoots) + return l.error +} + type mockPRSignaler struct { called bool error error