Skip to content

Commit

Permalink
Merge pull request #199 from kairos-io/add-flag-to-print-all-releases
Browse files Browse the repository at this point in the history
Add "--all" flag to list-releases to print older releases too
  • Loading branch information
jimmykarily authored Jan 11, 2024
2 parents 53f4916 + 9a8c404 commit 845b9b1
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 9 deletions.
35 changes: 30 additions & 5 deletions internal/agent/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,24 @@ func CurrentImage() (string, error) {
return artifact.ContainerName(registryAndOrg)
}

func ListReleases(includePrereleases bool) ([]string, error) {
func ListAllReleases(includePrereleases bool) ([]string, error) {
var err error

providerTags, err := getReleasesFromProvider(includePrereleases)
tagList, err := allReleases()
if err != nil {
fmt.Printf("warn: %s", err.Error())
return []string{}, err
}

if len(providerTags) != 0 {
return providerTags, nil
if !includePrereleases {
tagList = tagList.NoPrereleases()
}

return tagList.FullImages()
}

func ListNewerReleases(includePrereleases bool) ([]string, error) {
var err error

tagList, err := newerReleases()
if err != nil {
return []string{}, err
Expand Down Expand Up @@ -98,6 +104,25 @@ func upgrade(source string, force, strictValidations bool, dirs []string, preRel
return hook.Run(*c, upgradeSpec, hook.AfterUpgrade...)
}

func allReleases() (versioneer.TagList, error) {
artifact, err := versioneer.NewArtifactFromOSRelease()
if err != nil {
return versioneer.TagList{}, err
}

registryAndOrg, err := utils.OSRelease("REGISTRY_AND_ORG")
if err != nil {
return versioneer.TagList{}, err
}

tagList, err := artifact.TagList(registryAndOrg)
if err != nil {
return tagList, err
}

return tagList.OtherAnyVersion().RSorted(), nil
}

func newerReleases() (versioneer.TagList, error) {
artifact, err := versioneer.NewArtifactFromOSRelease()
if err != nil {
Expand Down
54 changes: 50 additions & 4 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (

"github.com/kairos-io/kairos-agent/v2/pkg/action"
"github.com/kairos-io/kairos-agent/v2/pkg/utils"
"github.com/mudler/go-pluggable"

"github.com/kairos-io/kairos-agent/v2/internal/agent"
"github.com/kairos-io/kairos-agent/v2/internal/bus"
Expand All @@ -21,6 +22,7 @@ import (
agentConfig "github.com/kairos-io/kairos-agent/v2/pkg/config"
v1 "github.com/kairos-io/kairos-agent/v2/pkg/types/v1"
"github.com/kairos-io/kairos-sdk/bundles"
events "github.com/kairos-io/kairos-sdk/bus"
"github.com/kairos-io/kairos-sdk/collector"
"github.com/kairos-io/kairos-sdk/machine"
"github.com/kairos-io/kairos-sdk/schema"
Expand Down Expand Up @@ -95,6 +97,7 @@ See https://kairos.io/docs/upgrade/manual/ for documentation.
Usage: "Output format (json|yaml|terminal)",
},
&cli.BoolFlag{Name: "pre", Usage: "Include pre-releases (rc, beta, alpha)"},
&cli.BoolFlag{Name: "all", Usage: "Include older releases"},
},
Name: "list-releases",
Description: `List all available releases versions`,
Expand All @@ -105,18 +108,41 @@ See https://kairos.io/docs/upgrade/manual/ for documentation.
}
fmt.Printf("Current image:\n%s\n\n", currentImage)

fmt.Println("Available releases with higher versions:")
releases, err := agent.ListReleases(c.Bool("pre"))
var tags []string
tags, err = getReleasesFromProvider(c.Bool("pre"))
if err != nil {
return err
}

if len(releases) == 0 {
// Provider returns tags. Print and return.
if len(tags) > 0 {
fmt.Println("Available releases from provider:")
for _, r := range tags {
fmt.Println(r)
return nil
}
}

if c.Bool("all") {
fmt.Println("Available releases (all):")
tags, err = agent.ListAllReleases(c.Bool("pre"))
if err != nil {
return err
}
} else {
fmt.Println("Available releases with higher version:")
tags, err = agent.ListNewerReleases(c.Bool("pre"))
if err != nil {
return err
}
}

if len(tags) == 0 {
fmt.Println("No newer releases found")
return nil
}

for _, r := range releases {
for _, r := range tags {
fmt.Println(r)
}

Expand Down Expand Up @@ -779,3 +805,23 @@ func validateSource(source string) error {

return nil
}

func getReleasesFromProvider(includePrereleases bool) ([]string, error) {
var tags []string
bus.Manager.Response(events.EventAvailableReleases, func(p *pluggable.Plugin, r *pluggable.EventResponse) {
if r.Data == "" {
return
}
if err := json.Unmarshal([]byte(r.Data), &tags); err != nil {
fmt.Printf("warn: failed unmarshalling data: '%s'\n", err.Error())
}
})

configYAML := fmt.Sprintf("IncludePreReleases: %t", includePrereleases)
_, err := bus.Manager.Publish(events.EventAvailableReleases, events.EventPayload{Config: configYAML})
if err != nil {
return tags, fmt.Errorf("failed publishing event: %w", err)
}

return tags, nil
}

0 comments on commit 845b9b1

Please sign in to comment.