github.com/redhat-appstudio/e2e-tests@v0.0.0-20240520140907-9709f6f59323/pkg/clients/slack/slack.go (about) 1 package slack 2 3 import ( 4 "fmt" 5 "io" 6 "net/http" 7 "os" 8 9 "github.com/redhat-appstudio/e2e-tests/pkg/constants" 10 "github.com/slack-go/slack" 11 v1 "k8s.io/test-infra/prow/apis/prowjobs/v1" 12 "sigs.k8s.io/yaml" 13 ) 14 15 func ReportIssue(msg string, errLevel ErrorSeverityLevel) error { 16 api := slack.New(os.Getenv(constants.SLACK_BOT_TOKEN_ENV)) 17 msg = fmt.Sprintf("%s\nError message: ```\n%s\n```", getMessageHeader(errLevel), msg) 18 19 jobID := os.Getenv("PROW_JOB_ID") 20 if jobID != "" { 21 msg += fmt.Sprintf("\n<%s|*View logs*>", getProwJobURL(jobID)) 22 } 23 24 _, _, err := api.PostMessage( 25 constants.SlackCIReportsChannelID, 26 slack.MsgOptionText(msg, false), 27 slack.MsgOptionAsUser(true), 28 ) 29 return err 30 } 31 32 func getMessageHeader(errLevel ErrorSeverityLevel) string { 33 headerMsg := "*E2E job alert*" 34 return fmt.Sprintf("%s %s %s", alertEmojiType[errLevel], headerMsg, alertEmojiType[errLevel]) 35 } 36 37 func getProwJobURL(jobID string) string { 38 r, err := http.Get(fmt.Sprintf("https://prow.ci.openshift.org/prowjob?prowjob=%s", jobID)) 39 errTemplate := "failed to get prow job URL:" 40 if err != nil { 41 return fmt.Sprintf("%s %s", errTemplate, err) 42 } 43 if r.StatusCode > 299 { 44 return fmt.Sprintf("%s got response status code %v", errTemplate, r.StatusCode) 45 } 46 body, err := io.ReadAll(r.Body) 47 if err != nil { 48 return fmt.Sprintf("%s %s", errTemplate, err) 49 } 50 var pj v1.ProwJob 51 err = yaml.Unmarshal(body, &pj) 52 if err != nil { 53 return fmt.Sprintf("%s %s", errTemplate, err) 54 } 55 return pj.Status.URL 56 }