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  }