package milestonereport import ( "fmt" "github.com/google/go-github/v47/github" // needed for the postgres driver "edge-infra.dev/pkg/f8n/devinfra/database/psql" "edge-infra.dev/pkg/f8n/devinfra/jack/constants" "edge-infra.dev/pkg/f8n/devinfra/reports" "edge-infra.dev/pkg/f8n/devinfra/jack/plugin" ) const ( dbUser = "jack-bot@ret-edge-dev-infra.iam" ) func init() { plugin.RegisterIssueHandler(constants.PluginMilestoneReport, handleIssue) } func handleIssue(hp plugin.HandlerParams, ce github.IssuesEvent) { hp.Log.WithName(constants.PluginMilestoneReport) action := ce.GetAction() switch { case action == "milestoned" || action == "labeled" || action == "unlabeled" || action == "edited": err := updateIssue(hp, ce) if err != nil { hp.Log.Error(err, "Failed to update issue") } } } func updateIssue(hp plugin.HandlerParams, ce github.IssuesEvent) error { log := hp.Log issue := ce.GetIssue() log.Info("trying to connect to the db") psql, err := psql.New(psql.WithUser(dbUser)) if err != nil { log.Error(err, "failed to open connection") return err } insertion := reports.CreateInsertion(issue) // attempt to update the issue if it doesnt exist add it issueScan, err := insertion.GetOrAddIssue(psql) if err != nil { log.Error(err, "failed to add or update issue") return err } stmt, err := psql.DB.Prepare("update issues set milestone_number=$1, title=$2, size=$4, kind=$5, area=$6 where number=$3") if err != nil { return err } _, err = stmt.Exec(insertion.Milestones.Number, insertion.Issues.Title, insertion.Issues.Number, insertion.Issues.Size, insertion.Issues.Kind, insertion.Issues.Area) if err != nil { return err } log.Info(fmt.Sprintf("Updated issue %d to milestone %v in table", issueScan.Number, insertion.Milestones.Title)) return nil }