From fe3acf5b85052c99c43fe5780edbe2712063a303 Mon Sep 17 00:00:00 2001 From: Maxim Slipenko Date: Tue, 15 Apr 2025 00:20:57 +0300 Subject: [PATCH] wip --- build.go | 66 ++++++++++-------------- install.go | 9 +--- internal/cliutils/app_builder/builder.go | 36 +++++++++++-- internal/translations/default.pot | 64 +++++++++++------------ internal/translations/po/ru/default.po | 64 +++++++++++------------ upgrade.go | 5 +- 6 files changed, 126 insertions(+), 118 deletions(-) diff --git a/build.go b/build.go index 162cc88..b988dbd 100644 --- a/build.go +++ b/build.go @@ -34,8 +34,6 @@ import ( "gitea.plemya-x.ru/Plemya-x/ALR/internal/types" "gitea.plemya-x.ru/Plemya-x/ALR/internal/utils" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/build" - "gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro" - "gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager" ) func BuildCmd() *cli.Command { @@ -88,6 +86,8 @@ func BuildCmd() *cli.Command { WithConfig(). WithDB(). WithReposNoPull(). + WithDistroInfo(). + WithManager(). Build() if err != nil { return cli.Exit(err, 1) @@ -97,23 +97,20 @@ func BuildCmd() *cli.Command { var script string var packages []string - // Обнаружение менеджера пакетов - mgr := manager.Detect() - if mgr == nil { - slog.Error(gotext.Get("Unable to detect a supported package manager on the system")) - os.Exit(1) - } - - info, err := distro.ParseOSRelease(ctx) - if err != nil { - return cliutils.FormatCliExit(gotext.Get("Error parsing os release"), err) - } - var res *build.BuildResult var scriptArgs *build.BuildPackageFromScriptArgs var dbArgs *build.BuildPackageFromDbArgs + buildArgs := &build.BuildArgs{ + Opts: &types.BuildOpts{ + Clean: c.Bool("clean"), + Interactive: c.Bool("interactive"), + }, + PkgFormat_: build.GetPkgFormat(deps.Manager), + Info: deps.Info, + } + switch { case c.IsSet("script"): script, err = filepath.Abs(c.String("script")) @@ -124,16 +121,9 @@ func BuildCmd() *cli.Command { packages = append(packages, c.String("script-package")) scriptArgs = &build.BuildPackageFromScriptArgs{ - Script: script, - Packages: packages, - BuildArgs: build.BuildArgs{ - Opts: &types.BuildOpts{ - Clean: c.Bool("clean"), - Interactive: c.Bool("interactive"), - }, - PkgFormat_: build.GetPkgFormat(mgr), - Info: info, - }, + Script: script, + Packages: packages, + BuildArgs: *buildArgs, } case c.IsSet("package"): // TODO: handle multiple packages @@ -147,11 +137,15 @@ func BuildCmd() *cli.Command { packageSearch = arr[0] } - pkgs, _, _ := deps.Repos.FindPkgs(ctx, []string{packageSearch}) - pkg, ok := pkgs[packageSearch] - if len(pkg) < 1 || !ok { - slog.Error(gotext.Get("Package not found")) - os.Exit(1) + pkgs, _, err := deps.Repos.FindPkgs(ctx, []string{packageSearch}) + if err != nil { + return cliutils.FormatCliExit("failed to find pkgs", err) + } + + pkg := cliutils.FlattenPkgs(ctx, pkgs, "build", c.Bool("interactive")) + + if len(pkg) < 1 { + return cliutils.FormatCliExit(gotext.Get("Package not found"), nil) } if pkg[0].BasePkgName != "" { @@ -159,16 +153,9 @@ func BuildCmd() *cli.Command { } dbArgs = &build.BuildPackageFromDbArgs{ - Package: &pkg[0], - Packages: packages, - BuildArgs: build.BuildArgs{ - Opts: &types.BuildOpts{ - Clean: c.Bool("clean"), - Interactive: c.Bool("interactive"), - }, - PkgFormat_: build.GetPkgFormat(mgr), - Info: info, - }, + Package: &pkg[0], + Packages: packages, + BuildArgs: *buildArgs, } default: return cliutils.FormatCliExit(gotext.Get("Nothing to build"), nil) @@ -212,7 +199,6 @@ func BuildCmd() *cli.Command { return cliutils.FormatCliExit(gotext.Get("Error building package"), err) } - // Перемещение собранных пакетов в рабочую директорию for _, pkgPath := range res.PackagePaths { name := filepath.Base(pkgPath) err = osutils.Move(pkgPath, filepath.Join(wd, name)) diff --git a/install.go b/install.go index ece2eaf..33ad2d0 100644 --- a/install.go +++ b/install.go @@ -31,7 +31,6 @@ import ( "gitea.plemya-x.ru/Plemya-x/ALR/internal/types" "gitea.plemya-x.ru/Plemya-x/ALR/internal/utils" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/build" - "gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager" ) @@ -69,6 +68,7 @@ func InstallCmd() *cli.Command { WithConfig(). WithDB(). WithReposNoPull(). + WithDistroInfo(). Build() if err != nil { return err @@ -93,11 +93,6 @@ func InstallCmd() *cli.Command { return err } - info, err := distro.ParseOSRelease(ctx) - if err != nil { - return cliutils.FormatCliExit(gotext.Get("Error parsing os release"), err) - } - err = builder.InstallPkgs( ctx, &build.BuildArgs{ @@ -105,7 +100,7 @@ func InstallCmd() *cli.Command { Clean: c.Bool("clean"), Interactive: c.Bool("interactive"), }, - Info: info, + Info: deps.Info, PkgFormat_: build.GetPkgFormat(mgr), }, args.Slice(), diff --git a/internal/cliutils/app_builder/builder.go b/internal/cliutils/app_builder/builder.go index d45386b..d202f4b 100644 --- a/internal/cliutils/app_builder/builder.go +++ b/internal/cliutils/app_builder/builder.go @@ -26,13 +26,17 @@ import ( "gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils" "gitea.plemya-x.ru/Plemya-x/ALR/internal/config" "gitea.plemya-x.ru/Plemya-x/ALR/internal/db" + "gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro" + "gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos" ) type AppDeps struct { - Cfg *config.ALRConfig - DB *db.Database - Repos *repos.Repos + Cfg *config.ALRConfig + DB *db.Database + Repos *repos.Repos + Info *distro.OSRelease + Manager manager.Manager } func (d *AppDeps) Defer() { @@ -138,6 +142,32 @@ func (b *AppBuilder) withRepos(enablePull, forcePull bool) *AppBuilder { return b } +func (b *AppBuilder) WithDistroInfo() *AppBuilder { + if b.err != nil { + return b + } + + b.deps.Info, b.err = distro.ParseOSRelease(b.ctx) + if b.err != nil { + b.err = cliutils.FormatCliExit(gotext.Get("Error parsing os release"), b.err) + } + + return b +} + +func (b *AppBuilder) WithManager() *AppBuilder { + if b.err != nil { + return b + } + + mgr := manager.Detect() + if mgr == nil { + b.err = cliutils.FormatCliExit(gotext.Get("Unable to detect a supported package manager on the system"), nil) + } + + return b +} + func (b *AppBuilder) Build() (*AppDeps, error) { if b.err != nil { return nil, b.err diff --git a/internal/translations/default.pot b/internal/translations/default.pot index 7f37aeb..d3af001 100644 --- a/internal/translations/default.pot +++ b/internal/translations/default.pot @@ -9,60 +9,52 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: build.go:44 +#: build.go:42 msgid "Build a local package" msgstr "" -#: build.go:50 +#: build.go:48 msgid "Path to the build script" msgstr "" -#: build.go:55 +#: build.go:53 msgid "Specify subpackage in script (for multi package script only)" msgstr "" -#: build.go:60 +#: build.go:58 msgid "Name of the package to build and its repo (example: default/go-bin)" msgstr "" -#: build.go:65 +#: build.go:63 msgid "" "Build package from scratch even if there's an already built package available" msgstr "" -#: build.go:75 +#: build.go:73 msgid "Error getting working directory" msgstr "" -#: build.go:103 -msgid "Unable to detect a supported package manager on the system" -msgstr "" - -#: build.go:109 -msgid "Error parsing os release" -msgstr "" - -#: build.go:121 +#: build.go:118 msgid "Cannot get absolute script path" msgstr "" -#: build.go:153 +#: build.go:148 msgid "Package not found" msgstr "" -#: build.go:174 +#: build.go:161 msgid "Nothing to build" msgstr "" -#: build.go:212 +#: build.go:199 msgid "Error building package" msgstr "" -#: build.go:220 +#: build.go:206 msgid "Error moving the package" msgstr "" -#: build.go:224 +#: build.go:210 msgid "Done" msgstr "" @@ -158,39 +150,47 @@ msgstr "" msgid "Error encoding script variables" msgstr "" -#: install.go:41 +#: install.go:40 msgid "Install a new package" msgstr "" -#: install.go:59 +#: install.go:58 msgid "Command install expected at least 1 argument, got %d" msgstr "" +#: install.go:63 install.go:172 install.go:222 +msgid "Unable to detect a supported package manager on the system" +msgstr "" + #: install.go:88 msgid "Error pulling repositories" msgstr "" -#: install.go:159 +#: install.go:109 +msgid "Error parsing os release" +msgstr "" + +#: install.go:154 msgid "Remove an installed package" msgstr "" -#: install.go:181 +#: install.go:176 msgid "Error listing installed packages" msgstr "" -#: install.go:222 +#: install.go:217 msgid "Command remove expected at least 1 argument, got %d" msgstr "" -#: install.go:235 +#: install.go:230 msgid "Error removing packages" msgstr "" -#: internal/cliutils/app_builder/builder.go:71 +#: internal/cliutils/app_builder/builder.go:75 msgid "Error loading config" msgstr "" -#: internal/cliutils/app_builder/builder.go:92 +#: internal/cliutils/app_builder/builder.go:96 msgid "Error initialization database" msgstr "" @@ -507,18 +507,18 @@ msgstr "" msgid "Error executing template" msgstr "" -#: upgrade.go:49 +#: upgrade.go:48 msgid "Upgrade all installed packages" msgstr "" -#: upgrade.go:103 +#: upgrade.go:100 msgid "Error pulling repos" msgstr "" -#: upgrade.go:109 upgrade.go:126 +#: upgrade.go:106 upgrade.go:123 msgid "Error checking for updates" msgstr "" -#: upgrade.go:129 +#: upgrade.go:126 msgid "There is nothing to do." msgstr "" diff --git a/internal/translations/po/ru/default.po b/internal/translations/po/ru/default.po index 37fa919..88f5cb8 100644 --- a/internal/translations/po/ru/default.po +++ b/internal/translations/po/ru/default.po @@ -16,61 +16,53 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Gtranslator 47.1\n" -#: build.go:44 +#: build.go:42 msgid "Build a local package" msgstr "Сборка локального пакета" -#: build.go:50 +#: build.go:48 msgid "Path to the build script" msgstr "Путь к скрипту сборки" -#: build.go:55 +#: build.go:53 msgid "Specify subpackage in script (for multi package script only)" msgstr "Укажите подпакет в скрипте (только для многопакетного скрипта)" -#: build.go:60 +#: build.go:58 msgid "Name of the package to build and its repo (example: default/go-bin)" msgstr "Имя пакета для сборки и его репозиторий (пример: default/go-bin)" -#: build.go:65 +#: build.go:63 msgid "" "Build package from scratch even if there's an already built package available" msgstr "Создайте пакет с нуля, даже если уже имеется готовый пакет" -#: build.go:75 +#: build.go:73 msgid "Error getting working directory" msgstr "Ошибка при получении рабочего каталога" -#: build.go:103 -msgid "Unable to detect a supported package manager on the system" -msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе" - -#: build.go:109 -msgid "Error parsing os release" -msgstr "Ошибка при разборе файла выпуска операционной системы" - -#: build.go:121 +#: build.go:118 msgid "Cannot get absolute script path" msgstr "" -#: build.go:153 +#: build.go:148 msgid "Package not found" msgstr "Пакет не найден" -#: build.go:174 +#: build.go:161 #, fuzzy msgid "Nothing to build" msgstr "Исполнение build()" -#: build.go:212 +#: build.go:199 msgid "Error building package" msgstr "Ошибка при сборке пакета" -#: build.go:220 +#: build.go:206 msgid "Error moving the package" msgstr "Ошибка при перемещении пакета" -#: build.go:224 +#: build.go:210 msgid "Done" msgstr "Сделано" @@ -171,40 +163,48 @@ msgstr "Ошибка устранения переорпеделений" msgid "Error encoding script variables" msgstr "Ошибка кодирования переменных скрита" -#: install.go:41 +#: install.go:40 msgid "Install a new package" msgstr "Установить новый пакет" -#: install.go:59 +#: install.go:58 msgid "Command install expected at least 1 argument, got %d" msgstr "Для команды install ожидался хотя бы 1 аргумент, получено %d" +#: install.go:63 install.go:172 install.go:222 +msgid "Unable to detect a supported package manager on the system" +msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе" + #: install.go:88 msgid "Error pulling repositories" msgstr "Ошибка при извлечении репозиториев" -#: install.go:159 +#: install.go:109 +msgid "Error parsing os release" +msgstr "Ошибка при разборе файла выпуска операционной системы" + +#: install.go:154 msgid "Remove an installed package" msgstr "Удалить установленный пакет" -#: install.go:181 +#: install.go:176 msgid "Error listing installed packages" msgstr "Ошибка при составлении списка установленных пакетов" -#: install.go:222 +#: install.go:217 msgid "Command remove expected at least 1 argument, got %d" msgstr "Для команды remove ожидался хотя бы 1 аргумент, получено %d" -#: install.go:235 +#: install.go:230 msgid "Error removing packages" msgstr "Ошибка при удалении пакетов" -#: internal/cliutils/app_builder/builder.go:71 +#: internal/cliutils/app_builder/builder.go:75 #, fuzzy msgid "Error loading config" msgstr "Ошибка при кодировании конфигурации" -#: internal/cliutils/app_builder/builder.go:92 +#: internal/cliutils/app_builder/builder.go:96 msgid "Error initialization database" msgstr "Ошибка инициализации базы данных" @@ -533,19 +533,19 @@ msgstr "Ошибка при разборе шаблона" msgid "Error executing template" msgstr "Ошибка при выполнении шаблона" -#: upgrade.go:49 +#: upgrade.go:48 msgid "Upgrade all installed packages" msgstr "Обновить все установленные пакеты" -#: upgrade.go:103 +#: upgrade.go:100 msgid "Error pulling repos" msgstr "Ошибка при извлечении репозиториев" -#: upgrade.go:109 upgrade.go:126 +#: upgrade.go:106 upgrade.go:123 msgid "Error checking for updates" msgstr "Ошибка при проверке обновлений" -#: upgrade.go:129 +#: upgrade.go:126 msgid "There is nothing to do." msgstr "Здесь нечего делать." diff --git a/upgrade.go b/upgrade.go index 94101a0..b45c27b 100644 --- a/upgrade.go +++ b/upgrade.go @@ -23,7 +23,6 @@ import ( "context" "fmt" "log/slog" - "os" "github.com/leonelquinteros/gotext" "github.com/urfave/cli/v2" @@ -92,12 +91,10 @@ func UpgradeCmd() *cli.Command { mgr := manager.Detect() if mgr == nil { - slog.Error(gotext.Get("Unable to detect a supported package manager on the system")) - os.Exit(1) + return cliutils.FormatCliExit(gotext.Get("Unable to detect a supported package manager on the system"), nil) } if cfg.AutoPull() { - slog.Debug("autopull") err = rs.Pull(ctx, cfg.Repos()) if err != nil { return cliutils.FormatCliExit(gotext.Get("Error pulling repos"), err)