Skip to content

Commit

Permalink
feat: implement outdated command
Browse files Browse the repository at this point in the history
This allow to present all new versions available for the pkg installed.
It is a lot useful because otherwise you need to check this manually.
  • Loading branch information
guerinoni committed Jan 31, 2025
1 parent 15e2fb1 commit 9672a6d
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 0 deletions.
45 changes: 45 additions & 0 deletions internal/boxcli/outdated.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package boxcli

import (
"github.com/pkg/errors"
"github.com/spf13/cobra"
"go.jetpack.io/devbox/internal/devbox"
"go.jetpack.io/devbox/internal/devbox/devopt"
)

func outdatedCmd() *cobra.Command {
flags := listCmdFlags{}
command := &cobra.Command{
Use: "outdated",
Short: "Show all outdated packages",
Args: cobra.MaximumNArgs(0),
PreRunE: ensureNixInstalled,
RunE: func(cmd *cobra.Command, _ []string) error {
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
}

resutls, err := box.Outdated(cmd.Context())

Check warning on line 26 in internal/boxcli/outdated.go

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"resutls" should be "results".
if err != nil {
return errors.WithStack(err)
}

if len(resutls) == 0 {

Check warning on line 31 in internal/boxcli/outdated.go

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"resutls" should be "results".
cmd.Println("Your packages are up to date!")
return nil
}

cmd.Println("The following packages can be updated:")
for pkg, version := range resutls {

Check warning on line 37 in internal/boxcli/outdated.go

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"resutls" should be "results".
cmd.Printf(" * %-30s %s -> %s\n", pkg, version.Current, version.Latest)
}
return nil
},
}

return command
}
1 change: 1 addition & 0 deletions internal/boxcli/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ func RootCmd() *cobra.Command {
command.AddCommand(infoCmd())
command.AddCommand(initCmd())
command.AddCommand(installCmd())
command.AddCommand(outdatedCmd())
command.AddCommand(integrateCmd())
command.AddCommand(listCmd())
command.AddCommand(logCmd())
Expand Down
43 changes: 43 additions & 0 deletions internal/devbox/packages.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"go.jetpack.io/devbox/internal/devpkg"
"go.jetpack.io/devbox/internal/devpkg/pkgtype"
"go.jetpack.io/devbox/internal/lock"
"go.jetpack.io/devbox/internal/searcher"
"go.jetpack.io/devbox/internal/setup"
"go.jetpack.io/devbox/internal/shellgen"
"go.jetpack.io/devbox/internal/telemetry"
Expand All @@ -43,6 +44,48 @@ const StateOutOfDateMessage = "Your devbox environment may be out of date. Run %
// packages.go has functions for adding, removing and getting info about nix
// packages

type UpdateVersion struct {
Current string
Latest string
}

// Outdated returns a map of package names to their available latest version.
func (d *Devbox) Outdated(ctx context.Context) (map[string]UpdateVersion, error) {
ctx, task := trace.NewTask(ctx, "devboxOutdated")
defer task.End()

outdatedPackages := map[string]UpdateVersion{}

for _, pkg := range d.AllPackages() {
if strings.HasSuffix(pkg.Versioned(), "latest") {
continue
}

result, err := searcher.Client().Search(ctx, pkg.CanonicalName())
if err != nil {
return nil, err
}

for _, p := range result.Packages {
if p.Name == pkg.CanonicalName() {
for _, v := range p.Versions {
vv, err := pkg.ResolvedVersion()
if err != nil {
return nil, err
}

if v.Version > vv {
outdatedPackages[p.Name] = UpdateVersion{Current: vv, Latest: v.Version}
break
}
}
}
}
}

return outdatedPackages, nil
}

// Add adds the `pkgs` to the config (i.e. devbox.json) and nix profile for this
// devbox project
func (d *Devbox) Add(ctx context.Context, pkgsNames []string, opts devopt.AddOpts) error {
Expand Down

0 comments on commit 9672a6d

Please sign in to comment.