in http/main.go [84:134]
func (h *httpNotifier) SendNotification(ctx context.Context, build *cbpb.Build) error {
if !h.filter.Apply(ctx, build) {
log.V(2).Infof("not sending HTTP request for event (build id = %s, status = %v)", build.Id, build.Status)
return nil
}
log.Infof("sending HTTP request for event (build id = %s, status = %s)", build.Id, build.Status)
bindings, err := h.br.Resolve(ctx, nil, build)
if err != nil {
return fmt.Errorf("failed to resolve bindings: %w", err)
}
h.tmplView = ¬ifiers.TemplateView{
Build: ¬ifiers.BuildView{Build: build},
Params: bindings,
}
logURL, err := notifiers.AddUTMParams(build.LogUrl, notifiers.HTTPMedium)
if err != nil {
return fmt.Errorf("failed to add UTM params: %w", err)
}
build.LogUrl = logURL
payload := new(bytes.Buffer)
var buf bytes.Buffer
if err := h.tmpl.Execute(&buf, h.tmplView); err != nil {
return err
}
err = json.NewEncoder(payload).Encode(buf)
if err != nil {
return fmt.Errorf("failed to encode payload: %w", err)
}
req, err := http.NewRequestWithContext(ctx, http.MethodPost, h.url, strings.NewReader(buf.String()))
if err != nil {
return fmt.Errorf("failed to create a new HTTP request: %w", err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("User-Agent", "GCB-Notifier/0.1 (http)")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return fmt.Errorf("failed to make HTTP request: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
log.Warningf("got a non-OK response status %q (%d) from %q", resp.Status, resp.StatusCode, h.url)
}
log.V(2).Infoln("send HTTP request successfully")
return nil
}