mirror of
https://github.com/kairos-io/kairos-agent.git
synced 2025-09-25 13:33:41 +00:00
Add "--all" flag to list-releases to print older releases too
This will allow us to fix the broken test in master and also allow people to downgrade to older releases. Signed-off-by: Dimitris Karakasilis <dimitris@karakasilis.me>
This commit is contained in:
@@ -34,18 +34,24 @@ func CurrentImage() (string, error) {
|
|||||||
return artifact.ContainerName(registryAndOrg)
|
return artifact.ContainerName(registryAndOrg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListReleases(includePrereleases bool) ([]string, error) {
|
func ListAllReleases(includePrereleases bool) ([]string, error) {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
providerTags, err := getReleasesFromProvider(includePrereleases)
|
tagList, err := allReleases()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("warn: %s", err.Error())
|
return []string{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(providerTags) != 0 {
|
if !includePrereleases {
|
||||||
return providerTags, nil
|
tagList = tagList.NoPrereleases()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return tagList.FullImages()
|
||||||
|
}
|
||||||
|
|
||||||
|
func ListNewerReleases(includePrereleases bool) ([]string, error) {
|
||||||
|
var err error
|
||||||
|
|
||||||
tagList, err := newerReleases()
|
tagList, err := newerReleases()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []string{}, err
|
return []string{}, err
|
||||||
@@ -98,6 +104,25 @@ func upgrade(source string, force, strictValidations bool, dirs []string, preRel
|
|||||||
return hook.Run(*c, upgradeSpec, hook.AfterUpgrade...)
|
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) {
|
func newerReleases() (versioneer.TagList, error) {
|
||||||
artifact, err := versioneer.NewArtifactFromOSRelease()
|
artifact, err := versioneer.NewArtifactFromOSRelease()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
54
main.go
54
main.go
@@ -13,6 +13,7 @@ import (
|
|||||||
|
|
||||||
"github.com/kairos-io/kairos-agent/v2/pkg/action"
|
"github.com/kairos-io/kairos-agent/v2/pkg/action"
|
||||||
"github.com/kairos-io/kairos-agent/v2/pkg/utils"
|
"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/agent"
|
||||||
"github.com/kairos-io/kairos-agent/v2/internal/bus"
|
"github.com/kairos-io/kairos-agent/v2/internal/bus"
|
||||||
@@ -21,6 +22,7 @@ import (
|
|||||||
agentConfig "github.com/kairos-io/kairos-agent/v2/pkg/config"
|
agentConfig "github.com/kairos-io/kairos-agent/v2/pkg/config"
|
||||||
v1 "github.com/kairos-io/kairos-agent/v2/pkg/types/v1"
|
v1 "github.com/kairos-io/kairos-agent/v2/pkg/types/v1"
|
||||||
"github.com/kairos-io/kairos-sdk/bundles"
|
"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/collector"
|
||||||
"github.com/kairos-io/kairos-sdk/machine"
|
"github.com/kairos-io/kairos-sdk/machine"
|
||||||
"github.com/kairos-io/kairos-sdk/schema"
|
"github.com/kairos-io/kairos-sdk/schema"
|
||||||
@@ -95,6 +97,7 @@ See https://kairos.io/docs/upgrade/manual/ for documentation.
|
|||||||
Usage: "Output format (json|yaml|terminal)",
|
Usage: "Output format (json|yaml|terminal)",
|
||||||
},
|
},
|
||||||
&cli.BoolFlag{Name: "pre", Usage: "Include pre-releases (rc, beta, alpha)"},
|
&cli.BoolFlag{Name: "pre", Usage: "Include pre-releases (rc, beta, alpha)"},
|
||||||
|
&cli.BoolFlag{Name: "all", Usage: "Include older releases"},
|
||||||
},
|
},
|
||||||
Name: "list-releases",
|
Name: "list-releases",
|
||||||
Description: `List all available releases versions`,
|
Description: `List all available releases versions`,
|
||||||
@@ -105,18 +108,41 @@ See https://kairos.io/docs/upgrade/manual/ for documentation.
|
|||||||
}
|
}
|
||||||
fmt.Printf("Current image:\n%s\n\n", currentImage)
|
fmt.Printf("Current image:\n%s\n\n", currentImage)
|
||||||
|
|
||||||
fmt.Println("Available releases with higher versions:")
|
var tags []string
|
||||||
releases, err := agent.ListReleases(c.Bool("pre"))
|
tags, err = getReleasesFromProvider(c.Bool("pre"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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")
|
fmt.Println("No newer releases found")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, r := range releases {
|
for _, r := range tags {
|
||||||
fmt.Println(r)
|
fmt.Println(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -779,3 +805,23 @@ func validateSource(source string) error {
|
|||||||
|
|
||||||
return nil
|
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
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user