wip: add split packages support

This commit is contained in:
2025-02-03 19:15:54 +03:00
parent 606cd5473a
commit 8978cc2855
16 changed files with 1282 additions and 743 deletions

View File

@@ -28,9 +28,11 @@ import (
"github.com/urfave/cli/v2"
"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/osutils"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
"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/repos"
)
@@ -59,30 +61,43 @@ func BuildCmd() *cli.Command {
},
Action: func(c *cli.Context) error {
ctx := c.Context
cfg := config.New()
db := database.New(cfg)
rs := repos.New(cfg, db)
err := db.Init(ctx)
if err != nil {
slog.Error(gotext.Get("Error db init"), "err", err)
os.Exit(1)
}
var script string
var script, packageName string
// Проверяем, установлен ли флаг script (-s)
repoDir := cfg.GetPaths(ctx).RepoDir
switch {
case c.IsSet("script"):
script = c.String("script")
case c.IsSet("package"):
// TODO: refactor
packageInput := c.String("package")
if filepath.Dir(packageInput) == "." {
// Не указана директория репозитория, используем 'default' как префикс
script = filepath.Join(config.GetPaths(ctx).RepoDir, "default", packageInput, "alr.sh")
pkgs, _, _ := rs.FindPkgs(ctx, []string{packageInput})
pkg := pkgs[packageInput]
if pkg[0].BasePkgName != "" {
script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].BasePkgName, "alr.sh")
packageName = pkg[0].Name
} else {
// Используем путь с указанным репозиторием
script = filepath.Join(config.GetPaths(ctx).RepoDir, packageInput, "alr.sh")
script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].Name, "alr.sh")
}
default:
script = filepath.Join(config.GetPaths(ctx).RepoDir, "alr.sh")
script = filepath.Join(repoDir, "alr.sh")
}
// Проверка автоматического пулла репозиториев
if config.GetInstance(ctx).AutoPull(ctx) {
err := repos.Pull(ctx, config.Config(ctx).Repos)
if cfg.AutoPull(ctx) {
err := rs.Pull(ctx, cfg.Repos(ctx))
if err != nil {
slog.Error(gotext.Get("Error pulling repositories"), "err", err)
os.Exit(1)
@@ -96,13 +111,28 @@ func BuildCmd() *cli.Command {
os.Exit(1)
}
info, err := distro.ParseOSRelease(ctx)
if err != nil {
slog.Error(gotext.Get("Error parsing os release"), "err", err)
os.Exit(1)
}
builder := build.New(
ctx,
types.BuildOpts{
Package: packageName,
Script: script,
Manager: mgr,
Clean: c.Bool("clean"),
Interactive: c.Bool("interactive"),
},
rs,
info,
cfg,
)
// Сборка пакета
pkgPaths, _, err := build.BuildPackage(ctx, types.BuildOpts{
Script: script,
Manager: mgr,
Clean: c.Bool("clean"),
Interactive: c.Bool("interactive"),
})
pkgPaths, _, err := builder.BuildPackage(ctx)
if err != nil {
slog.Error(gotext.Get("Error building package"), "err", err)
os.Exit(1)