This commit is contained in:
Maxim Slipenko 2025-04-15 00:20:57 +03:00
parent 613dc41fdf
commit fe3acf5b85
6 changed files with 126 additions and 118 deletions

@ -34,8 +34,6 @@ import (
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types" "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/internal/utils"
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/build" "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 { func BuildCmd() *cli.Command {
@ -88,6 +86,8 @@ func BuildCmd() *cli.Command {
WithConfig(). WithConfig().
WithDB(). WithDB().
WithReposNoPull(). WithReposNoPull().
WithDistroInfo().
WithManager().
Build() Build()
if err != nil { if err != nil {
return cli.Exit(err, 1) return cli.Exit(err, 1)
@ -97,23 +97,20 @@ func BuildCmd() *cli.Command {
var script string var script string
var packages []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 res *build.BuildResult
var scriptArgs *build.BuildPackageFromScriptArgs var scriptArgs *build.BuildPackageFromScriptArgs
var dbArgs *build.BuildPackageFromDbArgs 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 { switch {
case c.IsSet("script"): case c.IsSet("script"):
script, err = filepath.Abs(c.String("script")) script, err = filepath.Abs(c.String("script"))
@ -124,16 +121,9 @@ func BuildCmd() *cli.Command {
packages = append(packages, c.String("script-package")) packages = append(packages, c.String("script-package"))
scriptArgs = &build.BuildPackageFromScriptArgs{ scriptArgs = &build.BuildPackageFromScriptArgs{
Script: script, Script: script,
Packages: packages, Packages: packages,
BuildArgs: build.BuildArgs{ BuildArgs: *buildArgs,
Opts: &types.BuildOpts{
Clean: c.Bool("clean"),
Interactive: c.Bool("interactive"),
},
PkgFormat_: build.GetPkgFormat(mgr),
Info: info,
},
} }
case c.IsSet("package"): case c.IsSet("package"):
// TODO: handle multiple packages // TODO: handle multiple packages
@ -147,11 +137,15 @@ func BuildCmd() *cli.Command {
packageSearch = arr[0] packageSearch = arr[0]
} }
pkgs, _, _ := deps.Repos.FindPkgs(ctx, []string{packageSearch}) pkgs, _, err := deps.Repos.FindPkgs(ctx, []string{packageSearch})
pkg, ok := pkgs[packageSearch] if err != nil {
if len(pkg) < 1 || !ok { return cliutils.FormatCliExit("failed to find pkgs", err)
slog.Error(gotext.Get("Package not found")) }
os.Exit(1)
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 != "" { if pkg[0].BasePkgName != "" {
@ -159,16 +153,9 @@ func BuildCmd() *cli.Command {
} }
dbArgs = &build.BuildPackageFromDbArgs{ dbArgs = &build.BuildPackageFromDbArgs{
Package: &pkg[0], Package: &pkg[0],
Packages: packages, Packages: packages,
BuildArgs: build.BuildArgs{ BuildArgs: *buildArgs,
Opts: &types.BuildOpts{
Clean: c.Bool("clean"),
Interactive: c.Bool("interactive"),
},
PkgFormat_: build.GetPkgFormat(mgr),
Info: info,
},
} }
default: default:
return cliutils.FormatCliExit(gotext.Get("Nothing to build"), nil) 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) return cliutils.FormatCliExit(gotext.Get("Error building package"), err)
} }
// Перемещение собранных пакетов в рабочую директорию
for _, pkgPath := range res.PackagePaths { for _, pkgPath := range res.PackagePaths {
name := filepath.Base(pkgPath) name := filepath.Base(pkgPath)
err = osutils.Move(pkgPath, filepath.Join(wd, name)) err = osutils.Move(pkgPath, filepath.Join(wd, name))

@ -31,7 +31,6 @@ import (
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types" "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/internal/utils"
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/build" "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" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager"
) )
@ -69,6 +68,7 @@ func InstallCmd() *cli.Command {
WithConfig(). WithConfig().
WithDB(). WithDB().
WithReposNoPull(). WithReposNoPull().
WithDistroInfo().
Build() Build()
if err != nil { if err != nil {
return err return err
@ -93,11 +93,6 @@ func InstallCmd() *cli.Command {
return err return err
} }
info, err := distro.ParseOSRelease(ctx)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error parsing os release"), err)
}
err = builder.InstallPkgs( err = builder.InstallPkgs(
ctx, ctx,
&build.BuildArgs{ &build.BuildArgs{
@ -105,7 +100,7 @@ func InstallCmd() *cli.Command {
Clean: c.Bool("clean"), Clean: c.Bool("clean"),
Interactive: c.Bool("interactive"), Interactive: c.Bool("interactive"),
}, },
Info: info, Info: deps.Info,
PkgFormat_: build.GetPkgFormat(mgr), PkgFormat_: build.GetPkgFormat(mgr),
}, },
args.Slice(), args.Slice(),

@ -26,13 +26,17 @@ import (
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils" "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/config"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/db" "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" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
) )
type AppDeps struct { type AppDeps struct {
Cfg *config.ALRConfig Cfg *config.ALRConfig
DB *db.Database DB *db.Database
Repos *repos.Repos Repos *repos.Repos
Info *distro.OSRelease
Manager manager.Manager
} }
func (d *AppDeps) Defer() { func (d *AppDeps) Defer() {
@ -138,6 +142,32 @@ func (b *AppBuilder) withRepos(enablePull, forcePull bool) *AppBuilder {
return b 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) { func (b *AppBuilder) Build() (*AppDeps, error) {
if b.err != nil { if b.err != nil {
return nil, b.err return nil, b.err

@ -9,60 +9,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: build.go:44 #: build.go:42
msgid "Build a local package" msgid "Build a local package"
msgstr "" msgstr ""
#: build.go:50 #: build.go:48
msgid "Path to the build script" msgid "Path to the build script"
msgstr "" msgstr ""
#: build.go:55 #: build.go:53
msgid "Specify subpackage in script (for multi package script only)" msgid "Specify subpackage in script (for multi package script only)"
msgstr "" msgstr ""
#: build.go:60 #: build.go:58
msgid "Name of the package to build and its repo (example: default/go-bin)" msgid "Name of the package to build and its repo (example: default/go-bin)"
msgstr "" msgstr ""
#: build.go:65 #: build.go:63
msgid "" msgid ""
"Build package from scratch even if there's an already built package available" "Build package from scratch even if there's an already built package available"
msgstr "" msgstr ""
#: build.go:75 #: build.go:73
msgid "Error getting working directory" msgid "Error getting working directory"
msgstr "" msgstr ""
#: build.go:103 #: build.go:118
msgid "Unable to detect a supported package manager on the system"
msgstr ""
#: build.go:109
msgid "Error parsing os release"
msgstr ""
#: build.go:121
msgid "Cannot get absolute script path" msgid "Cannot get absolute script path"
msgstr "" msgstr ""
#: build.go:153 #: build.go:148
msgid "Package not found" msgid "Package not found"
msgstr "" msgstr ""
#: build.go:174 #: build.go:161
msgid "Nothing to build" msgid "Nothing to build"
msgstr "" msgstr ""
#: build.go:212 #: build.go:199
msgid "Error building package" msgid "Error building package"
msgstr "" msgstr ""
#: build.go:220 #: build.go:206
msgid "Error moving the package" msgid "Error moving the package"
msgstr "" msgstr ""
#: build.go:224 #: build.go:210
msgid "Done" msgid "Done"
msgstr "" msgstr ""
@ -158,39 +150,47 @@ msgstr ""
msgid "Error encoding script variables" msgid "Error encoding script variables"
msgstr "" msgstr ""
#: install.go:41 #: install.go:40
msgid "Install a new package" msgid "Install a new package"
msgstr "" msgstr ""
#: install.go:59 #: install.go:58
msgid "Command install expected at least 1 argument, got %d" msgid "Command install expected at least 1 argument, got %d"
msgstr "" 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 #: install.go:88
msgid "Error pulling repositories" msgid "Error pulling repositories"
msgstr "" msgstr ""
#: install.go:159 #: install.go:109
msgid "Error parsing os release"
msgstr ""
#: install.go:154
msgid "Remove an installed package" msgid "Remove an installed package"
msgstr "" msgstr ""
#: install.go:181 #: install.go:176
msgid "Error listing installed packages" msgid "Error listing installed packages"
msgstr "" msgstr ""
#: install.go:222 #: install.go:217
msgid "Command remove expected at least 1 argument, got %d" msgid "Command remove expected at least 1 argument, got %d"
msgstr "" msgstr ""
#: install.go:235 #: install.go:230
msgid "Error removing packages" msgid "Error removing packages"
msgstr "" msgstr ""
#: internal/cliutils/app_builder/builder.go:71 #: internal/cliutils/app_builder/builder.go:75
msgid "Error loading config" msgid "Error loading config"
msgstr "" msgstr ""
#: internal/cliutils/app_builder/builder.go:92 #: internal/cliutils/app_builder/builder.go:96
msgid "Error initialization database" msgid "Error initialization database"
msgstr "" msgstr ""
@ -507,18 +507,18 @@ msgstr ""
msgid "Error executing template" msgid "Error executing template"
msgstr "" msgstr ""
#: upgrade.go:49 #: upgrade.go:48
msgid "Upgrade all installed packages" msgid "Upgrade all installed packages"
msgstr "" msgstr ""
#: upgrade.go:103 #: upgrade.go:100
msgid "Error pulling repos" msgid "Error pulling repos"
msgstr "" msgstr ""
#: upgrade.go:109 upgrade.go:126 #: upgrade.go:106 upgrade.go:123
msgid "Error checking for updates" msgid "Error checking for updates"
msgstr "" msgstr ""
#: upgrade.go:129 #: upgrade.go:126
msgid "There is nothing to do." msgid "There is nothing to do."
msgstr "" msgstr ""

@ -16,61 +16,53 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Gtranslator 47.1\n" "X-Generator: Gtranslator 47.1\n"
#: build.go:44 #: build.go:42
msgid "Build a local package" msgid "Build a local package"
msgstr "Сборка локального пакета" msgstr "Сборка локального пакета"
#: build.go:50 #: build.go:48
msgid "Path to the build script" msgid "Path to the build script"
msgstr "Путь к скрипту сборки" msgstr "Путь к скрипту сборки"
#: build.go:55 #: build.go:53
msgid "Specify subpackage in script (for multi package script only)" msgid "Specify subpackage in script (for multi package script only)"
msgstr "Укажите подпакет в скрипте (только для многопакетного скрипта)" msgstr "Укажите подпакет в скрипте (только для многопакетного скрипта)"
#: build.go:60 #: build.go:58
msgid "Name of the package to build and its repo (example: default/go-bin)" msgid "Name of the package to build and its repo (example: default/go-bin)"
msgstr "Имя пакета для сборки и его репозиторий (пример: default/go-bin)" msgstr "Имя пакета для сборки и его репозиторий (пример: default/go-bin)"
#: build.go:65 #: build.go:63
msgid "" msgid ""
"Build package from scratch even if there's an already built package available" "Build package from scratch even if there's an already built package available"
msgstr "Создайте пакет с нуля, даже если уже имеется готовый пакет" msgstr "Создайте пакет с нуля, даже если уже имеется готовый пакет"
#: build.go:75 #: build.go:73
msgid "Error getting working directory" msgid "Error getting working directory"
msgstr "Ошибка при получении рабочего каталога" msgstr "Ошибка при получении рабочего каталога"
#: build.go:103 #: build.go:118
msgid "Unable to detect a supported package manager on the system"
msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе"
#: build.go:109
msgid "Error parsing os release"
msgstr "Ошибка при разборе файла выпуска операционной системы"
#: build.go:121
msgid "Cannot get absolute script path" msgid "Cannot get absolute script path"
msgstr "" msgstr ""
#: build.go:153 #: build.go:148
msgid "Package not found" msgid "Package not found"
msgstr "Пакет не найден" msgstr "Пакет не найден"
#: build.go:174 #: build.go:161
#, fuzzy #, fuzzy
msgid "Nothing to build" msgid "Nothing to build"
msgstr "Исполнение build()" msgstr "Исполнение build()"
#: build.go:212 #: build.go:199
msgid "Error building package" msgid "Error building package"
msgstr "Ошибка при сборке пакета" msgstr "Ошибка при сборке пакета"
#: build.go:220 #: build.go:206
msgid "Error moving the package" msgid "Error moving the package"
msgstr "Ошибка при перемещении пакета" msgstr "Ошибка при перемещении пакета"
#: build.go:224 #: build.go:210
msgid "Done" msgid "Done"
msgstr "Сделано" msgstr "Сделано"
@ -171,40 +163,48 @@ msgstr "Ошибка устранения переорпеделений"
msgid "Error encoding script variables" msgid "Error encoding script variables"
msgstr "Ошибка кодирования переменных скрита" msgstr "Ошибка кодирования переменных скрита"
#: install.go:41 #: install.go:40
msgid "Install a new package" msgid "Install a new package"
msgstr "Установить новый пакет" msgstr "Установить новый пакет"
#: install.go:59 #: install.go:58
msgid "Command install expected at least 1 argument, got %d" msgid "Command install expected at least 1 argument, got %d"
msgstr "Для команды install ожидался хотя бы 1 аргумент, получено %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 #: install.go:88
msgid "Error pulling repositories" msgid "Error pulling repositories"
msgstr "Ошибка при извлечении репозиториев" msgstr "Ошибка при извлечении репозиториев"
#: install.go:159 #: install.go:109
msgid "Error parsing os release"
msgstr "Ошибка при разборе файла выпуска операционной системы"
#: install.go:154
msgid "Remove an installed package" msgid "Remove an installed package"
msgstr "Удалить установленный пакет" msgstr "Удалить установленный пакет"
#: install.go:181 #: install.go:176
msgid "Error listing installed packages" msgid "Error listing installed packages"
msgstr "Ошибка при составлении списка установленных пакетов" msgstr "Ошибка при составлении списка установленных пакетов"
#: install.go:222 #: install.go:217
msgid "Command remove expected at least 1 argument, got %d" msgid "Command remove expected at least 1 argument, got %d"
msgstr "Для команды remove ожидался хотя бы 1 аргумент, получено %d" msgstr "Для команды remove ожидался хотя бы 1 аргумент, получено %d"
#: install.go:235 #: install.go:230
msgid "Error removing packages" msgid "Error removing packages"
msgstr "Ошибка при удалении пакетов" msgstr "Ошибка при удалении пакетов"
#: internal/cliutils/app_builder/builder.go:71 #: internal/cliutils/app_builder/builder.go:75
#, fuzzy #, fuzzy
msgid "Error loading config" msgid "Error loading config"
msgstr "Ошибка при кодировании конфигурации" msgstr "Ошибка при кодировании конфигурации"
#: internal/cliutils/app_builder/builder.go:92 #: internal/cliutils/app_builder/builder.go:96
msgid "Error initialization database" msgid "Error initialization database"
msgstr "Ошибка инициализации базы данных" msgstr "Ошибка инициализации базы данных"
@ -533,19 +533,19 @@ msgstr "Ошибка при разборе шаблона"
msgid "Error executing template" msgid "Error executing template"
msgstr "Ошибка при выполнении шаблона" msgstr "Ошибка при выполнении шаблона"
#: upgrade.go:49 #: upgrade.go:48
msgid "Upgrade all installed packages" msgid "Upgrade all installed packages"
msgstr "Обновить все установленные пакеты" msgstr "Обновить все установленные пакеты"
#: upgrade.go:103 #: upgrade.go:100
msgid "Error pulling repos" msgid "Error pulling repos"
msgstr "Ошибка при извлечении репозиториев" msgstr "Ошибка при извлечении репозиториев"
#: upgrade.go:109 upgrade.go:126 #: upgrade.go:106 upgrade.go:123
msgid "Error checking for updates" msgid "Error checking for updates"
msgstr "Ошибка при проверке обновлений" msgstr "Ошибка при проверке обновлений"
#: upgrade.go:129 #: upgrade.go:126
msgid "There is nothing to do." msgid "There is nothing to do."
msgstr "Здесь нечего делать." msgstr "Здесь нечего делать."

@ -23,7 +23,6 @@ import (
"context" "context"
"fmt" "fmt"
"log/slog" "log/slog"
"os"
"github.com/leonelquinteros/gotext" "github.com/leonelquinteros/gotext"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
@ -92,12 +91,10 @@ func UpgradeCmd() *cli.Command {
mgr := manager.Detect() mgr := manager.Detect()
if mgr == nil { if mgr == nil {
slog.Error(gotext.Get("Unable to detect a supported package manager on the system")) return cliutils.FormatCliExit(gotext.Get("Unable to detect a supported package manager on the system"), nil)
os.Exit(1)
} }
if cfg.AutoPull() { if cfg.AutoPull() {
slog.Debug("autopull")
err = rs.Pull(ctx, cfg.Repos()) err = rs.Pull(ctx, cfg.Repos())
if err != nil { if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error pulling repos"), err) return cliutils.FormatCliExit(gotext.Get("Error pulling repos"), err)