forked from Plemya-x/ALR
		
	wip
This commit is contained in:
		
							
								
								
									
										66
									
								
								build.go
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								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)) | ||||
|   | ||||
| @@ -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,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 | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user