From 2fa89dcbf108b3fb1b62855f361177ac3842c874 Mon Sep 17 00:00:00 2001 From: motatoes Date: Wed, 5 Jun 2024 16:52:22 +0100 Subject: [PATCH] fix drift notification provider --- cli/cmd/digger/default.go | 4 +++- cli/pkg/drift/Provider.go | 25 +++++++++++++++++++++++++ cli/pkg/github/github.go | 14 +++++--------- ee/cli/cmd/digger/default.go | 3 ++- ee/cli/pkg/drift/provider.go | 25 +++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 cli/pkg/drift/Provider.go create mode 100644 ee/cli/pkg/drift/provider.go diff --git a/cli/cmd/digger/default.go b/cli/cmd/digger/default.go index 2c47438a3..03c6c9204 100644 --- a/cli/cmd/digger/default.go +++ b/cli/cmd/digger/default.go @@ -4,6 +4,8 @@ import ( "fmt" "github.com/diggerhq/digger/cli/pkg/azure" "github.com/diggerhq/digger/cli/pkg/digger" + "github.com/diggerhq/digger/cli/pkg/drift" + "github.com/diggerhq/digger/cli/pkg/github" "github.com/diggerhq/digger/cli/pkg/usage" comment_updater "github.com/diggerhq/digger/libs/comment_utils/summary" "github.com/spf13/cobra" @@ -21,7 +23,7 @@ var defaultCmd = &cobra.Command{ switch ci { case digger.GitHub: logLeader = os.Getenv("GITHUB_ACTOR") - gitHubCI(lock, PolicyChecker, BackendApi, ReportStrategy, comment_updater.CommentUpdaterProviderBasic{}) + github.GitHubCI(lock, PolicyChecker, BackendApi, ReportStrategy, comment_updater.CommentUpdaterProviderBasic{}, drift.DriftNotificationProviderBasic{}) case digger.GitLab: logLeader = os.Getenv("CI_PROJECT_NAME") gitLabCI(lock, PolicyChecker, BackendApi, ReportStrategy) diff --git a/cli/pkg/drift/Provider.go b/cli/pkg/drift/Provider.go new file mode 100644 index 000000000..51fd70882 --- /dev/null +++ b/cli/pkg/drift/Provider.go @@ -0,0 +1,25 @@ +package drift + +import ( + "fmt" + core_drift "github.com/diggerhq/digger/cli/pkg/core/drift" + "github.com/diggerhq/digger/libs/orchestrator" + "os" +) + +type DriftNotificationProvider interface { + Get(prService orchestrator.PullRequestService) (core_drift.Notification, error) +} + +type DriftNotificationProviderBasic struct{} + +func (d DriftNotificationProviderBasic) Get(prService orchestrator.PullRequestService) (core_drift.Notification, error) { + slackNotificationUrl := os.Getenv("INPUT_DRIFT_DETECTION_SLACK_NOTIFICATION_URL") + var notification core_drift.Notification + if slackNotificationUrl != "" { + notification = SlackNotification{slackNotificationUrl} + } else { + return nil, fmt.Errorf("could not identify drift mode, please specify slack or github") + } + return notification, nil +} diff --git a/cli/pkg/github/github.go b/cli/pkg/github/github.go index ac2dcccf5..bc597defb 100644 --- a/cli/pkg/github/github.go +++ b/cli/pkg/github/github.go @@ -6,7 +6,6 @@ import ( "fmt" "github.com/diggerhq/digger/cli/pkg/backend" core_backend "github.com/diggerhq/digger/cli/pkg/core/backend" - core_drift "github.com/diggerhq/digger/cli/pkg/core/drift" core_policy "github.com/diggerhq/digger/cli/pkg/core/policy" "github.com/diggerhq/digger/cli/pkg/digger" "github.com/diggerhq/digger/cli/pkg/drift" @@ -32,7 +31,7 @@ import ( "time" ) -func GitHubCI(lock core_locking.Lock, policyChecker core_policy.Checker, backendApi core_backend.Api, reportingStrategy reporting.ReportStrategy, commentUpdaterProvider comment_updater.CommentUpdaterProvider) { +func GitHubCI(lock core_locking.Lock, policyChecker core_policy.Checker, backendApi core_backend.Api, reportingStrategy reporting.ReportStrategy, commentUpdaterProvider comment_updater.CommentUpdaterProvider, driftNotifcationProvider drift.DriftNotificationProvider) { log.Printf("Using GitHub.\n") githubActor := os.Getenv("GITHUB_ACTOR") if githubActor != "" { @@ -301,15 +300,12 @@ func GitHubCI(lock core_locking.Lock, policyChecker core_policy.Checker, backend CommandEnvProvider: CommandEnvProvider, } - slackNotificationUrl := os.Getenv("INPUT_DRIFT_DETECTION_SLACK_NOTIFICATION_URL") - var notification core_drift.Notification - if slackNotificationUrl != "" { - notification = drift.SlackNotification{slackNotificationUrl} - } else { - usage.ReportErrorAndExit(githubActor, fmt.Sprintf("Could not identify drift mode, please specify slack webhook url"), 8) + notification, err := driftNotifcationProvider.Get(githubPrService) + if err != nil { + usage.ReportErrorAndExit(githubActor, fmt.Sprintf("could not get drift notification type: %v", err), 8) } - err := digger.RunJob(job, ghRepository, githubActor, &githubPrService, policyChecker, nil, backendApi, ¬ification, currentDir) + err = digger.RunJob(job, ghRepository, githubActor, &githubPrService, policyChecker, nil, backendApi, ¬ification, currentDir) if err != nil { usage.ReportErrorAndExit(githubActor, fmt.Sprintf("Failed to run commands. %s", err), 8) } diff --git a/ee/cli/cmd/digger/default.go b/ee/cli/cmd/digger/default.go index 1254c6517..bbd5294f6 100644 --- a/ee/cli/cmd/digger/default.go +++ b/ee/cli/cmd/digger/default.go @@ -6,6 +6,7 @@ import ( "github.com/diggerhq/digger/cli/pkg/github" "github.com/diggerhq/digger/cli/pkg/usage" "github.com/diggerhq/digger/ee/cli/pkg/comment_updater" + "github.com/diggerhq/digger/ee/cli/pkg/drift" "github.com/spf13/cobra" "log" "os" @@ -21,7 +22,7 @@ var defaultCmd = &cobra.Command{ switch ci { case digger.GitHub: logLeader = os.Getenv("GITHUB_ACTOR") - github.GitHubCI(lock, PolicyChecker, BackendApi, ReportStrategy, comment_updater.CommentUpdaterProviderAdvanced{}) + github.GitHubCI(lock, PolicyChecker, BackendApi, ReportStrategy, comment_updater.CommentUpdaterProviderAdvanced{}, drift.DriftNotificationProviderAdvanced{}) case digger.None: print("No CI detected.") os.Exit(10) diff --git a/ee/cli/pkg/drift/provider.go b/ee/cli/pkg/drift/provider.go new file mode 100644 index 000000000..d046ec464 --- /dev/null +++ b/ee/cli/pkg/drift/provider.go @@ -0,0 +1,25 @@ +package drift + +import ( + "fmt" + core_drift "github.com/diggerhq/digger/cli/pkg/core/drift" + "github.com/diggerhq/digger/cli/pkg/drift" + "github.com/diggerhq/digger/libs/orchestrator" + "os" +) + +type DriftNotificationProviderAdvanced struct{} + +func (d DriftNotificationProviderAdvanced) Get(prService orchestrator.PullRequestService) (core_drift.Notification, error) { + slackNotificationUrl := os.Getenv("INPUT_DRIFT_DETECTION_SLACK_NOTIFICATION_URL") + DriftAsGithubIssues := os.Getenv("INPUT_DRIFT_GITHUB_ISSUES") + var notification core_drift.Notification + if slackNotificationUrl != "" { + notification = drift.SlackNotification{slackNotificationUrl} + } else if DriftAsGithubIssues != "" { + notification = GithubIssueNotification{GithubService: &prService} + } else { + return nil, fmt.Errorf("could not identify drift mode, please specify slack or github") + } + return notification, nil +}