diff --git a/e2e-tests/issue_32_interactive_test.go b/e2e-tests/issue_32_interactive_test.go index 389a7a9..2f12fb5 100644 --- a/e2e-tests/issue_32_interactive_test.go +++ b/e2e-tests/issue_32_interactive_test.go @@ -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", + ))) }, ) } diff --git a/internal/cliutils/utils.go b/internal/cliutils/utils.go index afd7a04..3828830 100644 --- a/internal/cliutils/utils.go +++ b/internal/cliutils/utils.go @@ -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 { diff --git a/internal/translations/default.pot b/internal/translations/default.pot index cd23fb8..1555f81 100644 --- a/internal/translations/default.pot +++ b/internal/translations/default.pot @@ -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 "" diff --git a/internal/translations/po/ru/default.po b/internal/translations/po/ru/default.po index 2714217..d553d07 100644 --- a/internal/translations/po/ru/default.po +++ b/internal/translations/po/ru/default.po @@ -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 "Установка зависимостей" diff --git a/pkg/build/build.go b/pkg/build/build.go index 31c9e93..2137e98 100644 --- a/pkg/build/build.go +++ b/pkg/build/build.go @@ -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 } diff --git a/pkg/build/installer.go b/pkg/build/installer.go index d4e86ad..1522e73 100644 --- a/pkg/build/installer.go +++ b/pkg/build/installer.go @@ -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) { diff --git a/pkg/build/safe_installer.go b/pkg/build/safe_installer.go index 2305131..feec190 100644 --- a/pkg/build/safe_installer.go +++ b/pkg/build/safe_installer.go @@ -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) {