fix non-interactive install and add fallback in HandleExitCoder

This commit is contained in:
Maxim Slipenko 2025-04-17 10:15:51 +03:00
parent 83b8f3b047
commit 0d917190ab
7 changed files with 64 additions and 29 deletions

@ -31,10 +31,21 @@ func TestE2EIssue32Interactive(t *testing.T) {
"issue-32-interactive",
COMMON_SYSTEMS,
func(t *testing.T, r e2e.Runnable) {
err := r.Exec(e2e.NewCommand(
assert.NoError(t, r.Exec(e2e.NewCommand(
"sudo", "alr", "--interactive=false", "remove", "ca-certificates",
))
assert.NoError(t, err)
)))
assert.NoError(t, r.Exec(e2e.NewCommand(
"sudo", "alr", "--interactive=false", "remove", "openssl",
)))
assert.NoError(t, r.Exec(e2e.NewCommand(
"alr", "fix",
)))
assert.NoError(t, r.Exec(e2e.NewCommand(
"sudo", "alr", "--interactive=false", "install", "ca-certificates",
)))
},
)
}

@ -46,6 +46,9 @@ func HandleExitCoder(err error) {
cli.OsExiter(exitErr.ExitCode())
return
}
slog.Error(err.Error())
cli.OsExiter(1)
}
func FormatCliExit(msg string, err error) cli.ExitCoder {

@ -347,19 +347,19 @@ msgstr ""
msgid "Error while running app"
msgstr ""
#: pkg/build/build.go:394
#: pkg/build/build.go:395
msgid "Building package"
msgstr ""
#: pkg/build/build.go:423
#: pkg/build/build.go:424
msgid "The checksums array must be the same length as sources"
msgstr ""
#: pkg/build/build.go:454
#: pkg/build/build.go:455
msgid "Downloading sources"
msgstr ""
#: pkg/build/build.go:543
#: pkg/build/build.go:549
msgid "Installing dependencies"
msgstr ""

@ -363,19 +363,19 @@ msgstr "Показать справку"
msgid "Error while running app"
msgstr "Ошибка при запуске приложения"
#: pkg/build/build.go:394
#: pkg/build/build.go:395
msgid "Building package"
msgstr "Сборка пакета"
#: pkg/build/build.go:423
#: pkg/build/build.go:424
msgid "The checksums array must be the same length as sources"
msgstr "Массив контрольных сумм должен быть той же длины, что и источники"
#: pkg/build/build.go:454
#: pkg/build/build.go:455
msgid "Downloading sources"
msgstr "Скачивание источников"
#: pkg/build/build.go:543
#: pkg/build/build.go:549
msgid "Installing dependencies"
msgstr "Установка зависимостей"

@ -35,6 +35,7 @@ import (
"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro"
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager"
)
type BuildInput struct {
@ -233,8 +234,8 @@ type CheckerExecutor interface {
}
type InstallerExecutor interface {
InstallLocal(paths []string) error
Install(pkgs []string) error
InstallLocal(paths []string, opts *manager.Opts) error
Install(pkgs []string, opts *manager.Opts) error
RemoveAlreadyInstalled(pkgs []string) ([]string, error)
}
@ -521,7 +522,12 @@ func (b *Builder) InstallALRPackages(
return err
}
err = b.installerExecutor.InstallLocal(res.PackagePaths)
err = b.installerExecutor.InstallLocal(
res.PackagePaths,
&manager.Opts{
NoConfirm: !input.BuildOpts().Interactive,
},
)
if err != nil {
return err
}
@ -681,14 +687,18 @@ func (i *Builder) InstallPkgs(
}
if len(builtPaths) > 0 {
err = i.installerExecutor.InstallLocal(builtPaths)
err = i.installerExecutor.InstallLocal(builtPaths, &manager.Opts{
NoConfirm: !input.BuildOpts().Interactive,
})
if err != nil {
return err
}
}
if len(repoDeps) > 0 {
err = i.installerExecutor.Install(repoDeps)
err = i.installerExecutor.Install(repoDeps, &manager.Opts{
NoConfirm: !input.BuildOpts().Interactive,
})
if err != nil {
return err
}

@ -28,12 +28,12 @@ func NewInstaller(mgr manager.Manager) *Installer {
type Installer struct{ mgr manager.Manager }
func (i *Installer) InstallLocal(paths []string) error {
return i.mgr.InstallLocal(nil, paths...)
func (i *Installer) InstallLocal(paths []string, opts *manager.Opts) error {
return i.mgr.InstallLocal(opts, paths...)
}
func (i *Installer) Install(pkgs []string) error {
return i.mgr.Install(nil, pkgs...)
func (i *Installer) Install(pkgs []string, opts *manager.Opts) error {
return i.mgr.Install(opts, pkgs...)
}
func (i *Installer) RemoveAlreadyInstalled(pkgs []string) ([]string, error) {

@ -28,6 +28,7 @@ import (
"github.com/hashicorp/go-plugin"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/logger"
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager"
)
type InstallerPlugin struct {
@ -42,21 +43,31 @@ type InstallerRPCServer struct {
Impl InstallerExecutor
}
func (r *InstallerRPC) InstallLocal(paths []string) error {
return r.client.Call("Plugin.InstallLocal", paths, nil)
type InstallArgs struct {
PackagesOrPaths []string
Opts *manager.Opts
}
func (s *InstallerRPCServer) InstallLocal(paths []string, reply *struct{}) error {
return s.Impl.InstallLocal(paths)
func (r *InstallerRPC) InstallLocal(paths []string, opts *manager.Opts) error {
return r.client.Call("Plugin.InstallLocal", &InstallArgs{
PackagesOrPaths: paths,
Opts: opts,
}, nil)
}
func (r *InstallerRPC) Install(pkgs []string) error {
return r.client.Call("Plugin.Install", pkgs, nil)
func (s *InstallerRPCServer) InstallLocal(args *InstallArgs, reply *struct{}) error {
return s.Impl.InstallLocal(args.PackagesOrPaths, args.Opts)
}
func (s *InstallerRPCServer) Install(pkgs []string, reply *struct{}) error {
slog.Debug("install", "pkgs", pkgs)
return s.Impl.Install(pkgs)
func (r *InstallerRPC) Install(pkgs []string, opts *manager.Opts) error {
return r.client.Call("Plugin.Install", &InstallArgs{
PackagesOrPaths: pkgs,
Opts: opts,
}, nil)
}
func (s *InstallerRPCServer) Install(args *InstallArgs, reply *struct{}) error {
return s.Impl.Install(args.PackagesOrPaths, args.Opts)
}
func (r *InstallerRPC) RemoveAlreadyInstalled(paths []string) ([]string, error) {