This commit is contained in:
2025-04-15 00:04:55 +03:00
parent 6d5016270f
commit 613dc41fdf
8 changed files with 141 additions and 86 deletions

120
build.go
View File

@@ -66,16 +66,20 @@ func BuildCmd() *cli.Command {
},
},
Action: func(c *cli.Context) error {
if err := utils.EnuseIsPrivilegedGroupMember(); err != nil {
return nil
}
wd, err := os.Getwd()
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error getting working directory"), err)
}
wd, cleanup, err := Mount(wd)
wd, wdCleanup, err := Mount(wd)
if err != nil {
return err
}
defer cleanup()
defer wdCleanup()
ctx := c.Context
@@ -105,42 +109,31 @@ func BuildCmd() *cli.Command {
return cliutils.FormatCliExit(gotext.Get("Error parsing os release"), err)
}
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
var scriptArgs *build.BuildPackageFromScriptArgs
var dbArgs *build.BuildPackageFromDbArgs
switch {
case c.IsSet("script"):
script = c.String("script")
script, err = filepath.Abs(c.String("script"))
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Cannot get absolute script path"), err)
}
packages = append(packages, c.String("script-package"))
res, err = builder.BuildPackageFromScript(
ctx,
&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,
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,
},
)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error building package"), err)
}
case c.IsSet("package"):
// TODO: handle multiple packages
@@ -165,27 +158,58 @@ func BuildCmd() *cli.Command {
packages = append(packages, pkg[0].Name)
}
res, err = builder.BuildPackageFromDb(
ctx,
&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,
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,
},
)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error building package"), err)
}
default:
slog.Error(gotext.Get("Nothing to build"))
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Nothing to build"), nil)
}
if scriptArgs != nil {
scriptFile := filepath.Base(scriptArgs.Script)
newScriptDir, scriptDirCleanup, err := Mount(filepath.Dir(scriptArgs.Script))
if err != nil {
return err
}
defer scriptDirCleanup()
scriptArgs.Script = filepath.Join(newScriptDir, scriptFile)
}
if err := utils.ExitIfCantDropCapsToAlrUser(); err != nil {
return err
}
builder, err := build.NewMainBuilder(
deps.Cfg,
deps.Repos,
)
if err != nil {
return err
}
if scriptArgs != nil {
res, err = builder.BuildPackageFromScript(
ctx,
scriptArgs,
)
} else if dbArgs != nil {
res, err = builder.BuildPackageFromDb(
ctx,
dbArgs,
)
}
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error building package"), err)
}
// Перемещение собранных пакетов в рабочую директорию
@@ -197,6 +221,8 @@ func BuildCmd() *cli.Command {
}
}
slog.Info(gotext.Get("Done"))
return nil
},
}