Files
bifrost/cli/internal/installer/installer.go
Beyhan Oğur 880f412e2c first commit
2026-04-26 21:52:23 +03:00

45 lines
1.1 KiB
Go

package installer
import (
"context"
"fmt"
"io"
"os/exec"
"github.com/maximhq/bifrost/cli/internal/harness"
)
// IsInstalled reports whether the harness binary exists in the system PATH.
func IsInstalled(h harness.Harness) bool {
_, err := exec.LookPath(h.Binary)
return err == nil
}
// InstallCommand returns the command and arguments needed to install the harness globally via npm.
func InstallCommand(h harness.Harness) (string, []string) {
return "npm", []string{"install", "-g", h.InstallPkg}
}
// EnsureNPM checks that npm is available in the system PATH.
func EnsureNPM() error {
_, err := exec.LookPath("npm")
if err != nil {
return fmt.Errorf("npm not found in path: %w", err)
}
return nil
}
// RunInstall executes the npm install command for the given harness,
// streaming output to the provided writers.
func RunInstall(ctx context.Context, stdout, stderr io.Writer, h harness.Harness) error {
cmdName, args := InstallCommand(h)
cmd := exec.CommandContext(ctx, cmdName, args...)
cmd.Stdout = stdout
cmd.Stderr = stderr
cmd.Stdin = nil
if err := cmd.Run(); err != nil {
return fmt.Errorf("install %s: %w", h.Label, err)
}
return nil
}