mirror of
https://github.com/kairos-io/kairos-agent.git
synced 2025-06-03 01:44:53 +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:
parent
53f49169b1
commit
9a8c404cfa
@ -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
|
||||
@ -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 {
|
||||
|
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/utils"
|
||||
"github.com/mudler/go-pluggable"
|
||||
|
||||
"github.com/kairos-io/kairos-agent/v2/internal/agent"
|
||||
"github.com/kairos-io/kairos-agent/v2/internal/bus"
|
||||
@ -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"
|
||||
@ -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`,
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user