remove windows compatibility

Signed-off-by: Yash Pal <yashpal2104@gmail.com>
This commit is contained in:
Yash Pal 2025-09-16 20:39:22 +05:30
parent 3fef467db9
commit a7ded8c2d8
1 changed files with 39 additions and 100 deletions

View File

@ -82,22 +82,13 @@ func UninstallIstioctl() {
}
}
// Remove istioctl binary from system
osName := runtime.GOOS
var rmCmd *exec.Cmd
if osName == "windows" {
// Windows: Remove from C:\istioctl
rmCmd = exec.Command("del", "/f", "/q", "C:\\istioctl\\istioctl.exe")
} else {
// Unix-like: Remove from local bin directory
homeDir, err := os.UserHomeDir()
if err != nil {
warnError(fmt.Errorf("failed to get user home directory: %w", err))
return
}
rmCmd = exec.Command("rm", "-f", homeDir+"/.local/bin/istioctl")
// Remove istioctl binary from local bin directory
homeDir, err := os.UserHomeDir()
if err != nil {
warnError(fmt.Errorf("failed to get user home directory: %w", err))
return
}
rmCmd := exec.Command("rm", "-f", homeDir+"/.local/bin/istioctl")
if _, err := Run(rmCmd); err != nil {
warnError(fmt.Errorf("failed to remove istioctl binary: %w", err))
@ -123,21 +114,16 @@ func InstallIstioctl() error {
return fmt.Errorf("unsupported architecture: %s", archName)
}
// Map Go OS names to Istio release names and determine file extension
var fileExt string
// Map Go OS names to Istio release names
switch osName {
case "linux":
osName = "linux"
fileExt = "tar.gz"
case "darwin":
osName = "osx"
fileExt = "tar.gz"
case "windows":
osName = "win"
fileExt = "zip"
default:
return fmt.Errorf("unsupported operating system: %s", osName)
return fmt.Errorf("only Linux and macOS are supported, got: %s", osName)
}
fileExt := "tar.gz"
// Construct the download URL dynamically
fileName := fmt.Sprintf("istioctl-%s-%s-%s.%s", istioctlVersion, osName, archName, fileExt)
@ -145,47 +131,26 @@ func InstallIstioctl() error {
// Set the binary name based on OS
binaryName := "istioctl"
if osName == "win" {
binaryName = "istioctl.exe"
}
// Download the file using platform-appropriate method with fallbacks
// Download the file using curl with wget as fallback
downloadSuccess := false
// Try primary download method
var primaryCmd *exec.Cmd
var fallbackCmd *exec.Cmd
if osName == "win" {
// Windows: PowerShell first, curl as fallback
// Use proper PowerShell syntax with double quotes and escape handling
primaryCmd = exec.Command("powershell", "-ExecutionPolicy", "Bypass", "-Command",
fmt.Sprintf(`Invoke-WebRequest -Uri "%s" -OutFile "%s"`, url, fileName))
fallbackCmd = exec.Command("curl", "-L", url, "-o", fileName)
} else {
// Unix-like: curl first, wget as fallback
primaryCmd = exec.Command("curl", "-L", url, "-o", fileName)
fallbackCmd = exec.Command("wget", "-O", fileName, url)
}
// Try primary method
primaryCmd.Stdout, primaryCmd.Stderr = os.Stdout, os.Stderr
if err := primaryCmd.Run(); err == nil {
// Try curl first
curlCmd := exec.Command("curl", "-L", url, "-o", fileName)
curlCmd.Stdout, curlCmd.Stderr = os.Stdout, os.Stderr
if err := curlCmd.Run(); err == nil {
downloadSuccess = true
} else {
// Try fallback method
fallbackCmd.Stdout, fallbackCmd.Stderr = os.Stdout, os.Stderr
if err := fallbackCmd.Run(); err == nil {
// Try wget as fallback
wgetCmd := exec.Command("wget", "-O", fileName, url)
wgetCmd.Stdout, wgetCmd.Stderr = os.Stdout, os.Stderr
if err := wgetCmd.Run(); err == nil {
downloadSuccess = true
}
}
if !downloadSuccess {
if osName == "win" {
return fmt.Errorf("failed to download istioctl from %s using both PowerShell and curl", url)
} else {
return fmt.Errorf("failed to download istioctl from %s using both curl and wget", url)
}
return fmt.Errorf("failed to download istioctl from %s using both curl and wget", url)
}
// Extract based on file type
@ -226,51 +191,30 @@ func InstallIstioctl() error {
normalizedPath := strings.TrimPrefix(binaryPath, "./")
if normalizedPath != binaryName {
var cpCmd *exec.Cmd
if osName == "win" {
cpCmd = exec.Command("copy", binaryPath, binaryName)
} else {
cpCmd = exec.Command("cp", binaryPath, binaryName)
}
cpCmd = exec.Command("cp", binaryPath, binaryName)
if err := cpCmd.Run(); err != nil {
return fmt.Errorf("failed to copy istioctl binary: %w", err)
}
}
chmodCmd := exec.Command("chmod", "+x", binaryName)
if err := chmodCmd.Run(); err != nil {
return fmt.Errorf("failed to make istioctl executable: %w", err)
}
// Move to local bin directory
homeDir, err := os.UserHomeDir()
if err != nil {
return fmt.Errorf("failed to get user home directory: %w", err)
}
binDir := homeDir + "/.local/bin"
// Make executable (not needed on Windows)
if osName != "win" {
chmodCmd := exec.Command("chmod", "+x", binaryName)
if err := chmodCmd.Run(); err != nil {
return fmt.Errorf("failed to make istioctl executable: %w", err)
}
// Create the bin directory if it doesn't exist
mkdirCmd := exec.Command("mkdir", "-p", binDir)
if err := mkdirCmd.Run(); err != nil {
return fmt.Errorf("failed to create local bin directory: %w", err)
}
// Move to appropriate bin directory
// Use local bin directory to avoid sudo requirements
var binDir string
var moveCmd *exec.Cmd
if osName == "win" {
// Use a local bin directory on Windows
binDir = "C:\\istioctl"
mkdirCmd := exec.Command("mkdir", "-p", binDir)
mkdirCmd.Run() // Ignore errors if directory exists
moveCmd = exec.Command("move", binaryName, binDir+"\\istioctl.exe")
} else {
// Use local bin directory instead of /usr/local/bin to avoid sudo
homeDir, err := os.UserHomeDir()
if err != nil {
return fmt.Errorf("failed to get user home directory: %w", err)
}
binDir = homeDir + "/.local/bin"
// Create the bin directory if it doesn't exist
mkdirCmd := exec.Command("mkdir", "-p", binDir)
if err := mkdirCmd.Run(); err != nil {
return fmt.Errorf("failed to create local bin directory: %w", err)
}
moveCmd = exec.Command("mv", binaryName, binDir+"/istioctl")
}
moveCmd := exec.Command("mv", binaryName, binDir+"/istioctl")
moveCmd.Stdout, moveCmd.Stderr = os.Stdout, os.Stderr
if err := moveCmd.Run(); err != nil {
@ -278,17 +222,12 @@ func InstallIstioctl() error {
}
// Add to PATH notice
if osName != "win" {
fmt.Printf("istioctl installed to %s\n", binDir)
fmt.Printf("Make sure %s is in your PATH by adding this to your shell profile:\n", binDir)
fmt.Printf("export PATH=\"%s:$PATH\"\n", binDir)
}
fmt.Printf("istioctl installed to %s\n", binDir)
fmt.Printf("Make sure %s is in your PATH by adding this to your shell profile:\n", binDir)
fmt.Printf("export PATH=\"%s:$PATH\"\n", binDir)
// Clean up downloaded files
cleanupCmd := exec.Command("rm", "-f", fileName)
if osName == "win" {
cleanupCmd = exec.Command("del", "/f", fileName)
}
cleanupCmd.Run() // Ignore cleanup errors
return nil