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/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"))
@ -126,14 +123,7 @@ func BuildCmd() *cli.Command {
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,
},
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 != "" {
@ -161,14 +155,7 @@ 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,
},
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))

@ -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(),

@ -26,6 +26,8 @@ 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"
)
@ -33,6 +35,8 @@ type AppDeps struct {
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

@ -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 ""

@ -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 "Здесь нечего делать."

@ -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)