Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sometimes aqua g outputs non latest version #2354

Closed
suzuki-shunsuke opened this issue Oct 16, 2023 · 3 comments · Fixed by #2750
Closed

Sometimes aqua g outputs non latest version #2354

suzuki-shunsuke opened this issue Oct 16, 2023 · 3 comments · Fixed by #2750
Labels
bug Something isn't working
Milestone

Comments

@suzuki-shunsuke
Copy link
Member

suzuki-shunsuke commented Oct 16, 2023

aqua info

$ aqua info
$ aqua info
{
  "version": "2.13.1",
  "commit_hash": "f2f18e0919d1bcac4944407e9a7a85db7ecbea72",
  "os": "darwin",
  "arch": "arm64",
  "pwd": "/Users/(USER)/Documents/test/aqua/yooo",
  "root_dir": "/Users/(USER)/.local/share/aquaproj-aqua",
  "env": {
    "AQUA_GLOBAL_CONFIG": "/Users/(USER)/repos/src/github.com/aquaproj/aqua-registry/aqua-all.yaml",
    "AQUA_PROGRESS_BAR": "true"
  },
  "config_files": [
    {
      "path": "/Users/(USER)/Documents/test/aqua/yooo/aqua.yaml"
    },
    {
      "path": "/Users/(USER)/Documents/test/aqua/aqua.yaml"
    },
    {
      "path": "/Users/(USER)/Documents/test/aqua/aqua.yaml"
    }
  ]
}

Overview

Sometimes aqua g outputs non latest version

How to reproduce

aqua.yaml

registries:
- type: standard
  ref: v4.67.0 # renovate: depName=aquaproj/aqua-registry
packages:

Executed command and output

$ aqua g grafana/mimir/query-tee                     
- name: grafana/mimir/query-tee@mimir-2.9.2

Debug output

No response

Expected behaviour

The version should be the latest version mimir-2.10.2.

Actual behaviour

The version is mimir-2.9.2, which isn't the latest.

mimir-2.9.2 was released after mimir-2.10.2, but this wasn't the latest.

https://github.com/grafana/mimir/releases

Important Factoids

No response

Reference

@suzuki-shunsuke
Copy link
Member Author

suzuki-shunsuke commented Oct 16, 2023

  1. Should use GetLatestVersion before listing versions. fix(versiongetter): Fix getting the latest version #2356
  2. The result of list should be sorted by TagName

if len(filters) == 0 {
release, _, err := g.gh.GetLatestRelease(ctx, repoOwner, repoName)
if err != nil {
return "", fmt.Errorf("get the latest GitHub Release: %w", err)
}
return release.GetTagName(), nil
}
opt := &github.ListOptions{
PerPage: 30, //nolint:gomnd
}
for {
releases, _, err := g.gh.ListReleases(ctx, repoOwner, repoName, opt)
if err != nil {
return "", fmt.Errorf("list tags: %w", err)
}
for _, release := range releases {
if filterRelease(release, filters) {
return release.GetTagName(), nil
}
}
if len(releases) != opt.PerPage {
return "", nil
}
opt.Page++
}

@suzuki-shunsuke
Copy link
Member Author

@suzuki-shunsuke
Copy link
Member Author

aqua gr parses versions and sort them by semver.
This logic can be used to get the latest version.

func GetVersionAndPrefix(tag string) (*version.Version, string, error) {
if v, err := version.NewVersion(tag); err == nil {
return v, "", nil
}
a := versionPattern.FindStringSubmatch(tag)
if a == nil {
return nil, "", nil
}
v, err := version.NewVersion(a[2])
if err != nil {
return nil, "", err //nolint:wrapcheck
}
return v, a[1], nil
}
func (c *Controller) getPackageInfoWithVersionOverrides(ctx context.Context, logE *logrus.Entry, pkgName string, pkgInfo *registry.PackageInfo, limit int) (*registry.PackageInfo, []string) {
ghReleases := c.listReleases(ctx, logE, pkgInfo, limit)
releases := make([]*Release, len(ghReleases))
for i, release := range ghReleases {
tag := release.GetTagName()
v, prefix, err := GetVersionAndPrefix(tag)
if err != nil {
logE.WithField("tag_name", tag).WithError(err).Warn("parse a tag as semver")
}
releases[i] = &Release{
ID: release.GetID(),
Tag: tag,
Version: v,
VersionPrefix: prefix,
}
}
sort.Slice(releases, func(i, j int) bool {
r1 := releases[i]
r2 := releases[j]
v1 := r1.Version
v2 := r2.Version
if v1 == nil || v2 == nil {
return r1.Tag <= r2.Tag
}
return v1.LessThan(v2)
})

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
Status: Done
Development

Successfully merging a pull request may close this issue.

1 participant