Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: support single comment summary with orchestrator mode #1850

Open
wants to merge 14 commits into
base: develop
Choose a base branch
from
Prev Previous commit
Next Next commit
Merge branch 'develop' into feat/support-single-comment-summary
# Conflicts:
#	backend/controllers/github.go
#	backend/migrations/atlas.sum
#	backend/models/scheduler.go
#	backend/models/storage.go
#	backend/services/spec.go
#	backend/utils/graphs.go
#	ee/backend/controllers/gitlab.go
#	ee/backend/hooks/github.go
  • Loading branch information
motatoes committed Jan 3, 2025
commit 1d3bc4148471a15d63d3c5b2ccd16ec1cc02610f
27 changes: 25 additions & 2 deletions backend/controllers/github.go
Original file line number Diff line number Diff line change
@@ -34,9 +34,7 @@ import (
"net/http"
"net/url"
"os"
"path/filepath"
"reflect"
"runtime/debug"
"slices"
"strconv"
"strings"
@@ -512,6 +510,19 @@ func handlePullRequestEvent(gh utils.GithubClientProvider, payload *github.PullR
commentReporterManager.UpdateComment(fmt.Sprintf(":x: could not handle commentId: %v", err))
}

var aiSummaryCommentId = ""
if config.Reporting.AiSummary {
aiSummaryComment, err := ghService.PublishComment(prNumber, "AI Summary will be posted here after completion")
if err != nil {
log.Printf("could not post ai summary comment: %v", err)
commentReporterManager.UpdateComment(fmt.Sprintf(":x: could not post ai comment summary comment id: %v", err))
return fmt.Errorf("could not post ai summary comment: %v", err)
}
aiSummaryCommentId = aiSummaryComment.Id
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Fix duplicate AI summary implementation

The AI summary comment creation logic is duplicated between handlePullRequestEvent and handleIssueCommentEvent. Consider extracting this into a shared helper function.

func createAiSummaryComment(ghService *dg_github.GithubService, issueNumber int, commentReporterManager utils.CommentReporterManager) (string, error) {
    if !config.Reporting.AiSummary {
        return "", nil
    }
    aiSummaryComment, err := ghService.PublishComment(issueNumber, "AI Summary will be posted here after completion")
    if err != nil {
        log.Printf("could not post ai summary comment: %v", err)
        commentReporterManager.UpdateComment(fmt.Sprintf(":x: could not post ai comment summary comment id: %v", err))
        return "", fmt.Errorf("could not post ai summary comment: %v", err)
    }
    return aiSummaryComment.Id, nil
}

Also applies to: 938-947


batchId, _, err := utils.ConvertJobsToDiggerJobs(*diggerCommand, models.DiggerVCSGithub, organisationId, impactedJobsMap, impactedProjectsMap, projectsGraph, installationId, branch, prNumber, repoOwner, repoName, repoFullName, commitSha, commentId, diggerYmlStr, 0, aiSummaryCommentId, config.ReportTerraformOutputs)

placeholderComment, err := ghService.PublishComment(prNumber, "digger report placehoder")
if err != nil {
log.Printf("strconv.ParseInt error: %v", err)
@@ -916,6 +927,18 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
return fmt.Errorf("comment reporter error: %v", err)
}

var aiSummaryCommentId = ""
if config.Reporting.AiSummary {
aiSummaryComment, err := ghService.PublishComment(issueNumber, "AI Summary will be posted here after completion")
if err != nil {
log.Printf("could not post ai summary comment: %v", err)
commentReporterManager.UpdateComment(fmt.Sprintf(":x: could not post ai comment summary comment id: %v", err))
return fmt.Errorf("could not post ai summary comment: %v", err)
}
aiSummaryCommentId = aiSummaryComment.Id
}

batchId, _, err := utils.ConvertJobsToDiggerJobs(*diggerCommand, "github", orgId, impactedProjectsJobMap, impactedProjectsMap, projectsGraph, installationId, *branch, issueNumber, repoOwner, repoName, repoFullName, *commitSha, reporterCommentId, diggerYmlStr, 0, aiSummaryCommentId, config.ReportTerraformOutputs)
placeholderComment, err := ghService.PublishComment(issueNumber, "digger report placehoder")
if err != nil {
log.Printf("strconv.ParseInt error: %v", err)
54 changes: 27 additions & 27 deletions backend/migrations/atlas.sum
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
h1:SB1sRi1zY0IoKioJ+Y0FtuIjHQv6XCvcsAJg0AEJNs4=
h1:kHWmqYJMe9ZbdcztvM02SVEs5lyw/RFbKzZmqgbmSIk=
20231227132525.sql h1:43xn7XC0GoJsCnXIMczGXWis9d504FAWi4F1gViTIcw=
20240115170600.sql h1:IW8fF/8vc40+eWqP/xDK+R4K9jHJ9QBSGO6rN9LtfSA=
20240116123649.sql h1:R1JlUIgxxF6Cyob9HdtMqiKmx/BfnsctTl5rvOqssQw=
@@ -9,29 +9,29 @@ h1:SB1sRi1zY0IoKioJ+Y0FtuIjHQv6XCvcsAJg0AEJNs4=
20240329100957.sql h1:6IHn/Se6FwdmipMDPAPF0yChNNCuwxrEt4rgn+0gkLQ=
20240329114422.sql h1:chXvrIUFNud2SdbRClWSCKXZ4MrMu0mpgE08Bou3pgk=
20240402110915.sql h1:bG2Dvbzm3ZvFa29Feb0Bwj6KtAtZy1Vyuje6yV31msQ=
20240403155357_drop_dup_idx.sql h1:6LyRtGfutHQompownriYYrq8us+Cdj4FTgWa7VPsXFA=
20240403155456.sql h1:XJgyne416JMAV4xHA3IweHZos0ULrjFEJBqhWFjGNho=
20240404160724.sql h1:cjEZiC7JC0dCJIRSIh1OBBhi2IBuRZEBj/ifoYqNzAw=
20240404161121.sql h1:ZbMLfHRom6Tws+2M3BcnMu1lcjz/YFwAI8kGmC+I+H4=
20240404161723.sql h1:z3bJcKs0ZJSyTJewqgE0GSHpn33sX7zgc2rmCMF99Qo=
20240404165910.sql h1:ofwrBzkvnxFz7sOrtaF3vb2xHsenPmUTSSBHvO1NEdI=
20240405150942.sql h1:0JIQlXqQmfgfBcill47gAef3LnnfdwK6ry98eHraUbo=
20240405160110.sql h1:8bXZtrh8ZFFuCEXWIZ4fSjca0SSk1gsa2BqK7dIZ0To=
20240409161739.sql h1:x0dZOsILJhmeQ6w8JKkllXZb2oz+QqV/PGLo+8R2pWI=
20240510162721.sql h1:X2iIVRSrJU/Qjk176u9MAYL8kcOy/meS/YwPwrRF/Ok=
20240518182629.sql h1:TZWESUb/S12o6IoP8JOUnLpA6UF9sPlSFlNSyeA3aX0=
20240524110010.sql h1:tJ4SceBrjNekJtKXzY6IDHM6HZhTLYY0SHWci2znAfE=
20240527112209.sql h1:vuz1G8P1uoo4xYddKnT8tzTmtYcq9ThT4xLERnutERo=
20240530074832.sql h1:uyXvPgFxTfO2QAW2bhXSxJJQLbpr2zCfrlg1ycD8BSU=
20240703121051.sql h1:ntF++QXJ3LYQP3ZFvumMvg28FFr8vAnDReFgvgzhOcg=
20240704192835.sql h1:F84HKuE3qX8hYqDCU2K9NDG4WQaSfmnk2P4OCje54qg=
20240705144450.sql h1:AAB4GbML2Jea1MSv/+E0DLMMCI9GLqwptpvBScvU19s=
20240709165155.sql h1:HWDuhwXD+esr9uaKHsqwltPfUEq5uLdcEzpnZ1biKgU=
20240729155442.sql h1:s7PCALP3SgPz5y9Ya7HkDzYjeN86Q5NniW2YIkOMBrQ=
20240729155926.sql h1:8vsDrpy/R1UDI+meIp6KoDfhS60t+ngu8aPB+uonFZ4=
20240729160028.sql h1:snkkxhA2aEQhqBmIhN8l+nPlBhrPOZiPP+dnyhobwD8=
20241107162605.sql h1:UwkkGz6bQ7nqSCCA9lVS+JS01YDONLVV0yaM8jJqzlQ=
20241107163722.sql h1:tk28AgXggvpEigTkWMYMxIVDPNdEUFGijaFWBqvlZhA=
20241107172343.sql h1:wtM1+uJZY6NiiDYabuzj/LAANAV7+xyUCL5U23v3e+c=
20241114202249.sql h1:LCRf42VUYB/uugR4gwp+fGPUomT0KhFA3eLjBK9JlZo=
20241204194016.sql h1:RgiJkZlAJSJjNCRD5RHmRr+65O9UDCRwGohQwdIMhGg=
20240403155357_drop_dup_idx.sql h1:rqr6IqJc0F2dEBMDxUB//oTf+BOkFxCe/MaU0J0Y+Es=
20240403155456.sql h1:+ww54CaWPAwK+iQc9sgJwm6EGCdX3Ea7/smL1PKeu7M=
20240404160724.sql h1:N40BUvxItI39PofafemYH7a7ey1+DnJOg8ZJZMk1Thk=
20240404161121.sql h1:UvAXj6N6/kwgLGMrZf6Jv3QrZySosPEO/3/WTmugE9s=
20240404161723.sql h1:mMBIeKFcUa6kWVtaR6fScD7IkIjeJLSb1ApHJHWl2r4=
20240404165910.sql h1:U1+ySYhfxfRt3hHPpCa6AHDPMWV/9ayzsPILiWLBguU=
20240405150942.sql h1:rZm6iict67OODB/bMyPWX4QPaLU8BXuZ/tjMG1+JChs=
20240405160110.sql h1:GnF+YCyPhEkt+n/vn6u2iVouaqPbQ1W5IJroTUCiCuI=
20240409161739.sql h1:vZ1jpyPbAElPj8em6b2rL6FZc5xmBioKoqtikK7aKeU=
20240510162721.sql h1:sXfSzBlJ6JdrEvvo2AsGSkgBqx0N5ksXzuUxYx2b0jg=
20240518182629.sql h1:95v5OPAVpobMMXW/Fjski/gtLCBYMVjaEerCn502n8g=
20240524110010.sql h1:NOFPPmsYeiinQKpiGZBpmKC2/fzLX8+2OmhzeeFBKe4=
20240527112209.sql h1:Rc+Qb0kxNxSg+zx6FlS4YRPFHrdjc7EVMpVtd3w+dQ4=
20240530074832.sql h1:MrFBWHg/i0m+QW5RTyFqgcyYz8DNWjQkFjLzq0XsO3o=
20240703121051.sql h1:hoQL47nMpffX39f0FsBf2sBrYiuy7mo3kGU5Z+uH9fo=
20240704192835.sql h1:egm+NA+66zOSWJaH/isZP2JahyGdOVu0kgOzLScSKs4=
20240705144450.sql h1:un4x6nBosDhMOnAIEmmIEJb4WAUV8+jJLvgff9CUOWw=
20240709165155.sql h1:wQVHxEVWDiHi5S5ZqyTGNNhGUp3Vn5wyald3DwmahxI=
20240729155442.sql h1:NX0LTKS/j9dfctke/Bj/3u2QC1Zhnv7mC6qTVTZeFRo=
20240729155926.sql h1:Wt95JM6dwadHiNSGWj8e+4tuixBWmt6lnVKXO3odr9A=
20240729160028.sql h1:ng3OGIkqIiO/PK623E5vyTso2T0maGyQvuPaNOFrno0=
20241107162605.sql h1:RtzXrPIMCsn2ReOPj8GYMhFcpJyHrzGsuS/J1bhxcws=
20241107163722.sql h1:D5+D4TJxs80GIYrKbf70P1Vc2FUuiFVGxlu424kxYbg=
20241107172343.sql h1:E1j+7R5TZlyCKEpyYmH1mJ2zh+y5hVbtQ/PuEMJR7us=
20241114202249.sql h1:P2DhJK8MLe8gSAAz+Y5KNmsvKVw8KfLQPCncynYXEfM=
20241229112312.sql h1:Fr06uwt7LcQoLh6bjGzKB+uy9i8+uk8m6jfi+OBBbP4=
2 changes: 2 additions & 0 deletions backend/models/scheduler.go
Original file line number Diff line number Diff line change
@@ -26,6 +26,7 @@ type DiggerBatch struct {
VCS DiggerVCSType
PrNumber int
CommentId *int64
AiSummaryCommentId string
PlaceholderCommentIdForReport *string
Status orchestrator_scheduler.DiggerBatchStatus
BranchName string
@@ -36,6 +37,7 @@ type DiggerBatch struct {
RepoOwner string
RepoName string
BatchType orchestrator_scheduler.DiggerCommand
ReportTerraformOutputs bool
// used for module source grouping comments
SourceDetails []byte
}
30 changes: 16 additions & 14 deletions backend/models/storage.go
Original file line number Diff line number Diff line change
@@ -617,23 +617,25 @@ func (db *Database) GetDiggerBatch(batchId *uuid.UUID) (*DiggerBatch, error) {
return batch, nil
}

func (db *Database) CreateDiggerBatch(vcsType DiggerVCSType, githubInstallationId int64, repoOwner string, repoName string, repoFullname string, PRNumber int, diggerConfig string, branchName string, batchType scheduler.DiggerCommand, commentId *int64, placeholderCommentIdForReport *string, gitlabProjectId int) (*DiggerBatch, error) {
func (db *Database) CreateDiggerBatch(vcsType DiggerVCSType, githubInstallationId int64, repoOwner string, repoName string, repoFullname string, PRNumber int, diggerConfig string, branchName string, batchType scheduler.DiggerCommand, commentId *int64, placeholderCommentIdForReport *string, gitlabProjectId int, aiSummaryCommentId string, reportTerraformOutputs bool) (*DiggerBatch, error) {
uid := uuid.New()
batch := &DiggerBatch{
ID: uid,
VCS: vcsType,
GithubInstallationId: githubInstallationId,
RepoOwner: repoOwner,
RepoName: repoName,
RepoFullName: repoFullname,
PrNumber: PRNumber,
CommentId: commentId,
ID: uid,
VCS: vcsType,
GithubInstallationId: githubInstallationId,
RepoOwner: repoOwner,
RepoName: repoName,
RepoFullName: repoFullname,
PrNumber: PRNumber,
CommentId: commentId,
PlaceholderCommentIdForReport: placeholderCommentIdForReport,
Status: scheduler.BatchJobCreated,
BranchName: branchName,
DiggerConfig: diggerConfig,
BatchType: batchType,
GitlabProjectId: gitlabProjectId,
Status: scheduler.BatchJobCreated,
BranchName: branchName,
DiggerConfig: diggerConfig,
BatchType: batchType,
GitlabProjectId: gitlabProjectId,
AiSummaryCommentId: aiSummaryCommentId,
ReportTerraformOutputs: reportTerraformOutputs,
}
result := db.GormDB.Save(batch)
if result.Error != nil {
4 changes: 2 additions & 2 deletions backend/utils/graphs.go
Original file line number Diff line number Diff line change
@@ -14,7 +14,7 @@ import (
)

// ConvertJobsToDiggerJobs jobs is map with project name as a key and a Job as a value
func ConvertJobsToDiggerJobs(jobType scheduler.DiggerCommand, vcsType models.DiggerVCSType, organisationId uint, jobsMap map[string]scheduler.Job, projectMap map[string]configuration.Project, projectsGraph graph.Graph[string, configuration.Project], githubInstallationId int64, branch string, prNumber int, repoOwner string, repoName string, repoFullName string, commitSha string, commentId int64, placeholderCommentIdForReport *string, diggerConfigStr string, gitlabProjectId int) (*uuid.UUID, map[string]*models.DiggerJob, error) {
func ConvertJobsToDiggerJobs(jobType scheduler.DiggerCommand, vcsType models.DiggerVCSType, organisationId uint, jobsMap map[string]scheduler.Job, projectMap map[string]configuration.Project, projectsGraph graph.Graph[string, configuration.Project], githubInstallationId int64, branch string, prNumber int, repoOwner string, repoName string, repoFullName string, commitSha string, commentId int64, placeholderCommentIdForReport *string, diggerConfigStr string, gitlabProjectId int, aiSummaryCommentId string, reportTerraformOutput bool) (*uuid.UUID, map[string]*models.DiggerJob, error) {
result := make(map[string]*models.DiggerJob)
organisation, err := models.DB.GetOrganisationById(organisationId)
if err != nil {
@@ -43,7 +43,7 @@ func ConvertJobsToDiggerJobs(jobType scheduler.DiggerCommand, vcsType models.Dig

log.Printf("marshalledJobsMap: %v\n", marshalledJobsMap)

batch, err := models.DB.CreateDiggerBatch(vcsType, githubInstallationId, repoOwner, repoName, repoFullName, prNumber, diggerConfigStr, branch, jobType, &commentId, placeholderCommentIdForReport, gitlabProjectId)
batch, err := models.DB.CreateDiggerBatch(vcsType, githubInstallationId, repoOwner, repoName, repoFullName, prNumber, diggerConfigStr, branch, jobType, &commentId, placeholderCommentIdForReport, gitlabProjectId, aiSummaryCommentId, reportTerraformOutput)
if err != nil {
return nil, nil, fmt.Errorf("failed to create batch: %v", err)
}
4 changes: 2 additions & 2 deletions ee/backend/controllers/gitlab.go
Original file line number Diff line number Diff line change
@@ -333,7 +333,7 @@ func handlePullRequestEvent(gitlabProvider utils.GitlabProvider, payload *gitlab
log.Printf("strconv.ParseInt error: %v", err)
utils.InitCommentReporter(glService, prNumber, fmt.Sprintf(":x: could not handle commentId: %v", err))
}
batchId, _, err := utils.ConvertJobsToDiggerJobs(*diggerCommand, models.DiggerVCSGitlab, organisationId, impactedJobsMap, impactedProjectsMap, projectsGraph, 0, branch, prNumber, repoOwner, repoName, repoFullName, commitSha, commentId, nil, diggeryamlStr, projectId)
batchId, _, err := utils.ConvertJobsToDiggerJobs(*diggerCommand, models.DiggerVCSGitlab, organisationId, impactedJobsMap, impactedProjectsMap, projectsGraph, 0, branch, prNumber, repoOwner, repoName, repoFullName, commitSha, commentId, nil, diggeryamlStr, projectId, "", false)
if err != nil {
log.Printf("ConvertJobsToDiggerJobs error: %v", err)
utils.InitCommentReporter(glService, prNumber, fmt.Sprintf(":x: ConvertJobsToDiggerJobs error: %v", err))
@@ -524,7 +524,7 @@ func handleIssueCommentEvent(gitlabProvider utils.GitlabProvider, payload *gitla
log.Printf("ParseInt err: %v", err)
return fmt.Errorf("parseint error: %v", err)
}
batchId, _, err := utils.ConvertJobsToDiggerJobs(*diggerCommand, models.DiggerVCSGitlab, organisationId, impactedProjectsJobMap, impactedProjectsMap, projectsGraph, 0, branch, issueNumber, repoOwner, repoName, repoFullName, commitSha, commentId64, nil, diggerYmlStr, projectId)
batchId, _, err := utils.ConvertJobsToDiggerJobs(*diggerCommand, models.DiggerVCSGitlab, organisationId, impactedProjectsJobMap, impactedProjectsMap, projectsGraph, 0, branch, issueNumber, repoOwner, repoName, repoFullName, commitSha, commentId64, nil, diggerYmlStr, projectId, "", false)
if err != nil {
log.Printf("ConvertJobsToDiggerJobs error: %v", err)
utils.InitCommentReporter(glService, issueNumber, fmt.Sprintf(":x: ConvertJobsToDiggerJobs error: %v", err))
2 changes: 1 addition & 1 deletion ee/backend/hooks/github.go
Original file line number Diff line number Diff line change
@@ -151,7 +151,7 @@ var DriftReconcilliationHook ce_controllers.IssueCommentHook = func(gh utils.Git
utils.InitCommentReporter(ghService, issueNumber, fmt.Sprintf(":x: could not handle commentId: %v", err))
}

batchId, _, err := utils.ConvertJobsToDiggerJobs(*diggerCommand, "github", orgId, impactedProjectsJobMap, impactedProjectsMap, projectsGraph, installationId, defaultBranch, issueNumber, repoOwner, repoName, repoFullName, "", reporterCommentId, nil, diggerYmlStr, 0)
batchId, _, err := utils.ConvertJobsToDiggerJobs(*diggerCommand, "github", orgId, impactedProjectsJobMap, impactedProjectsMap, projectsGraph, installationId, defaultBranch, issueNumber, repoOwner, repoName, repoFullName, "", reporterCommentId, nil, diggerYmlStr, 0, "", false)
if err != nil {
log.Printf("ConvertJobsToDiggerJobs error: %v", err)
utils.InitCommentReporter(ghService, issueNumber, fmt.Sprintf(":x: ConvertJobsToDiggerJobs error: %v", err))
Loading
Oops, something went wrong.
You are viewing a condensed version of this merge commit. You can view the full changes here.