All checks were successful
check / check (push) Successful in 1m8s
- Replace .golangci.yml with the canonical strict config (all linters enabled except the standard disable list; lll 88, funlen 80/50, cyclop 15, dupl 100; test files now linted) - Pin the Dockerfile lint stage to golangci/golangci-lint:v2.12.2 by tag and digest (Debian-based) - Fix all ~1550 findings surfaced by the new config: line wrapping, wsl_v5/nlreturn blank lines, noinlineerr splits, err113 sentinel errors, perfsprint/modernize rewrites, goconst constants, thelper, testifylint, noctx CommandContext, testpackage conversions, t.Parallel() where safe, and complexity/dupl helper extraction - Record the change and follow-up items in TODO.md
68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package cli
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"strings"
|
|
|
|
"git.eeqj.de/sneak/secret/internal/secret"
|
|
)
|
|
|
|
// ExecuteCommandInProcess executes a CLI command in-process for testing
|
|
func ExecuteCommandInProcess(
|
|
args []string, stdin string, env map[string]string,
|
|
) (string, error) {
|
|
secret.Debug("ExecuteCommandInProcess called", "args", args)
|
|
|
|
// Save current environment
|
|
savedEnv := make(map[string]string)
|
|
for k := range env {
|
|
savedEnv[k] = os.Getenv(k)
|
|
}
|
|
|
|
// Set test environment
|
|
for k, v := range env {
|
|
_ = os.Setenv(k, v)
|
|
}
|
|
|
|
// Create root command
|
|
rootCmd := newRootCmd()
|
|
|
|
// Capture output
|
|
var buf bytes.Buffer
|
|
rootCmd.SetOut(&buf)
|
|
rootCmd.SetErr(&buf)
|
|
|
|
// Set stdin if provided
|
|
if stdin != "" {
|
|
rootCmd.SetIn(strings.NewReader(stdin))
|
|
}
|
|
|
|
// Set args
|
|
rootCmd.SetArgs(args)
|
|
|
|
// Execute command
|
|
err := rootCmd.Execute()
|
|
|
|
output := buf.String()
|
|
secret.Debug("Command execution completed",
|
|
"error", err, "outputLength", len(output), "output", output)
|
|
|
|
// Add debug info for troubleshooting
|
|
if len(output) == 0 && err == nil {
|
|
secret.Debug("Warning: Command executed successfully but produced no output",
|
|
"args", args)
|
|
}
|
|
|
|
// Restore environment
|
|
for k, v := range savedEnv {
|
|
if v == "" {
|
|
_ = os.Unsetenv(k)
|
|
} else {
|
|
_ = os.Setenv(k, v)
|
|
}
|
|
}
|
|
|
|
return output, err
|
|
}
|