Skip to content

Commit

Permalink
Modified checks/updates.go , introducing UpdateChecker struct , made …
Browse files Browse the repository at this point in the history
…check for 'mandatory' case insensitive

Signed-off-by: sibashi <[email protected]>
  • Loading branch information
TheRealSibasishBehera committed Jan 31, 2023
1 parent e448345 commit fa22368
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 15 deletions.
65 changes: 52 additions & 13 deletions checks/updates.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ import (
"strings"
)

func CheckForUpdates() error {
client := github.NewClient(nil)
type UpdateChecker struct {
Client *github.Client
}

// Fetch all releases from the GitHub API
releases, _, err := client.Repositories.ListReleases(context.Background(),
func (c *UpdateChecker) FetchReleases() ([]*github.RepositoryRelease, error) {
releases, _, err := c.Client.Repositories.ListReleases(context.Background(),
"kubearmor",
"kubearmor-client",
&github.ListOptions{
Expand All @@ -22,32 +23,70 @@ func CheckForUpdates() error {
},
)
if err != nil {
fmt.Println("Error fetching releases:", err)
return err
return nil, fmt.Errorf("Error fetching releases from GitHub: %v", err)
}
return releases, nil
}

// Find the latest release with the keyword "mandatory" in its release notes
func (c *UpdateChecker) GetLatestMandatoryRelease(releases []*github.RepositoryRelease) (*github.RepositoryRelease, error) {
var latestMandatoryRelease *github.RepositoryRelease
for _, release := range releases {
if strings.Contains(*release.Body, "mandatory") {
if strings.Contains(*release.Body, "mandatory") || strings.Contains(*release.Body, "MANDATORY") {
latestMandatoryRelease = release
break
}
}
if latestMandatoryRelease == nil {
return nil, nil
}
return latestMandatoryRelease, nil
}

// Compare the current version with the latest release version
currentVersion := selfupdate.GitSummary
if err != nil {
return err
func (c *UpdateChecker) CompareVersions(currentVersion string, latestMandatoryRelease *github.RepositoryRelease) error {
if latestMandatoryRelease == nil {
color.HiGreen("The client is up to date.")
return nil
}
if latestMandatoryRelease != nil && !strings.EqualFold(currentVersion, *latestMandatoryRelease.TagName) {
if !strings.EqualFold(currentVersion, *latestMandatoryRelease.TagName) {
color.HiMagenta("A mandatory update is available (current version: %s, latest release: %s).\n",
currentVersion,
*latestMandatoryRelease.TagName,
)
} else {
fmt.Println("The client is up to date.")
}
return nil
}

func (c *UpdateChecker) CheckForUpdates() error {
releases, err := c.FetchReleases()
if err != nil {
return err
}

latestMandatoryRelease, err := c.GetLatestMandatoryRelease(releases)
if err != nil {
return err
}

currentVersion := selfupdate.GitSummary
err = c.CompareVersions(currentVersion, latestMandatoryRelease)
if err != nil {
return fmt.Errorf("Error comparing versions: %v", err)
}
return nil
}

func NewUpdateChecker() *UpdateChecker {
return &UpdateChecker{
Client: github.NewClient(nil),
}
}

func (c *UpdateChecker) Init() error {
err := c.CheckForUpdates()
if err != nil {
return err
}
return nil
}
6 changes: 4 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ import (
)

func main() {
if err := checks.CheckForUpdates(); err != nil {
fmt.Println("Error checking for updates:", err)
u := checks.NewUpdateChecker()
err := u.Init()
if err != nil {
fmt.Printf("Error checking for updates: %v\n", err)
return
}
cmd.Execute()
Expand Down

0 comments on commit fa22368

Please sign in to comment.