This commit is contained in:
2025-04-15 01:32:02 +03:00
parent fe3acf5b85
commit 240ee852c8
12 changed files with 201 additions and 131 deletions

View File

@@ -23,6 +23,7 @@ import (
"context"
"fmt"
"log/slog"
"syscall"
"github.com/leonelquinteros/gotext"
"github.com/urfave/cli/v2"
@@ -30,6 +31,7 @@ import (
"golang.org/x/exp/maps"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
appbuilder "gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils/app_builder"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/overrides"
@@ -55,53 +57,44 @@ func UpgradeCmd() *cli.Command {
},
},
Action: func(c *cli.Context) error {
err := utils.DropCapsToAlrUser()
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error dropping capabilities"), err)
if err := utils.ExitIfNotRoot(); err != nil {
return err
}
ctx := c.Context
cfg := config.New()
err = cfg.Load()
deps, err := appbuilder.
New(ctx).
WithConfig().
WithDB().
WithReposNoPull().
WithDistroInfo().
WithManager().
Build()
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error loading config"), err)
return err
}
defer deps.Defer()
db := database.New(cfg)
rs := repos.New(cfg, db)
err = db.Init(ctx)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error initialization database"), err)
}
builder, err := build.NewMainBuilder(
cfg,
rs,
builder, cleanup, err := build.NewMainBuilder(
deps.Cfg,
deps.Manager,
deps.Repos,
)
if err != nil {
return err
}
defer cleanup()
info, err := distro.ParseOSRelease(ctx)
slog.Debug("ParseOSRelease", "err", err)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error parsing os-release file"), err)
}
slog.Warn("", "uid", syscall.Getuid(), "gid", syscall.Getgid())
mgr := manager.Detect()
if mgr == nil {
return cliutils.FormatCliExit(gotext.Get("Unable to detect a supported package manager on the system"), nil)
}
if cfg.AutoPull() {
err = rs.Pull(ctx, cfg.Repos())
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error pulling repos"), err)
if deps.Cfg.AutoPull() {
if err := deps.Repos.Pull(ctx, deps.Cfg.Repos()); err != nil {
return cliutils.FormatCliExit(gotext.Get("Error pulling repositories"), err)
}
}
updates, err := checkForUpdates(ctx, mgr, cfg, db, rs, info)
updates, err := checkForUpdates(ctx, deps.Manager, deps.Cfg, deps.DB, deps.Repos, deps.Info)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error checking for updates"), err)
}
@@ -114,8 +107,8 @@ func UpgradeCmd() *cli.Command {
Clean: c.Bool("clean"),
Interactive: c.Bool("interactive"),
},
Info: info,
PkgFormat_: build.GetPkgFormat(mgr),
Info: deps.Info,
PkgFormat_: build.GetPkgFormat(deps.Manager),
},
updates,
)