pkg/genlib/fields/version.go (55 lines of code) (raw):

package fields import ( "context" "encoding/json" "errors" "io/ioutil" "net/url" "path" "strings" "golang.org/x/mod/semver" ) func MapVersion(ctx context.Context, baseUrl, integration, kibanaVersion string) (string, error) { searchUrl, err := makeSearchURL(baseUrl, integration, kibanaVersion) if err != nil { return "", err } r, err := getFromURL(ctx, searchUrl.String()) if err != nil { return "", err } var payload []struct { Version string `json:"version"` } body, err := ioutil.ReadAll(r) if err != nil { _ = r.Close() return "", err } if err = json.Unmarshal(body, &payload); err != nil { return "", err } if len(payload) == 0 { return "", errors.New("empty payload") } version := payload[0].Version // semver is picky, requires the prefix if !strings.HasPrefix(version, "v") { version = "v" + version } if !semver.IsValid(version) { return "", errors.New("invalid version") } return payload[0].Version, nil } func makeSearchURL(baseURL, integration, kibanaVersion string) (*url.URL, error) { u, err := url.Parse(baseURL) if err != nil { return nil, err } u.Path = path.Join(u.Path, searchSlug) q := u.Query() q.Set(kibanaVersionSlug, kibanaVersion) q.Set(packageSlug, integration) u.RawQuery = q.Encode() return u, nil }