func AddUTMParams()

in lib/notifiers/notifiers.go [615:643]


func AddUTMParams(logURL string, medium UTMMedium) (string, error) {
	u, err := url.Parse(logURL)
	if err != nil {
		return "", fmt.Errorf("failed to parse URL %q: %w", logURL, err)
	}

	// Use ParseQuery to fail if we get malformed params to start with, since it should never happen.
	vals, err := url.ParseQuery(u.RawQuery)
	if err != nil {
		return "", fmt.Errorf("failed to parse query from %q: %w", logURL, err)
	}

	var m string
	switch medium {
	case EmailMedium, StorageMedium, ChatMedium, HTTPMedium, OtherMedium:
		m = string(medium)
	default:
		return "", fmt.Errorf("unknown UTM medium: %q", medium)
	}

	// Use `Add` instead of `Set` so we don't override any existing params.
	vals.Add("utm_campaign", "google-cloud-build-notifiers")
	vals.Add("utm_medium", m)
	vals.Add("utm_source", "google-cloud-build")

	u.RawQuery = vals.Encode()

	return u.String(), nil
}