mirror of
https://github.com/kairos-io/kairos-agent.git
synced 2025-04-28 03:32:27 +00:00
art: Expose to sdk upgrade/list events
This commit is contained in:
parent
7fb4c70630
commit
fe03afa167
@ -2,36 +2,80 @@ package agent
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"github.com/c3os-io/c3os/internal/github"
|
||||
events "github.com/c3os-io/c3os/sdk/bus"
|
||||
|
||||
"github.com/c3os-io/c3os/internal/bus"
|
||||
"github.com/c3os-io/c3os/pkg/github"
|
||||
"github.com/c3os-io/c3os/pkg/utils"
|
||||
"github.com/mudler/go-pluggable"
|
||||
)
|
||||
|
||||
func Upgrade(version, image string, force, debug bool) error {
|
||||
if version == "" && image == "" {
|
||||
func ListReleases() []string {
|
||||
releases := []string{}
|
||||
|
||||
bus.Manager.Response(events.EventAvailableReleases, func(p *pluggable.Plugin, r *pluggable.EventResponse) {
|
||||
json.Unmarshal([]byte(r.Data), &releases)
|
||||
})
|
||||
|
||||
bus.Manager.Publish(events.EventAvailableReleases, nil)
|
||||
|
||||
if len(releases) == 0 {
|
||||
githubRepo, err := utils.OSRelease("GITHUB_REPO")
|
||||
if err != nil {
|
||||
return err
|
||||
return releases
|
||||
}
|
||||
releases, _ := github.FindReleases(context.Background(), "", githubRepo)
|
||||
releases, _ = github.FindReleases(context.Background(), "", githubRepo)
|
||||
}
|
||||
|
||||
return releases
|
||||
}
|
||||
|
||||
func Upgrade(version, image string, force, debug bool) error {
|
||||
bus.Manager.Initialize()
|
||||
|
||||
if version == "" && image == "" {
|
||||
releases := ListReleases()
|
||||
|
||||
if len(releases) == 0 {
|
||||
return fmt.Errorf("no releases found")
|
||||
}
|
||||
|
||||
version = releases[0]
|
||||
fmt.Println("latest release is ", version)
|
||||
}
|
||||
|
||||
if utils.Version() == version && !force {
|
||||
fmt.Println("latest version already installed. use --force to force upgrade")
|
||||
fmt.Println("version already installed. use --force to force upgrade")
|
||||
return nil
|
||||
}
|
||||
|
||||
discoveredImage := ""
|
||||
bus.Manager.Response(events.EventVersionImage, func(p *pluggable.Plugin, r *pluggable.EventResponse) {
|
||||
discoveredImage = r.Data
|
||||
})
|
||||
|
||||
_, err := bus.Manager.Publish(events.EventVersionImage, &events.VersionImagePayload{
|
||||
Version: version,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
registry, err := utils.OSRelease("IMAGE_REPO")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
img := fmt.Sprintf("%s:%s", registry, version)
|
||||
if discoveredImage != "" {
|
||||
img = discoveredImage
|
||||
}
|
||||
if image != "" {
|
||||
img = image
|
||||
}
|
||||
|
@ -1,49 +0,0 @@
|
||||
package github
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/google/go-github/v40/github"
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
func newHTTPClient(ctx context.Context, token string) *http.Client {
|
||||
if token == "" {
|
||||
return http.DefaultClient
|
||||
}
|
||||
src := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token})
|
||||
return oauth2.NewClient(ctx, src)
|
||||
}
|
||||
|
||||
func FindReleases(ctx context.Context, token, slug string) ([]string, error) {
|
||||
hc := newHTTPClient(ctx, token)
|
||||
cli := github.NewClient(hc)
|
||||
|
||||
repo := strings.Split(slug, "/")
|
||||
if len(repo) != 2 || repo[0] == "" || repo[1] == "" {
|
||||
return nil, fmt.Errorf("Invalid slug format. It should be 'owner/name': %s", slug)
|
||||
}
|
||||
|
||||
rels, res, err := cli.Repositories.ListReleases(ctx, repo[0], repo[1], nil)
|
||||
if err != nil {
|
||||
log.Println("API returned an error response:", err)
|
||||
if res != nil && res.StatusCode == 404 {
|
||||
// 404 means repository not found or release not found. It's not an error here.
|
||||
err = nil
|
||||
log.Println("API returned 404. Repository or release not found")
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
versions := []string{}
|
||||
for _, rel := range rels {
|
||||
if strings.HasPrefix(*rel.Name, "v") {
|
||||
versions = append(versions, *rel.Name)
|
||||
}
|
||||
}
|
||||
return versions, nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user