mirror of
https://github.com/turbot/steampipe.git
synced 2025-12-19 18:12:43 -05:00
69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package modinstaller
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
|
|
"github.com/Masterminds/semver/v3"
|
|
"github.com/go-git/go-git/v5"
|
|
"github.com/go-git/go-git/v5/config"
|
|
"github.com/go-git/go-git/v5/storage/memory"
|
|
)
|
|
|
|
func getGitUrl(modName string) string {
|
|
return fmt.Sprintf("https://%s", modName)
|
|
}
|
|
|
|
func getTags(repo string) ([]string, error) {
|
|
// Create the remote with repository URL
|
|
rem := git.NewRemote(memory.NewStorage(), &config.RemoteConfig{
|
|
Name: "origin",
|
|
URLs: []string{repo},
|
|
})
|
|
|
|
// load remote references
|
|
refs, err := rem.List(&git.ListOptions{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// filters the references list and only keeps tags
|
|
var tags []string
|
|
for _, ref := range refs {
|
|
if ref.Name().IsTag() {
|
|
tags = append(tags, ref.Name().Short())
|
|
}
|
|
}
|
|
|
|
return tags, nil
|
|
}
|
|
|
|
func getTagVersionsFromGit(repo string, includePrerelease bool) (semver.Collection, error) {
|
|
tags, err := getTags(repo)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
versions := make(semver.Collection, len(tags))
|
|
// handle index manually as we may not add all tags - if we cannot parse them as a version
|
|
idx := 0
|
|
for _, raw := range tags {
|
|
v, err := semver.NewVersion(raw)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
if !includePrerelease && v.Metadata() != "" || v.Prerelease() != "" {
|
|
continue
|
|
}
|
|
versions[idx] = v
|
|
idx++
|
|
}
|
|
// shrink slice
|
|
versions = versions[:idx]
|
|
|
|
// sort the versions in REVERSE order
|
|
sort.Sort(sort.Reverse(versions))
|
|
return versions, nil
|
|
}
|