diff --git a/cmd/patch-release-notification/main.go b/cmd/patch-release-notification/main.go index 77555faea246..4c3f06e7e48c 100644 --- a/cmd/patch-release-notification/main.go +++ b/cmd/patch-release-notification/main.go @@ -22,7 +22,6 @@ import ( "embed" "fmt" "io" - "log" "math" "net/http" "os" @@ -91,7 +90,7 @@ func getConfig() (*Config, error) { return &c, nil } -func New(ctx context.Context) (*Options, error) { +func NewOptions(ctx context.Context) (*Options, error) { config, err := getConfig() if err != nil { return nil, fmt.Errorf("failed to get config: %w", err) @@ -102,7 +101,6 @@ func New(ctx context.Context) (*Options, error) { Region: aws.String(config.AWSRegion), }) if err != nil { - log.Println("Error occurred while creating aws session", err) return nil, err } @@ -114,7 +112,7 @@ func New(ctx context.Context) (*Options, error) { } func handler(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { //nolint: gocritic - o, err := New(ctx) + o, err := NewOptions(ctx) if err != nil { return events.APIGatewayProxyResponse{ Body: `{"status": "nok"}`, @@ -122,12 +120,13 @@ func handler(ctx context.Context, request events.APIGatewayProxyRequest) (events }, err } + logrus.Infof("Will pull the path release schedule from: %s", o.Config.SchedulePath) data, err := loadFileOrURL(o.Config.SchedulePath) if err != nil { return events.APIGatewayProxyResponse{ Body: `{"status": "nok"}`, StatusCode: http.StatusInternalServerError, - }, fmt.Errorf("failed to read the file: %w", err) + }, fmt.Errorf("reading the file: %w", err) } patchSchedule := &model.PatchSchedule{} @@ -138,7 +137,7 @@ func handler(ctx context.Context, request events.APIGatewayProxyRequest) (events return events.APIGatewayProxyResponse{ Body: `{"status": "nok"}`, StatusCode: http.StatusInternalServerError, - }, fmt.Errorf("failed to decode the file: %w", err) + }, fmt.Errorf("decoding the file: %w", err) } output := &Template{} @@ -157,7 +156,7 @@ func handler(ctx context.Context, request events.APIGatewayProxyRequest) (events currentTime := time.Now().UTC() days := t.Sub(currentTime).Hours() / 24 intDay, _ := math.Modf(days) - logrus.Infof("cherry pick deadline: %d, days to alert: %d", int(intDay), o.Config.DaysToAlert) + logrus.Infof("Cherry pick deadline: %d, days to alert: %d", int(intDay), o.Config.DaysToAlert) if int(intDay) == o.Config.DaysToAlert { output.Releases = append(output.Releases, TemplateRelease{ Release: patch.Release, @@ -167,6 +166,14 @@ func handler(ctx context.Context, request events.APIGatewayProxyRequest) (events } } + if !shouldSendEmail { + logrus.Info("No email is needed to send") + return events.APIGatewayProxyResponse{ + Body: `{"status": "ok"}`, + StatusCode: http.StatusOK, + }, nil + } + tmpl, err := template.ParseFS(tpls, "templates/email.tmpl") if err != nil { return events.APIGatewayProxyResponse{ @@ -181,19 +188,11 @@ func handler(ctx context.Context, request events.APIGatewayProxyRequest) (events return events.APIGatewayProxyResponse{ Body: `{"status": "nok"}`, StatusCode: http.StatusInternalServerError, - }, fmt.Errorf("parsing values to the template: %w", err) - } - - if !shouldSendEmail { - logrus.Info("No email is needed to send") - return events.APIGatewayProxyResponse{ - Body: `{"status": "ok"}`, - StatusCode: http.StatusOK, - }, nil + }, fmt.Errorf("executing the template: %w", err) } logrus.Info("Sending mail") - subject := "[Please Read] Patch Releases cherry-pick deadline" + subject := "[Please Read] Upcoming Patch Releases Cherry-Pick Deadline for Kubernetes" fromEmail := o.Config.FromEmail recipient := Recipient{ @@ -212,7 +211,7 @@ func handler(ctx context.Context, request events.APIGatewayProxyRequest) (events return events.APIGatewayProxyResponse{ Body: `{"status": "nok"}`, StatusCode: http.StatusInternalServerError, - }, fmt.Errorf("parsing values to the template: %w", err) + }, fmt.Errorf("sending the email: %w", err) } return events.APIGatewayProxyResponse{ @@ -240,9 +239,6 @@ func (o *Options) SendEmailRawSES(messageBody, subject, fromEmail string, recipi recipients = append(recipients, &recipient) } - // Set to emails - msg.SetHeader("To", recipient.toEmails...) - // cc mails mentioned if len(recipient.ccEmails) != 0 { // Need to add cc mail IDs also in recipient list @@ -275,7 +271,7 @@ func (o *Options) SendEmailRawSES(messageBody, subject, fromEmail string, recipi var emailRaw bytes.Buffer _, err := msg.WriteTo(&emailRaw) if err != nil { - log.Printf("failed to write mail: %v\n", err) + logrus.Errorf("Failed to write mail: %v", err) return err } @@ -287,11 +283,11 @@ func (o *Options) SendEmailRawSES(messageBody, subject, fromEmail string, recipi // send raw email _, err = svc.SendRawEmail(input) if err != nil { - log.Println("Error sending mail - ", err) + logrus.Errorf("Error sending mail - %v", err) return err } - log.Println("Email sent successfully to: ", recipient.toEmails) + logrus.Infof("Email sent successfully to: %q", recipient.toEmails) return nil } @@ -314,5 +310,6 @@ func loadFileOrURL(fileRef string) ([]byte, error) { return nil, err } } + return raw, nil } diff --git a/cmd/patch-release-notification/templates/email.tmpl b/cmd/patch-release-notification/templates/email.tmpl index 6fbdd7704e91..69f41922b783 100644 --- a/cmd/patch-release-notification/templates/email.tmpl +++ b/cmd/patch-release-notification/templates/email.tmpl @@ -18,7 +18,7 @@ ensure they have:

- /priority

- /lgtm

- /approve

-

- passing tests

+

- passing tests and not on hold.


Details on the cherry-pick process can be found here:

https://git.k8s.io/community/contributors/devel/sig-release/cherry-picks.md

@@ -27,6 +27,6 @@ ensure they have:

If you have any questions for the Release Managers, please feel free to reach out to us at #release-management (Kubernetes Slack) or release-managers@kubernetes.io


We wish everyone a happy and safe week!

-

SIG-Release Team

+

SIG Release Team