This commit is contained in:
2025-04-14 23:35:10 +03:00
parent e3aaa88822
commit 6d5016270f
21 changed files with 449 additions and 349 deletions

View File

@@ -20,10 +20,8 @@
package main
import (
"bytes"
"log/slog"
"os"
"os/exec"
"path/filepath"
"strings"
@@ -31,15 +29,13 @@ import (
"github.com/urfave/cli/v2"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
appbuilder "gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils/app_builder"
"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/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"
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
)
func BuildCmd() *cli.Command {
@@ -74,53 +70,25 @@ func BuildCmd() *cli.Command {
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error getting working directory"), err)
}
executable, err := os.Executable()
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error getting working directory"), err)
}
cmd := exec.Command(executable, "_internal-mount", wd)
var stdout bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
wd, cleanup, err := Mount(wd)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error getting working directory"), err)
}
wd = stdout.String()
defer func() {
slog.Warn("unmounting...")
cmd := exec.Command(executable, "_internal-umount", wd)
var stdout bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
}()
err = utils.DropCapsToAlrUser()
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error dropping capabilities"), err)
}
_, err = os.Stat(wd)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error dropping capabilities"), err)
return err
}
defer cleanup()
ctx := c.Context
cfg := config.New()
err = cfg.Load()
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error loading config"), err)
}
db := database.New(cfg)
rs := repos.New(cfg, db)
err = db.Init(ctx)
deps, err := appbuilder.
New(ctx).
WithConfig().
WithDB().
WithReposNoPull().
Build()
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error initialization database"), err)
return cli.Exit(err, 1)
}
defer deps.Defer()
var script string
var packages []string
@@ -137,10 +105,17 @@ func BuildCmd() *cli.Command {
return cliutils.FormatCliExit(gotext.Get("Error parsing os release"), err)
}
builder := build.NewMainBuilder(
cfg,
rs,
if err := utils.ExitIfCantDropCapsToAlrUser(); err != nil {
return err
}
builder, err := build.NewMainBuilder(
deps.Cfg,
deps.Repos,
)
if err != nil {
return err
}
var res *build.BuildResult
@@ -179,7 +154,7 @@ func BuildCmd() *cli.Command {
packageSearch = arr[0]
}
pkgs, _, _ := rs.FindPkgs(ctx, []string{packageSearch})
pkgs, _, _ := deps.Repos.FindPkgs(ctx, []string{packageSearch})
pkg, ok := pkgs[packageSearch]
if len(pkg) < 1 || !ok {
slog.Error(gotext.Get("Package not found"))