From f5a57d0519dc53e1592ef2bb59b7db5003f134a9 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 29 Dec 2025 18:29:35 -0500 Subject: [PATCH 1/2] Wait for uninstall batch script on Windows to complete on CI. --- internal/runners/clean/run_win.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/internal/runners/clean/run_win.go b/internal/runners/clean/run_win.go index ab8e216a78..47a08ef209 100644 --- a/internal/runners/clean/run_win.go +++ b/internal/runners/clean/run_win.go @@ -7,10 +7,12 @@ import ( "errors" "fmt" "os" + "os/exec" "path/filepath" svcApp "github.com/ActiveState/cli/cmd/state-svc/app" "github.com/ActiveState/cli/internal/assets" + "github.com/ActiveState/cli/internal/condition" "github.com/ActiveState/cli/internal/config" "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/installation" @@ -160,9 +162,16 @@ func removePaths(logFile string, paths ...string) error { args := []string{"/C", sf.Filename(), logFile, fmt.Sprintf("%d", os.Getpid()), filepath.Base(exe)} args = append(args, paths...) - _, err = osutils.ExecuteAndForget("cmd.exe", args) + if !condition.OnCI() { + _, err = osutils.ExecuteAndForget("cmd.exe", args) + } else { + var cmd *exec.Cmd + if _, cmd, err = osutils.Execute("cmd.exe", args, nil); err == nil { + err = cmd.Wait() + } + } if err != nil { - return locale.WrapError(err, "err_clean_start", "Could not start remove direcotry script") + return locale.WrapError(err, "err_clean_start", "Could not start remove directory script") } return nil From 2778373dc92f58ad0dab92fdde3d9904176fafd5 Mon Sep 17 00:00:00 2001 From: mitchell Date: Tue, 30 Dec 2025 13:09:38 -0500 Subject: [PATCH 2/2] Try spawning the batch file without a parent process. --- internal/runners/clean/run_win.go | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/internal/runners/clean/run_win.go b/internal/runners/clean/run_win.go index 47a08ef209..ca17da4c8f 100644 --- a/internal/runners/clean/run_win.go +++ b/internal/runners/clean/run_win.go @@ -7,12 +7,10 @@ import ( "errors" "fmt" "os" - "os/exec" "path/filepath" svcApp "github.com/ActiveState/cli/cmd/state-svc/app" "github.com/ActiveState/cli/internal/assets" - "github.com/ActiveState/cli/internal/condition" "github.com/ActiveState/cli/internal/config" "github.com/ActiveState/cli/internal/errs" "github.com/ActiveState/cli/internal/installation" @@ -159,19 +157,12 @@ func removePaths(logFile string, paths ...string) error { return locale.WrapError(err, "err_clean_executable", "Could not get executable name") } - args := []string{"/C", sf.Filename(), logFile, fmt.Sprintf("%d", os.Getpid()), filepath.Base(exe)} + args := []string{"/C", "start", "", sf.Filename(), logFile, fmt.Sprintf("%d", os.Getpid()), filepath.Base(exe)} args = append(args, paths...) - if !condition.OnCI() { - _, err = osutils.ExecuteAndForget("cmd.exe", args) - } else { - var cmd *exec.Cmd - if _, cmd, err = osutils.Execute("cmd.exe", args, nil); err == nil { - err = cmd.Wait() - } - } + _, err = osutils.ExecuteAndForget("cmd.exe", args) if err != nil { - return locale.WrapError(err, "err_clean_start", "Could not start remove directory script") + return locale.WrapError(err, "err_clean_start", "Could not start remove direcotry script") } return nil