cli API

cli

package

API reference for the cli package.

F
function

genericPkgManagerCommand

Parameters

subsystemName
string
action
string

Returns

error
internal/cli/runtime.go:216-237
func genericPkgManagerCommand(subsystemName string, action string) error

{
	subSystem, err := core.LoadSubSystem(subsystemName, false)
	if err != nil {
		return err
	}
	pkgManager, err := subSystem.Stack.GetPkgManager()
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.cantAccessPkgManager"), err)
	}

	cmdStr, err := pkgManagerCommands(pkgManager, action)
	if err != nil {
		return err
	}

	finalArgs := pkgManager.GenCmd(cmdStr)
	_, err = subSystem.Exec(false, false, finalArgs...)
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.executingCommand"), err)
	}
	return nil
}
F
function

genericPkgManagerArgsCommand

Parameters

subsystemName
string
action
string
args
[]string

Returns

error
internal/cli/runtime.go:239-260
func genericPkgManagerArgsCommand(subsystemName string, action string, args []string) error

{
	subSystem, err := core.LoadSubSystem(subsystemName, false)
	if err != nil {
		return err
	}
	pkgManager, err := subSystem.Stack.GetPkgManager()
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.cantAccessPkgManager"), err)
	}

	cmdStr, err := pkgManagerCommands(pkgManager, action)
	if err != nil {
		return err
	}

	finalArgs := pkgManager.GenCmd(cmdStr, args...)
	_, err = subSystem.Exec(false, false, finalArgs...)
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.executingCommand"), err)
	}
	return nil
}
F
function

pkgManagerCommands

Parameters

pkgManager
command
string

Returns

string
error
internal/cli/runtime.go:262-287
func pkgManagerCommands(pkgManager *core.PkgManager, command string) (string, error)

{
	switch command {
	case "autoremove":
		return pkgManager.CmdAutoRemove, nil
	case "clean":
		return pkgManager.CmdClean, nil
	case "install":
		return pkgManager.CmdInstall, nil
	case "list":
		return pkgManager.CmdList, nil
	case "purge":
		return pkgManager.CmdPurge, nil
	case "remove":
		return pkgManager.CmdRemove, nil
	case "search":
		return pkgManager.CmdSearch, nil
	case "show":
		return pkgManager.CmdShow, nil
	case "update":
		return pkgManager.CmdUpdate, nil
	case "upgrade":
		return pkgManager.CmdUpgrade, nil
	default:
		return "", fmt.Errorf(Apx.LC.Get("apx.errors.unknownCommand"), command)
	}
}
S
struct

RootCmd

internal/cli/structs.go:19-28
type RootCmd struct

Fields

Name Type Description
Version string
Stacks StacksCmd cmd:"stacks" help:"pr:apx.cmd.stacks"
Subsystems SubsystemsCmd cmd:"subsystems" help:"pr:apx.cmd.subsystems"
PkgManagers PkgManagersCmd cmd:"pkgmanagers" help:"pr:apx.cmd.pkgmanagers"
DynamicSubsystems *map[string]*SubsystemCmd cmd:"*" help:"apx.subsystem"
S
struct

SubsystemCmd

internal/cli/structs.go:30-50
type SubsystemCmd struct

Fields

Name Type Description
Name string json:"-"
Enter SubsystemEnterCmd cmd:"enter" help:"pr:apx.cmd.subsystem.enter"
Run SubsystemRunCmd cmd:"run" help:"pr:apx.cmd.subsystem.run"
Install SubsystemInstallCmd cmd:"install" help:"pr:apx.cmd.subsystem.install"
Remove SubsystemRemoveCmd cmd:"remove" help:"pr:apx.cmd.subsystem.remove"
Update SubsystemUpdateCmd cmd:"update" help:"pr:apx.cmd.subsystem.update"
Upgrade SubsystemUpgradeCmd cmd:"upgrade" help:"pr:apx.cmd.subsystem.upgrade"
List SubsystemListCmd cmd:"list" help:"pr:apx.cmd.subsystem.list"
Search SubsystemSearchCmd cmd:"search" help:"pr:apx.cmd.subsystem.search"
Show SubsystemShowCmd cmd:"show" help:"pr:apx.cmd.subsystem.show"
Export SubsystemExportCmd cmd:"export" help:"pr:apx.cmd.subsystem.export"
Unexport SubsystemUnexportCmd cmd:"unexport" help:"pr:apx.cmd.subsystem.unexport"
Start SubsystemStartCmd cmd:"start" help:"pr:apx.cmd.subsystem.start"
Stop SubsystemStopCmd cmd:"stop" help:"pr:apx.cmd.subsystem.stop"
AutoRemove SubsystemAutoRemoveCmd cmd:"autoremove" help:"pr:apx.cmd.subsystem.autoremove"
Clean SubsystemCleanCmd cmd:"clean" help:"pr:apx.cmd.subsystem.clean"
Purge SubsystemPurgeCmd cmd:"purge" help:"pr:apx.cmd.subsystem.purge"
S
struct

SubsystemEnterCmd

internal/cli/structs.go:52-55
type SubsystemEnterCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemEnterCmd) Run() error
{
	subSystem, err := core.LoadSubSystem(c.Name, false)
	if err != nil {
		return err
	}
	err = subSystem.Enter()
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.enteringContainer"), err)
	}
	return nil
}

Fields

Name Type Description
Name string json:"-"
S
struct

SubsystemRunCmd

internal/cli/structs.go:57-61
type SubsystemRunCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemRunCmd) Run() error
{
	subSystem, err := core.LoadSubSystem(c.Name, false)
	if err != nil {
		return err
	}
	_, err = subSystem.Exec(false, false, c.Args...)
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.executingCommand"), err)
	}
	return nil
}

Fields

Name Type Description
Name string json:"-"
Args []string arg:"" optional:"" name:"command" help:"pr:apx.arg.command"
S
struct

SubsystemInstallCmd

internal/cli/structs.go:63-68
type SubsystemInstallCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemInstallCmd) Run() error
{
	subSystem, err := core.LoadSubSystem(c.Name, false)
	if err != nil {
		return err
	}

	pkgManager, err := subSystem.Stack.GetPkgManager()
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.cantAccessPkgManager"), err)
	}

	finalArgs := pkgManager.GenCmd(pkgManager.CmdInstall, c.Args...)
	_, err = subSystem.Exec(false, false, finalArgs...)
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.executingCommand"), err)
	}

	if !c.NoExport {
		exportedN, err := subSystem.ExportDesktopEntries(c.Args...)
		if err == nil {
			Apx.Log.Infof(Apx.LC.Get("runtimeCommand.info.exportedApps"), exportedN)
		}
	}
	return nil
}

Fields

Name Type Description
Name string json:"-"
NoExport bool flag:"short:n, long:no-export, name:pr:apx.cmd.subsystem.install.options.noExport"
Args []string arg:"" optional:"" name:"packages" help:"pr:apx.arg.packages"
S
struct

SubsystemRemoveCmd

internal/cli/structs.go:70-74
type SubsystemRemoveCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemRemoveCmd) Run() error
{
	subSystem, err := core.LoadSubSystem(c.Name, false)
	if err != nil {
		return err
	}

	pkgManager, err := subSystem.Stack.GetPkgManager()
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.cantAccessPkgManager"), err)
	}

	exportedN, err := subSystem.UnexportDesktopEntries(c.Args...)
	if err == nil {
		Apx.Log.Infof(Apx.LC.Get("runtimeCommand.info.unexportedApps"), exportedN)
	}

	finalArgs := pkgManager.GenCmd(pkgManager.CmdRemove, c.Args...)
	_, err = subSystem.Exec(false, false, finalArgs...)
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.executingCommand"), err)
	}
	return nil
}

Fields

Name Type Description
Name string json:"-"
Args []string arg:"" optional:"" name:"packages" help:"pr:apx.arg.packages"
S
struct

SubsystemUpdateCmd

internal/cli/structs.go:76-79
type SubsystemUpdateCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemUpdateCmd) Run() error
{
	return genericPkgManagerCommand(c.Name, "update")
}

Fields

Name Type Description
Name string json:"-"
S
struct

SubsystemUpgradeCmd

internal/cli/structs.go:81-84
type SubsystemUpgradeCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemUpgradeCmd) Run() error
{
	return genericPkgManagerCommand(c.Name, "upgrade")
}

Fields

Name Type Description
Name string json:"-"
S
struct

SubsystemListCmd

internal/cli/structs.go:86-89
type SubsystemListCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemListCmd) Run() error
{
	return genericPkgManagerCommand(c.Name, "list")
}

Fields

Name Type Description
Name string json:"-"
S
struct

SubsystemSearchCmd

internal/cli/structs.go:91-95
type SubsystemSearchCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemSearchCmd) Run() error
{
	return genericPkgManagerArgsCommand(c.Name, "search", c.Args)
}

Fields

Name Type Description
Name string json:"-"
Args []string arg:"" optional:"" name:"query" help:"pr:apx.arg.query"
S
struct

SubsystemShowCmd

internal/cli/structs.go:97-101
type SubsystemShowCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemShowCmd) Run() error
{
	return genericPkgManagerArgsCommand(c.Name, "show", c.Args)
}

Fields

Name Type Description
Name string json:"-"
Args []string arg:"" optional:"" name:"package" help:"pr:apx.arg.package"
S
struct

SubsystemExportCmd

internal/cli/structs.go:103-110
type SubsystemExportCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemExportCmd) Run() error
{
	subSystem, err := core.LoadSubSystem(c.Name, false)
	if err != nil {
		return err
	}

	if c.AppName == "" && c.Bin == "" {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.noAppNameOrBin"))
	}

	if c.AppName != "" && c.Bin != "" {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.sameAppOrBin"))
	}

	if c.AppName != "" {
		err := subSystem.ExportDesktopEntry(c.AppName)
		if err != nil {
			return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.exportingApp"), err)
		}
		Apx.Log.Infof(Apx.LC.Get("runtimeCommand.info.exportedApp"), c.AppName)
	} else {
		err := subSystem.ExportBin(c.Bin, c.BinOutput)
		if err != nil {
			return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.exportingBin"), err)
		}
		Apx.Log.Infof(Apx.LC.Get("runtimeCommand.info.exportedBin"), c.Bin)
	}
	return nil
}

Fields

Name Type Description
Name string json:"-"
AppName string flag:"short:a, long:app-name, name:pr:apx.cmd.subsystem.export.options.appName"
Bin string flag:"short:b, long:bin, name:pr:apx.cmd.subsystem.export.options.bin"
BinOutput string flag:"short:o, long:bin-output, name:pr:apx.cmd.subsystem.export.options.binOutput"
Args []string arg:"" optional:"" name:"applications" help:"pr:apx.arg.applications"
S
struct

SubsystemUnexportCmd

internal/cli/structs.go:112-119
type SubsystemUnexportCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemUnexportCmd) Run() error
{
	subSystem, err := core.LoadSubSystem(c.Name, false)
	if err != nil {
		return err
	}

	if c.AppName == "" && c.Bin == "" {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.noAppNameOrBin"))
	}

	if c.AppName != "" && c.Bin != "" {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.sameAppOrBin"))
	}

	if c.AppName != "" {
		err := subSystem.UnexportDesktopEntry(c.AppName)
		if err != nil {
			return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.unexportingApp"), err)
		}
		Apx.Log.Infof(Apx.LC.Get("runtimeCommand.info.unexportedApp"), c.AppName)
	} else {
		err := subSystem.UnexportBin(c.Bin, c.BinOutput)
		if err != nil {
			return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.unexportingBin"), err)
		}
		Apx.Log.Infof(Apx.LC.Get("runtimeCommand.info.unexportedBin"), c.Bin)
	}
	return nil
}

Fields

Name Type Description
Name string json:"-"
AppName string flag:"short:a, long:app-name, name:pr:apx.cmd.subsystem.unexport.options.appName"
Bin string flag:"short:b, long:bin, name:pr:apx.cmd.subsystem.unexport.options.bin"
BinOutput string flag:"short:o, long:bin-output, name:pr:apx.cmd.subsystem.unexport.options.binOutput"
Args []string arg:"" optional:"" name:"applications" help:"pr:apx.arg.applications"
S
struct

SubsystemStartCmd

internal/cli/structs.go:121-124
type SubsystemStartCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemStartCmd) Run() error
{
	subSystem, err := core.LoadSubSystem(c.Name, false)
	if err != nil {
		return err
	}
	Apx.Log.Infof(Apx.LC.Get("runtimeCommand.info.startingContainer"), subSystem.Name)
	err = subSystem.Start()
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.startingContainer"), err)
	}
	Apx.Log.Info(Apx.LC.Get("runtimeCommand.info.startedContainer"))
	return nil
}

Fields

Name Type Description
Name string json:"-"
S
struct

SubsystemStopCmd

internal/cli/structs.go:126-129
type SubsystemStopCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemStopCmd) Run() error
{
	subSystem, err := core.LoadSubSystem(c.Name, false)
	if err != nil {
		return err
	}
	Apx.Log.Infof(Apx.LC.Get("runtimeCommand.info.stoppingContainer"), subSystem.Name)
	err = subSystem.Stop()
	if err != nil {
		return fmt.Errorf(Apx.LC.Get("runtimeCommand.error.stoppingContainer"), err)
	}
	Apx.Log.Info(Apx.LC.Get("runtimeCommand.info.stoppedContainer"))
	return nil
}

Fields

Name Type Description
Name string json:"-"
S
struct

SubsystemAutoRemoveCmd

internal/cli/structs.go:131-134
type SubsystemAutoRemoveCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemAutoRemoveCmd) Run() error
{
	return genericPkgManagerCommand(c.Name, "autoremove")
}

Fields

Name Type Description
Name string json:"-"
S
struct

SubsystemCleanCmd

internal/cli/structs.go:136-139
type SubsystemCleanCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemCleanCmd) Run() error
{
	return genericPkgManagerCommand(c.Name, "clean")
}

Fields

Name Type Description
Name string json:"-"
S
struct

SubsystemPurgeCmd

internal/cli/structs.go:141-145
type SubsystemPurgeCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemPurgeCmd) Run() error
{
	return genericPkgManagerArgsCommand(c.Name, "purge", c.Args)
}

Fields

Name Type Description
Name string json:"-"
Args []string arg:"" optional:"" name:"packages" help:"pr:apx.arg.packages"
S
struct

StacksCmd

internal/cli/structs.go:149-158
type StacksCmd struct

Fields

Name Type Description
List StacksListCmd cmd:"list" help:"pr:apx.cmd.stacks.list"
Show StacksShowCmd cmd:"show" help:"pr:apx.cmd.stacks.show"
New StacksNewCmd cmd:"new" help:"pr:apx.cmd.stacks.new"
Update StacksUpdateCmd cmd:"update" help:"pr:apx.cmd.stacks.update"
Rm StacksRmCmd cmd:"rm" help:"pr:apx.cmd.stacks.rm"
Export StacksExportCmd cmd:"export" help:"pr:apx.cmd.stacks.export"
Import StacksImportCmd cmd:"import" help:"pr:apx.cmd.stacks.import"
S
struct

StacksListCmd

internal/cli/structs.go:160-163
type StacksListCmd struct

Methods

Run
Method

Returns

error
func (*StacksListCmd) Run() error
{
	stacks := core.ListStacks()

	if !c.Json {
		stacksCount := len(stacks)
		if stacksCount == 0 {
			fmt.Println(Apx.LC.Get("stacks.list.info.noStacks"))
			return nil
		}

		Apx.Log.Infof(Apx.LC.Get("stacks.list.info.foundStacks"), stacksCount)

		headers := []string{Apx.LC.Get("stacks.labels.name"), "Base", Apx.LC.Get("stacks.labels.builtIn"), "Pkgs", "Pkg manager"}
		var data [][]string
		for _, stack := range stacks {
			builtIn := Apx.LC.Get("apx.terminal.no")
			if stack.BuiltIn {
				builtIn = Apx.LC.Get("apx.terminal.yes")
			}
			data = append(data, []string{stack.Name, stack.Base, builtIn, fmt.Sprintf("%d", len(stack.Packages)), stack.PkgManager})
		}
		Apx.CLI.Table(headers, data)
	} else {
		jsonStacks, err := json.MarshalIndent(stacks, "", "  ")
		if err != nil {
			return err
		}

		fmt.Println(string(jsonStacks))
	}

	return nil
}

Fields

Name Type Description
Json bool flag:"short:j, long:json, name:pr:apx.cmd.stacks.list.options.json"
S
struct

StacksShowCmd

internal/cli/structs.go:165-168
type StacksShowCmd struct

Methods

Run
Method

Returns

error
func (*StacksShowCmd) Run() error
{
	args := c.Args
	if len(args) == 0 {
		return fmt.Errorf("stack name required")
	}
	stack, error := core.LoadStack(args[0])
	if error != nil {
		return error
	}

	headers := []string{"Property", "Value"}
	data := [][]string{
		{Apx.LC.Get("stacks.labels.name"), stack.Name},
		{"Base", stack.Base},
		{"Packages", strings.Join(stack.Packages, ", ")},
		{"Package manager", stack.PkgManager},
	}
	Apx.CLI.Table(headers, data)

	return nil
}

Fields

Name Type Description
Args []string arg:"" optional:"" name:"stack" help:"pr:apx.arg.stack"
S
struct

StacksNewCmd

internal/cli/structs.go:170-177
type StacksNewCmd struct

Methods

Run
Method

Returns

error
func (*StacksNewCmd) Run() error
{

	if c.Name == "" {
		if !c.NoPrompt {
			name, err := Apx.CLI.PromptText(Apx.LC.Get("stacks.new.info.askName"), "")
			if err != nil {
				return err
			}
			c.Name = name
			if c.Name == "" {
				Apx.Log.Error(Apx.LC.Get("stacks.new.error.emptyName"))
				return nil
			}
		} else {
			Apx.Log.Error(Apx.LC.Get("stacks.new.error.noName"))
			return nil
		}
	}

	ok := core.StackExists(c.Name)
	if ok {
		if ok {
			Apx.Log.Errorf(Apx.LC.Get("stacks.new.error.alreadyExists"), c.Name)
			return nil
		}
	}

	if c.BaseImage == "" {
		if !c.NoPrompt {
			base, err := Apx.CLI.PromptText(Apx.LC.Get("stacks.new.info.askBase"), "")
			if err != nil {
				return err
			}
			c.BaseImage = base
			if c.BaseImage == "" {
				Apx.Log.Error(Apx.LC.Get("stacks.new.error.emptyBase"))
				return nil
			}
		} else {
			Apx.Log.Error(Apx.LC.Get("stacks.new.error.noBase"))
			return nil
		}
	}

	if c.PkgManager == "" {
		pkgManagers := core.ListPkgManagers()
		if len(pkgManagers) == 0 {
			Apx.Log.Error(Apx.LC.Get("stacks.new.error.noPkgManagers"))
			return nil
		}

		var options []string
		for _, manager := range pkgManagers {
			options = append(options, manager.Name)
		}

		selected, err := Apx.CLI.SelectOption(Apx.LC.Get("stacks.new.info.selectPkgManager"), options)
		if err != nil {
			return err
		}
		c.PkgManager = selected
	}

	ok = core.PkgManagerExists(c.PkgManager)
	if !ok {
		Apx.Log.Error(Apx.LC.Get("stacks.new.error.pkgManagerDoesNotExist"))
		return nil
	}

	packagesArray := strings.Fields(c.Packages)
	if len(packagesArray) == 0 && !c.NoPrompt {

		confirm, _ := Apx.CLI.ConfirmAction(
			Apx.LC.Get("stacks.new.info.noPackages"),
			"y", "N",
			false,
		)
		if confirm {
			pkgs, _ := Apx.CLI.PromptText(Apx.LC.Get("stacks.new.info.askPackages"), "")
			packagesInput := strings.TrimSpace(pkgs)
			packagesArray = strings.Fields(packagesInput)
		} else {
			packagesArray = []string{}
		}
	}

	stack := core.NewStack(c.Name, c.BaseImage, packagesArray, c.PkgManager, false)

	err := stack.Save()
	if err != nil {
		return err
	}

	Apx.Log.Infof(Apx.LC.Get("stacks.new.info.success"), c.Name)

	return nil
}

Fields

Name Type Description
NoPrompt bool flag:"short:y, long:no-prompt, name:pr:apx.cmd.stacks.new.options.noPrompt"
Name string flag:"short:n, long:name, name:pr:apx.cmd.stacks.new.options.name"
BaseImage string flag:"short:b, long:base, name:pr:apx.cmd.stacks.new.options.base"
Packages string flag:"short:p, long:packages, name:pr:apx.cmd.stacks.new.options.packages"
PkgManager string flag:"short:k, long:pkg-manager, name:pr:apx.cmd.stacks.new.options.pkgManager"
S
struct

StacksUpdateCmd

internal/cli/structs.go:179-187
type StacksUpdateCmd struct

Methods

Run
Method

Returns

error
func (*StacksUpdateCmd) Run() error
{
	args := c.Args
	if c.Name == "" {
		if len(args) != 1 || args[0] == "" {
			Apx.Log.Error(Apx.LC.Get("stacks.update.error.noName"))
			return nil
		}

		c.Name = args[0]
	}

	stack, error := core.LoadStack(c.Name)
	if error != nil {
		return error
	}

	if stack.BuiltIn {
		Apx.Log.Error(Apx.LC.Get("stacks.update.error.builtIn"))
		os.Exit(126)
	}

	if c.BaseImage == "" {
		if !c.NoPrompt {
			base, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("stacks.update.info.askBase"), stack.Base), stack.Base)
			if err != nil {
				return err
			}
			c.BaseImage = base
			if c.BaseImage == "" {
				c.BaseImage = stack.Base
			}
		} else {
			Apx.Log.Error(Apx.LC.Get("stacks.update.error.noBase"))
			return nil
		}
	}

	if c.PkgManager == "" {
		if !c.NoPrompt {
			manager, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("stacks.update.info.askPkgManager"), stack.PkgManager), stack.PkgManager)
			if err != nil {
				return err
			}
			c.PkgManager = manager
			if c.PkgManager == "" {
				c.PkgManager = stack.PkgManager
			}
		} else {
			Apx.Log.Error(Apx.LC.Get("stacks.update.error.noPkgManager"))
			return nil
		}
	}

	ok := core.PkgManagerExists(c.PkgManager)
	if !ok {
		Apx.Log.Error(Apx.LC.Get("stacks.update.error.pkgManagerDoesNotExist"))
		return nil
	}

	if len(c.Packages) > 0 {
		stack.Packages = strings.Fields(c.Packages)
	} else if !c.NoPrompt {
		msg := Apx.LC.Get("stacks.update.info.noPackages")
		if len(stack.Packages) > 0 {
			msg = Apx.LC.Get("stacks.update.info.confirmPackages") + "\n\t -" + strings.Join(stack.Packages, "\n\t - ")
		}

		confirm, _ := Apx.CLI.ConfirmAction(msg, "y", "N", false)

		packagesArray := []string{}

		if confirm {
			pkgs, _ := Apx.CLI.PromptText(Apx.LC.Get("stacks.update.info.askPackages"), "")
			packagesInput := strings.TrimSpace(pkgs)
			packagesArray = strings.Fields(packagesInput)
			stack.Packages = packagesArray
		}
	}

	stack.Base = c.BaseImage
	stack.PkgManager = c.PkgManager

	err := stack.Save()
	if err != nil {
		return err
	}

	Apx.Log.Infof(Apx.LC.Get("stacks.update.info.success"), c.Name)

	return nil
}

Fields

Name Type Description
NoPrompt bool flag:"short:y, long:no-prompt, name:pr:apx.cmd.stacks.update.options.noPrompt"
Name string flag:"short:n, long:name, name:pr:apx.cmd.stacks.update.options.name"
BaseImage string flag:"short:b, long:base, name:pr:apx.cmd.stacks.update.options.base"
Packages string flag:"short:p, long:packages, name:pr:apx.cmd.stacks.update.options.packages"
PkgManager string flag:"short:k, long:pkg-manager, name:pr:apx.cmd.stacks.update.options.pkgManager"
Args []string arg:"" optional:"" name:"stack" help:"pr:apx.arg.stack"
S
struct

PkgManagersShowCmd

internal/cli/structs.go:189-192
type PkgManagersShowCmd struct

Methods

Run
Method

Returns

error
func (*PkgManagersShowCmd) Run() error
{
	args := c.Args
	if len(args) == 0 {
		return fmt.Errorf("package manager name required")
	}
	pkgManagerName := args[0]
	pkgManager, err := core.LoadPkgManager(pkgManagerName)
	if err != nil {
		Apx.Log.Error(err.Error())
		return nil
	}

	headers := []string{"Property", "Value"}
	data := [][]string{
		{Apx.LC.Get("pkgmanagers.labels.name"), pkgManager.Name},
		{"NeedSudo", fmt.Sprintf("%t", pkgManager.NeedSudo)},
		{"AutoRemove", pkgManager.CmdAutoRemove},
		{"Clean", pkgManager.CmdClean},
		{"Install", pkgManager.CmdInstall},
		{"List", pkgManager.CmdList},
		{"Purge", pkgManager.CmdPurge},
		{"Remove", pkgManager.CmdRemove},
		{"Search", pkgManager.CmdSearch},
		{"Show", pkgManager.CmdShow},
		{"Update", pkgManager.CmdUpdate},
		{"Upgrade", pkgManager.CmdUpgrade},
	}

	err = Apx.CLI.Table(headers, data)
	if err != nil {
		return err
	}

	return nil
}

Fields

Name Type Description
Args []string arg:"" optional:"" name:"pkgmanager" help:"pr:apx.arg.pkgmanager"
S
struct

PkgManagersUpdateCmd

internal/cli/structs.go:194-210
type PkgManagersUpdateCmd struct

Methods

Run
Method

Returns

error
func (*PkgManagersUpdateCmd) Run() error
{
	args := c.Args
	if c.Name == "" {
		if len(args) != 1 || args[0] == "" {
			Apx.Log.Error(Apx.LC.Get("pkgmanagers.update.error.noName"))
			return nil
		}

		c.Name = args[0]
	}

	pkgmanager, error := core.LoadPkgManager(c.Name)
	if error != nil {
		return error
	}

	if pkgmanager.BuiltIn {
		Apx.Log.Error(Apx.LC.Get("pkgmanagers.update.error.builtIn"))
		os.Exit(126)
	}

	if c.AutoRemove == "" {
		if !c.NoPrompt {
			answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.update.info.askNewCommand"), "autoRemove", pkgmanager.CmdAutoRemove), pkgmanager.CmdAutoRemove)
			if err != nil {
				return err
			}
			c.AutoRemove = strings.TrimSpace(answer)
			if c.AutoRemove == "" {
				c.AutoRemove = pkgmanager.CmdAutoRemove
			}
		} else {
			Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.update.error.missingCommand"), "autoRemove")
			return nil
		}
	}

	if c.Clean == "" {
		if !c.NoPrompt {
			answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.update.info.askNewCommand"), "clean", pkgmanager.CmdClean), pkgmanager.CmdClean)
			if err != nil {
				return err
			}
			c.Clean = strings.TrimSpace(answer)
			if c.Clean == "" {
				c.Clean = pkgmanager.CmdClean
			}
		} else {
			Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.update.error.missingCommand"), "clean")
			return nil
		}
	}

	if c.Install == "" {
		if !c.NoPrompt {
			answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.update.info.askNewCommand"), "install", pkgmanager.CmdInstall), pkgmanager.CmdInstall)
			if err != nil {
				return err
			}
			c.Install = strings.TrimSpace(answer)
			if c.Install == "" {
				c.Install = pkgmanager.CmdInstall
			}
		} else {
			Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.update.error.missingCommand"), "install")
			return nil
		}
	}

	if c.List == "" {
		if !c.NoPrompt {
			answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.update.info.askNewCommand"), "list", pkgmanager.CmdList), pkgmanager.CmdList)
			if err != nil {
				return err
			}
			c.List = strings.TrimSpace(answer)
			if c.List == "" {
				c.List = pkgmanager.CmdList
			}
		} else {
			Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.update.error.missingCommand"), "list")
			return nil
		}
	}

	if c.Purge == "" {
		if !c.NoPrompt {
			answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.update.info.askNewCommand"), "purge", pkgmanager.CmdPurge), pkgmanager.CmdPurge)
			if err != nil {
				return err
			}
			c.Purge = strings.TrimSpace(answer)
			if c.Purge == "" {
				c.Purge = pkgmanager.CmdPurge
			}
		} else {
			Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.update.error.missingCommand"), "purge")
			return nil
		}
	}

	if c.Remove == "" {
		if !c.NoPrompt {
			answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.update.info.askNewCommand"), "remove", pkgmanager.CmdRemove), pkgmanager.CmdRemove)
			if err != nil {
				return err
			}
			c.Remove = strings.TrimSpace(answer)
			if c.Remove == "" {
				c.Remove = pkgmanager.CmdRemove
			}
		} else {
			Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.update.error.missingCommand"), "remove")
			return nil
		}
	}

	if c.Search == "" {
		if !c.NoPrompt {
			answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.update.info.askNewCommand"), "search", pkgmanager.CmdSearch), pkgmanager.CmdSearch)
			if err != nil {
				return err
			}
			c.Search = strings.TrimSpace(answer)
			if c.Search == "" {
				c.Search = pkgmanager.CmdSearch
			}
		} else {
			Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.update.error.missingCommand"), "search")
			return nil
		}
	}

	if c.Show == "" {
		if !c.NoPrompt {
			answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.update.info.askNewCommand"), "show", pkgmanager.CmdShow), pkgmanager.CmdShow)
			if err != nil {
				return err
			}
			c.Show = strings.TrimSpace(answer)
			if c.Show == "" {
				c.Show = pkgmanager.CmdShow
			}
		} else {
			Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.update.error.missingCommand"), "show")
			return nil
		}
	}

	if c.Update == "" {
		if !c.NoPrompt {
			answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.update.info.askNewCommand"), "update", pkgmanager.CmdUpdate), pkgmanager.CmdUpdate)
			if err != nil {
				return err
			}
			c.Update = strings.TrimSpace(answer)
			if c.Update == "" {
				c.Update = pkgmanager.CmdUpdate
			}
		} else {
			Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.update.error.missingCommand"), "update")
			return nil
		}
	}

	if c.Upgrade == "" {
		if !c.NoPrompt {
			answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.update.info.askNewCommand"), "upgrade", pkgmanager.CmdUpgrade), pkgmanager.CmdUpgrade)
			if err != nil {
				return err
			}
			c.Upgrade = strings.TrimSpace(answer)
			if c.Upgrade == "" {
				c.Upgrade = pkgmanager.CmdUpgrade
			}
		} else {
			Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.update.error.missingCommand"), "upgrade")
			return nil
		}
	}

	pkgmanager.NeedSudo = c.NeedSudo
	pkgmanager.CmdAutoRemove = c.AutoRemove
	pkgmanager.CmdClean = c.Clean
	pkgmanager.CmdInstall = c.Install
	pkgmanager.CmdList = c.List
	pkgmanager.CmdPurge = c.Purge
	pkgmanager.CmdRemove = c.Remove
	pkgmanager.CmdSearch = c.Search
	pkgmanager.CmdShow = c.Show
	pkgmanager.CmdUpdate = c.Update
	pkgmanager.CmdUpgrade = c.Upgrade

	err := pkgmanager.Save()
	if err != nil {
		return err
	}

	Apx.Log.Term.Info().Msgf(Apx.LC.Get("pkgmanagers.new.success"), c.Name)

	return nil
}

Fields

Name Type Description
NoPrompt bool flag:"short:y, long:no-prompt, name:pr:apx.cmd.pkgmanagers.new.options.noPrompt"
Name string flag:"short:n, long:name, name:pr:apx.cmd.pkgmanagers.new.options.name"
NeedSudo bool flag:"short:S, long:need-sudo, name:pr:apx.cmd.pkgmanagers.new.options.needSudo"
AutoRemove string flag:"short:a, long:autoremove, name:pr:apx.cmd.pkgmanagers.new.options.autoremove"
Clean string flag:"short:c, long:clean, name:pr:apx.cmd.pkgmanagers.new.options.clean"
Install string flag:"short:i, long:install, name:pr:apx.cmd.pkgmanagers.new.options.install"
List string flag:"short:l, long:list, name:pr:apx.cmd.pkgmanagers.new.options.list"
Purge string flag:"short:p, long:purge, name:pr:apx.cmd.pkgmanagers.new.options.purge"
Remove string flag:"short:r, long:remove, name:pr:apx.cmd.pkgmanagers.new.options.remove"
Search string flag:"short:s, long:search, name:pr:apx.cmd.pkgmanagers.new.options.search"
Show string flag:"short:w, long:show, name:pr:apx.cmd.pkgmanagers.new.options.show"
Update string flag:"short:u, long:update, name:pr:apx.cmd.pkgmanagers.new.options.update"
Upgrade string flag:"short:U, long:upgrade, name:pr:apx.cmd.pkgmanagers.new.options.upgrade"
Args []string arg:"" optional:"" name:"pkgmanager" help:"pr:apx.arg.pkgmanager"
S
struct

StacksRmCmd

internal/cli/structs.go:212-216
type StacksRmCmd struct

Methods

Run
Method

Returns

error
func (*StacksRmCmd) Run() error
{
	if c.Name == "" {
		Apx.Log.Error(Apx.LC.Get("stacks.rm.error.noName"))
		return nil
	}

	subSystems, _ := core.ListSubsystemForStack(c.Name)
	if len(subSystems) > 0 {
		Apx.Log.Errorf(Apx.LC.Get("stacks.rm.error.inUse"), len(subSystems))
		headers := []string{Apx.LC.Get("subsystems.labels.name"), "Stack", Apx.LC.Get("subsystems.labels.status"), "Pkgs"}
		var data [][]string
		for _, subSystem := range subSystems {
			data = append(data, []string{
				subSystem.Name,
				subSystem.Stack.Name,
				subSystem.Status,
				fmt.Sprintf("%d", len(subSystem.Stack.Packages)),
			})
		}
		Apx.CLI.Table(headers, data)
		return nil
	}

	if !c.Force {
		confirm, err := Apx.CLI.ConfirmAction(
			fmt.Sprintf(Apx.LC.Get("stacks.rm.info.askConfirmation"), c.Name),
			"y", "N",
			false,
		)
		if err != nil {
			return err
		}
		if !confirm {
			Apx.Log.Infof(Apx.LC.Get("pkgmanagers.rm.info.aborting"), c.Name)
			return nil
		}
	}

	stack, error := core.LoadStack(c.Name)
	if error != nil {
		return error
	}

	error = stack.Remove()
	if error != nil {
		return error
	}

	Apx.Log.Infof(Apx.LC.Get("stacks.rm.info.success"), c.Name)
	return nil
}

Fields

Name Type Description
Name string flag:"short:n, long:name, name:pr:apx.cmd.stacks.rm.options.name"
Force bool flag:"short:f, long:force, name:pr:apx.cmd.stacks.rm.options.force"
S
struct

StacksExportCmd

internal/cli/structs.go:218-222
type StacksExportCmd struct

Methods

Run
Method

Returns

error
func (*StacksExportCmd) Run() error
{
	if c.Name == "" {
		Apx.Log.Error(Apx.LC.Get("stacks.export.error.noName"))
		return nil
	}

	stack, error := core.LoadStack(c.Name)
	if error != nil {
		return error
	}

	if c.Output == "" {
		Apx.Log.Error(Apx.LC.Get("stacks.export.error.noOutput"))
		return nil
	}

	error = stack.Export(c.Output)
	if error != nil {
		return error
	}

	Apx.Log.Infof(Apx.LC.Get("stacks.export.info.success"), stack.Name, c.Output)
	return nil
}

Fields

Name Type Description
Name string flag:"short:n, long:name, name:pr:apx.cmd.stacks.export.options.name"
Output string flag:"short:o, long:output, name:pr:apx.cmd.stacks.export.options.output"
S
struct

StacksImportCmd

internal/cli/structs.go:224-227
type StacksImportCmd struct

Methods

Run
Method

Returns

error
func (*StacksImportCmd) Run() error
{
	if c.Input == "" {
		Apx.Log.Error(Apx.LC.Get("stacks.import.error.noInput"))
		return nil
	}

	stack, error := core.LoadStackFromPath(c.Input)
	if error != nil {
		Apx.Log.Errorf(Apx.LC.Get("stacks.import.error.cannotLoad"), c.Input)
	}

	error = stack.Save()
	if error != nil {
		return error
	}

	Apx.Log.Infof(Apx.LC.Get("stacks.import.info.success"), stack.Name)
	return nil
}

Fields

Name Type Description
Input string flag:"short:i, long:input, name:pr:apx.cmd.stacks.import.options.input"
S
struct

SubsystemsCmd

internal/cli/structs.go:231-237
type SubsystemsCmd struct

Fields

Name Type Description
List SubsystemsListCmd cmd:"list" help:"pr:apx.cmd.subsystems.list"
New SubsystemsNewCmd cmd:"new" help:"pr:apx.cmd.subsystems.new"
Rm SubsystemsRmCmd cmd:"rm" help:"pr:apx.cmd.subsystems.rm"
Reset SubsystemsResetCmd cmd:"reset" help:"pr:apx.cmd.subsystems.reset"
S
struct

SubsystemsListCmd

internal/cli/structs.go:239-242
type SubsystemsListCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemsListCmd) Run() error
{
	subSystems, err := core.ListSubSystems(false, false)
	if err != nil {
		return err
	}

	if !c.Json {
		subSystemsCount := len(subSystems)
		if subSystemsCount == 0 {
			Apx.Log.Info(Apx.LC.Get("subsystems.list.info.noSubsystems"))
			return nil
		}

		Apx.Log.Infof(Apx.LC.Get("subsystems.list.info.foundSubsystems"), subSystemsCount)

		headers := []string{Apx.LC.Get("subsystems.labels.name"), "Stack", Apx.LC.Get("subsystems.labels.status"), "Pkgs"}
		var data [][]string
		for _, subSystem := range subSystems {
			data = append(data, []string{
				subSystem.Name,
				subSystem.Stack.Name,
				subSystem.Status,
				fmt.Sprintf("%d", len(subSystem.Stack.Packages)),
			})
		}

		err := Apx.CLI.Table(headers, data)
		if err != nil {
			return err
		}
	} else {
		jsonSubSystems, err := json.MarshalIndent(subSystems, "", "  ")
		if err != nil {
			return err
		}

		fmt.Println(string(jsonSubSystems))
	}

	return nil
}

Fields

Name Type Description
Json bool flag:"short:j, long:json, name:pr:apx.cmd.subsystem.list.options.json"
S
struct

SubsystemsNewCmd

internal/cli/structs.go:244-250
type SubsystemsNewCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemsNewCmd) Run() error
{

	stacks := core.ListStacks()
	if len(stacks) == 0 {
		Apx.Log.Error(Apx.LC.Get("subsystems.new.error.noStacks"))
		return nil
	}

	if c.Name == "" {
		name, err := Apx.CLI.PromptText(Apx.LC.Get("subsystems.new.info.askName"), "")
		if err != nil {
			return err
		}
		c.Name = name
		if c.Name == "" {
			Apx.Log.Error(Apx.LC.Get("subsystems.new.error.emptyName"))
			return nil
		}
	}

	if c.Stack == "" {
		var options []string
		for _, stack := range stacks {
			options = append(options, stack.Name)
		}

		selected, err := Apx.CLI.SelectOption(Apx.LC.Get("subsystems.new.info.selectStack"), options)
		if err != nil {
			return err
		}
		c.Stack = selected
	}

	checkSubSystem, err := core.LoadSubSystem(c.Name, false)
	if err == nil {
		Apx.Log.Errorf(Apx.LC.Get("subsystems.new.error.alreadyExists"), checkSubSystem.Name)
		return nil
	}

	// Checking if name conflicts with existing commands.
	// In SDK declarative approach, we might need a way to check root commands.
	// Apx.CLI.GetRoot() returns the struct.
	// We can iterate simple tags or just use known conflicts.
	// For now we skip detailed conflict check as we are rebuilding.
	// Or we could check if c.Name is a valid command name if feasible.

	stack, err := core.LoadStack(c.Stack)
	if err != nil {
		return err
	}

	subSystem, err := core.NewSubSystem(c.Name, stack, c.Home, c.Init, false, false, false, true, "")
	if err != nil {
		return err
	}

	spinner := Apx.CLI.StartSpinner(fmt.Sprintf(Apx.LC.Get("subsystems.new.info.creatingSubsystem"), c.Name, c.Stack))

	err = subSystem.Create()
	if err != nil {
		spinner.Stop()
		return err
	}

	spinner.Stop()
	Apx.Log.Infof(Apx.LC.Get("subsystems.new.info.success"), c.Name)

	return nil
}

Fields

Name Type Description
Stack string flag:"short:s, long:stack, name:pr:apx.cmd.subsystem.new.options.stack"
Name string flag:"short:n, long:name, name:pr:apx.cmd.subsystem.new.options.name"
Home string flag:"short:H, long:home, name:pr:apx.cmd.subsystem.new.options.home"
Init bool flag:"short:i, long:init, name:pr:apx.cmd.subsystem.new.options.init"
S
struct

SubsystemsRmCmd

internal/cli/structs.go:252-256
type SubsystemsRmCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemsRmCmd) Run() error
{
	if c.Name == "" {
		Apx.Log.Error(Apx.LC.Get("subsystems.rm.error.noName"))
		return nil
	}

	if !c.Force {
		confirm, _ := Apx.CLI.ConfirmAction(
			fmt.Sprintf(Apx.LC.Get("subsystems.rm.info.askConfirmation"), c.Name),
			"y", "N",
			false,
		)
		if !confirm {
			Apx.Log.Term.Info().Msg(Apx.LC.Get("apx.info.aborting"))
			return nil
		}
	}

	subSystem, err := core.LoadSubSystem(c.Name, false)
	if err != nil {
		return err
	}

	err = subSystem.Remove()
	if err != nil {
		return err
	}

	Apx.Log.Infof(Apx.LC.Get("subsystems.rm.info.success"), c.Name)

	return nil
}

Fields

Name Type Description
Name string flag:"short:n, long:name, name:pr:apx.cmd.subsystem.rm.options.name"
Force bool flag:"short:f, long:force, name:pr:apx.cmd.subsystem.rm.options.force"
S
struct

SubsystemsResetCmd

internal/cli/structs.go:258-262
type SubsystemsResetCmd struct

Methods

Run
Method

Returns

error
func (*SubsystemsResetCmd) Run() error
{
	if c.Name == "" {
		Apx.Log.Error(Apx.LC.Get("subsystems.reset.error.noName"))
		return nil
	}

	if !c.Force {
		confirm, _ := Apx.CLI.ConfirmAction(
			fmt.Sprintf(Apx.LC.Get("subsystems.reset.info.askConfirmation"), c.Name),
			"y", "N",
			false,
		)
		if !confirm {
			Apx.Log.Info(Apx.LC.Get("apx.info.aborting"))
			return nil
		}
	}

	subSystem, err := core.LoadSubSystem(c.Name, false)
	if err != nil {
		return err
	}

	err = subSystem.Reset()
	if err != nil {
		return err
	}

	Apx.Log.Infof(Apx.LC.Get("subsystems.reset.info.success"), c.Name)

	return nil
}

Fields

Name Type Description
Name string flag:"short:n, long:name, name:pr:apx.cmd.subsystem.reset.options.name"
Force bool flag:"short:f, long:force, name:pr:apx.cmd.subsystem.reset.options.force"
S
struct

PkgManagersCmd

internal/cli/structs.go:266-275
type PkgManagersCmd struct

Fields

Name Type Description
List PkgManagersListCmd cmd:"list" help:"pr:apx.cmd.pkgmanagers.list"
Show PkgManagersShowCmd cmd:"show" help:"pr:apx.cmd.pkgmanagers.show"
New PkgManagersNewCmd cmd:"new" help:"pr:apx.cmd.pkgmanagers.new"
Rm PkgManagersRmCmd cmd:"rm" help:"pr:apx.cmd.pkgmanagers.rm"
Export PkgManagersExportCmd cmd:"export" help:"pr:apx.cmd.pkgmanagers.export"
Import PkgManagersImportCmd cmd:"import" help:"pr:apx.cmd.pkgmanagers.import"
Update PkgManagersUpdateCmd cmd:"update" help:"pr:apx.cmd.pkgmanagers.update"
S
struct

PkgManagersListCmd

internal/cli/structs.go:277-280
type PkgManagersListCmd struct

Methods

Run
Method

Returns

error
func (*PkgManagersListCmd) Run() error
{
	pkgManagers := core.ListPkgManagers()

	if !c.Json {
		pkgManagersCount := len(pkgManagers)
		if pkgManagersCount == 0 {
			Apx.Log.Info(Apx.LC.Get("pkgmanagers.list.info.noPkgManagers"))
			return nil
		}

		Apx.Log.Infof(Apx.LC.Get("pkgmanagers.list.info.foundPkgManagers"), pkgManagersCount)

		headers := []string{Apx.LC.Get("pkgmanagers.labels.name"), Apx.LC.Get("pkgmanagers.labels.builtIn")}
		var data [][]string
		for _, stack := range pkgManagers {
			builtIn := Apx.LC.Get("apx.terminal.no")
			if stack.BuiltIn {
				builtIn = Apx.LC.Get("apx.terminal.yes")
			}
			data = append(data, []string{stack.Name, builtIn})
		}

		err := Apx.CLI.Table(headers, data)
		if err != nil {
			return err
		}
	} else {
		jsonPkgManagers, _ := json.MarshalIndent(pkgManagers, "", "  ")
		fmt.Println(string(jsonPkgManagers))
	}

	return nil
}

Fields

Name Type Description
Json bool flag:"short:j, long:json, name:pr:apx.cmd.pkgmanagers.list.options.json"
S
struct

PkgManagersNewCmd

internal/cli/structs.go:282-297
type PkgManagersNewCmd struct

Methods

Run
Method

Returns

error
func (*PkgManagersNewCmd) Run() error
{

	if c.Name == "" {
		if c.NoPrompt {
			Apx.Log.Error(Apx.LC.Get("pkgmanagers.new.error.noName"))
			return nil
		}

		name, err := Apx.CLI.PromptText(Apx.LC.Get("pkgmanagers.new.info.askName"), "")
		if err != nil {
			return err
		}
		c.Name = name
		c.Name = strings.ReplaceAll(c.Name, "\n", "")
		c.Name = strings.ReplaceAll(c.Name, " ", "")
		if c.Name == "" {
			Apx.Log.Error(Apx.LC.Get("pkgmanagers.new.error.emptyName"))
			return nil
		}
	}

	if !c.NeedSudo && !c.NoPrompt {
		choice, err := Apx.CLI.ConfirmAction(
			Apx.LC.Get("pkgmanagers.new.info.askSudo"),
			"y", "N",
			false,
		)
		if err != nil {
			return err
		}
		c.NeedSudo = choice
	}

	cmdMap := map[string]*string{
		PkgManagerCmdAutoRemove: &c.AutoRemove,
		PkgManagerCmdClean:      &c.Clean,
		PkgManagerCmdInstall:    &c.Install,
		PkgManagerCmdList:       &c.List,
		PkgManagerCmdPurge:      &c.Purge,
		PkgManagerCmdRemove:     &c.Remove,
		PkgManagerCmdSearch:     &c.Search,
		PkgManagerCmdShow:       &c.Show,
		PkgManagerCmdUpdate:     &c.Update,
		PkgManagerCmdUpgrade:    &c.Upgrade,
	}

	for _, cmdName := range PkgManagerCmdSetOrder {
		cmd := cmdMap[cmdName]
		if *cmd == "" {
			if c.NoPrompt {
				Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.new.error.noCommand"), cmdName)
				return nil
			}
			if cmdName == PkgManagerCmdPurge || cmdName == PkgManagerCmdAutoRemove {
				answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.new.info.askCommandWithDefault"), cmdName, c.Remove), c.Remove)
				if err != nil {
					return err
				}
				*cmd = strings.TrimSpace(answer)
				if *cmd == "" {
					*cmd = c.Remove
				}
				continue
			}

			answer, err := Apx.CLI.PromptText(fmt.Sprintf(Apx.LC.Get("pkgmanagers.new.info.askCommand"), cmdName), "")
			if err != nil {
				return err
			}
			*cmd = strings.TrimSpace(answer)
			if *cmd == "" {
				Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.new.error.emptyCommand"), cmdName)
				return nil
			}
		}
	}

	if core.PkgManagerExists(c.Name) {
		if c.NoPrompt {
			Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.new.error.alreadyExists"), c.Name)
			return nil
		}

		confirm, err := Apx.CLI.ConfirmAction(
			fmt.Sprintf(Apx.LC.Get("pkgmanagers.new.info.askOverwrite"), c.Name),
			"y", "N",
			false,
		)
		if err != nil {
			return err
		}

		if !confirm {
			Apx.Log.Info(Apx.LC.Get("apx.info.aborting"))
			return nil
		}
	}

	pkgManager := core.NewPkgManager(c.Name, c.NeedSudo, c.AutoRemove, c.Clean, c.Install, c.List, c.Purge, c.Remove, c.Search, c.Show, c.Update, c.Upgrade, false)
	err := pkgManager.Save()
	if err != nil {
		Apx.Log.Error(err.Error())
		return nil
	}

	Apx.Log.Infof(Apx.LC.Get("pkgmanagers.new.success"), c.Name)

	return nil
}

Fields

Name Type Description
NoPrompt bool flag:"short:y, long:no-prompt, name:pr:apx.cmd.pkgmanagers.new.options.noPrompt"
Name string flag:"short:n, long:name, name:pr:apx.cmd.pkgmanagers.new.options.name"
NeedSudo bool flag:"short:S, long:need-sudo, name:pr:apx.cmd.pkgmanagers.new.options.needSudo"
AutoRemove string flag:"short:a, long:autoremove, name:pr:apx.cmd.pkgmanagers.new.options.autoremove"
Clean string flag:"short:c, long:clean, name:pr:apx.cmd.pkgmanagers.new.options.clean"
Install string flag:"short:i, long:install, name:pr:apx.cmd.pkgmanagers.new.options.install"
List string flag:"short:l, long:list, name:pr:apx.cmd.pkgmanagers.new.options.list"
Purge string flag:"short:p, long:purge, name:pr:apx.cmd.pkgmanagers.new.options.purge"
Remove string flag:"short:r, long:remove, name:pr:apx.cmd.pkgmanagers.new.options.remove"
Search string flag:"short:s, long:search, name:pr:apx.cmd.pkgmanagers.new.options.search"
Show string flag:"short:w, long:show, name:pr:apx.cmd.pkgmanagers.new.options.show"
Update string flag:"short:u, long:update, name:pr:apx.cmd.pkgmanagers.new.options.update"
Upgrade string flag:"short:U, long:upgrade, name:pr:apx.cmd.pkgmanagers.new.options.upgrade"
S
struct

PkgManagersRmCmd

internal/cli/structs.go:299-303
type PkgManagersRmCmd struct

Methods

Run
Method

Returns

error
func (*PkgManagersRmCmd) Run() error
{
	if c.Name == "" {
		Apx.Log.Error(Apx.LC.Get("pkgmanagers.rm.error.noName"))
		return nil
	}

	pkgManager, error := core.LoadPkgManager(c.Name)
	if error != nil {
		return error
	}

	stacks := core.ListStackForPkgManager(pkgManager.Name)
	if len(stacks) > 0 {
		Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.rm.error.inUse"), len(stacks))
		headers := []string{Apx.LC.Get("pkgmanagers.labels.name"), "Base", "Packages", "PkgManager", Apx.LC.Get("pkgmanagers.labels.builtIn")}
		var data [][]string
		for _, stack := range stacks {
			builtIn := Apx.LC.Get("apx.terminal.no")
			if stack.BuiltIn {
				builtIn = Apx.LC.Get("apx.terminal.yes")
			}
			data = append(data, []string{stack.Name, stack.Base, strings.Join(stack.Packages, ", "), stack.PkgManager, builtIn})
		}
		Apx.CLI.Table(headers, data)
		return nil
	}

	if !c.Force {
		confirm, err := Apx.CLI.ConfirmAction(
			fmt.Sprintf(Apx.LC.Get("pkgmanagers.rm.info.askConfirmation"), c.Name),
			"y", "N",
			false,
		)
		if err != nil {
			return err
		}
		if !confirm {
			Apx.Log.Infof(Apx.LC.Get("pkgmanagers.rm.info.aborting"), c.Name)
			return nil
		}
	}

	error = pkgManager.Remove()
	if error != nil {
		return error
	}

	Apx.Log.Infof(Apx.LC.Get("pkgmanagers.rm.info.success"), c.Name)
	return nil
}

Fields

Name Type Description
Name string flag:"short:n, long:name, name:pr:apx.cmd.pkgmanagers.rm.options.name"
Force bool flag:"short:f, long:force, name:pr:apx.cmd.pkgmanagers.rm.options.force"
S
struct

PkgManagersExportCmd

internal/cli/structs.go:305-309
type PkgManagersExportCmd struct

Methods

Run
Method

Returns

error
func (*PkgManagersExportCmd) Run() error
{
	if c.Name == "" {
		Apx.Log.Error(Apx.LC.Get("pkgmanagers.export.error.noName"))
		return nil
	}

	pkgManager, error := core.LoadPkgManager(c.Name)
	if error != nil {
		return error
	}

	if c.Output == "" {
		Apx.Log.Error(Apx.LC.Get("pkgmanagers.export.error.noOutput"))
		return nil
	}

	error = pkgManager.Export(c.Output)
	if error != nil {
		return error
	}

	Apx.Log.Infof(Apx.LC.Get("pkgmanagers.export.info.success"), pkgManager.Name, c.Output)
	return nil
}

Fields

Name Type Description
Name string flag:"short:n, long:name, name:pr:apx.cmd.pkgmanagers.export.options.name"
Output string flag:"short:o, long:output, name:pr:apx.cmd.pkgmanagers.export.options.output"
S
struct

PkgManagersImportCmd

internal/cli/structs.go:311-314
type PkgManagersImportCmd struct

Methods

Run
Method

Returns

error
func (*PkgManagersImportCmd) Run() error
{
	if c.Input == "" {
		Apx.Log.Error(Apx.LC.Get("pkgmanagers.import.error.noInput"))
		return nil
	}

	pkgmanager, error := core.LoadPkgManagerFromPath(c.Input)
	if error != nil {
		Apx.Log.Errorf(Apx.LC.Get("pkgmanagers.import.error.cannotLoad"), c.Input)
	}

	error = pkgmanager.Save()
	if error != nil {
		return error
	}

	Apx.Log.Infof(Apx.LC.Get("pkgmanagers.import.info.success"), pkgmanager.Name)
	return nil
}

Fields

Name Type Description
Input string flag:"short:i, long:input, name:pr:apx.cmd.pkgmanagers.import.options.input"