From d99d1a34bb8f5f0a997a1a7a3f3e7e668617f2f7 Mon Sep 17 00:00:00 2001 From: priyankagadhiya Date: Fri, 20 Dec 2024 19:20:46 +0530 Subject: [PATCH 01/11] LOC-5824 Changes are still in progess, added check for os, added changes for binaryName selection --- .../BrowserStackLocal/BrowserStackTunnel.cs | 75 ++++++++++++++++++- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs index f454995..9b98e9d 100644 --- a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs +++ b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs @@ -7,6 +7,7 @@ using System.Security.AccessControl; using System.Security.Principal; using Newtonsoft.Json.Linq; +using System.Runtime.InteropServices; namespace BrowserStack { @@ -14,6 +15,7 @@ public enum LocalState { Idle, Connecting, Connected, Error, Disconnected }; public class BrowserStackTunnel : IDisposable { + // Need to get rid of this variable, instead use getBinaryName() static readonly string binaryName = isDarwin() ? "BrowserStackLocal-darwin-x64" : "BrowserStackLocal.exe"; static readonly string downloadURL = isDarwin() ? "https://www.browserstack.com/local-testing/downloads/binaries/BrowserStackLocal-darwin-x64" : @@ -39,8 +41,77 @@ public class BrowserStackTunnel : IDisposable static Boolean isDarwin() { - OperatingSystem os = Environment.OSVersion; - return os.Platform.ToString() == "Unix"; + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + return true; + } + } + + static Boolean isWindows() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + return true; + } + } + + static Boolean isLinux() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + return true; + } + } + + static Boolean isAlpine() + { + const string osReleaseFile = "/etc/os-release"; + + if (File.Exists(osReleaseFile)) + { + string[] lines = File.ReadAllLines(osReleaseFile); + foreach (string line in lines) + { + if (line.StartsWith("ID=")) + { + string id = line.Substring(3).Trim('"'); // Remove 'ID=' and quotes + if (id.Equals("alpine", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + } + } + } + static staring getBinaryName() + { + if isDarwin() + { + binaryName = "BrowserStackLocal-darwin-x64" + } + else if isWindows() + { + binaryName = "BrowserStackLocal.exe" + } + else if isLinux() + { + if (RuntimeInformation.OSArchitecture == Architecture.X64 + || RuntimeInformation.OSArchitecture == Architecture.Arm64) + { + if isAlpine() + { + binaryName = "BrowserStackLocal-alpine" + } + else + { + binaryName = "BrowserStackLocal-linux-x64" + } + } + else + { + binaryName = "BrowserStackLocal-linux-ia32" + } + } } public virtual void addBinaryPath(string binaryAbsolute) From 3ebbd23f27561e2a312aaceccdcc14d195bf1adb Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Mon, 23 Dec 2024 23:14:41 +0530 Subject: [PATCH 02/11] add: linux specific binary download --- .../BrowserStackLocal.csproj | 4 +- .../BrowserStackLocal/BrowserStackTunnel.cs | 72 +++++++++---------- BrowserStackLocal/BrowserStackLocal/Util.cs | 26 +++++++ 3 files changed, 63 insertions(+), 39 deletions(-) create mode 100644 BrowserStackLocal/BrowserStackLocal/Util.cs diff --git a/BrowserStackLocal/BrowserStackLocal/BrowserStackLocal.csproj b/BrowserStackLocal/BrowserStackLocal/BrowserStackLocal.csproj index 2fd4d10..db178a6 100644 --- a/BrowserStackLocal/BrowserStackLocal/BrowserStackLocal.csproj +++ b/BrowserStackLocal/BrowserStackLocal/BrowserStackLocal.csproj @@ -2,7 +2,7 @@ BrowserStack BrowserStackLocal - net20;netstandard2.0 + net48;netstandard2.0 false BrowserStackLocal BrowserStackLocal @@ -31,4 +31,4 @@ --> - \ No newline at end of file + diff --git a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs index 9b98e9d..f3cd6bc 100644 --- a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs +++ b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs @@ -15,12 +15,9 @@ public enum LocalState { Idle, Connecting, Connected, Error, Disconnected }; public class BrowserStackTunnel : IDisposable { - // Need to get rid of this variable, instead use getBinaryName() - static readonly string binaryName = isDarwin() ? "BrowserStackLocal-darwin-x64" : "BrowserStackLocal.exe"; - static readonly string downloadURL = isDarwin() ? - "https://www.browserstack.com/local-testing/downloads/binaries/BrowserStackLocal-darwin-x64" : - "https://www.browserstack.com/local-testing/downloads/binaries/BrowserStackLocal.exe"; - static readonly string homepath = isDarwin() ? + static string binaryName = GetBinaryName(); + static readonly string downloadURL = "https://www.browserstack.com/local-testing/downloads/binaries/" + binaryName; + static readonly string homepath = IsDarwin() || IsLinux() ? Environment.GetFolderPath(Environment.SpecialFolder.Personal) : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%"); public static readonly string[] basePaths = new string[] { @@ -39,79 +36,80 @@ public class BrowserStackTunnel : IDisposable Process process = null; - static Boolean isDarwin() + static bool IsDarwin() { if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { return true; } + return false; } + - static Boolean isWindows() + static bool IsWindows() { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { return true; } + return false; } - static Boolean isLinux() + static bool IsLinux() { - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { return true; } + return false; } - static Boolean isAlpine() + static bool IsAlpine() { - const string osReleaseFile = "/etc/os-release"; - - if (File.Exists(osReleaseFile)) + try { - string[] lines = File.ReadAllLines(osReleaseFile); - foreach (string line in lines) + string[] output = Util.RunShellCommand("grep -w 'NAME' /etc/os-release"); + if (string.IsNullOrEmpty(output[0]) && output[0].Contains("Alpine")) { - if (line.StartsWith("ID=")) - { - string id = line.Substring(3).Trim('"'); // Remove 'ID=' and quotes - if (id.Equals("alpine", StringComparison.OrdinalIgnoreCase)) - { - return true; - } - } + return true; } } + catch (System.Exception) + { + return false; + } + return false; } - static staring getBinaryName() + + static string GetBinaryName() { - if isDarwin() + if (IsDarwin()) { - binaryName = "BrowserStackLocal-darwin-x64" + return "BrowserStackLocal-darwin-x64"; } - else if isWindows() + else if (IsWindows()) { - binaryName = "BrowserStackLocal.exe" + return "BrowserStackLocal.exe"; } - else if isLinux() + else if (IsLinux()) { - if (RuntimeInformation.OSArchitecture == Architecture.X64 - || RuntimeInformation.OSArchitecture == Architecture.Arm64) + if (Environment.Is64BitOperatingSystem) { - if isAlpine() + if (IsAlpine()) { - binaryName = "BrowserStackLocal-alpine" + return "BrowserStackLocal-alpine"; } else { - binaryName = "BrowserStackLocal-linux-x64" + return "BrowserStackLocal-linux-x64"; } } else { - binaryName = "BrowserStackLocal-linux-ia32" + return "BrowserStackLocal-linux-ia32"; } } + return "BrowserStackLocal.exe"; } public virtual void addBinaryPath(string binaryAbsolute) @@ -150,7 +148,7 @@ public virtual void fallbackPaths() public void modifyBinaryPermission() { - if (isDarwin()) + if (IsDarwin() || IsLinux()) { try { diff --git a/BrowserStackLocal/BrowserStackLocal/Util.cs b/BrowserStackLocal/BrowserStackLocal/Util.cs new file mode 100644 index 0000000..cbd114a --- /dev/null +++ b/BrowserStackLocal/BrowserStackLocal/Util.cs @@ -0,0 +1,26 @@ +using System.Diagnostics; + +namespace BrowserStack +{ + public class Util { + + // Only Unix Support + public static string[] RunShellCommand(string command) { + ProcessStartInfo psi = new ProcessStartInfo("bash", $"-c \"{command}\"") { + RedirectStandardOutput = true, + RedirectStandardError = true, + UseShellExecute = false, + CreateNoWindow = true + }; + + Process process = new Process { StartInfo = psi }; + process.Start(); + string output = process.StandardOutput.ReadToEnd(); + string error = process.StandardError.ReadToEnd(); + process.WaitForExit(); + return new string[]{output, error}; + } + + } +} + From 2f5a3832ab615e698248d0b6a1bcdac84c492742 Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Tue, 24 Dec 2024 17:53:51 +0530 Subject: [PATCH 03/11] update: keep compatibility in mind --- .../BrowserStackLocal.csproj | 2 +- .../BrowserStackLocal/BrowserStackTunnel.cs | 33 ++++++------ BrowserStackLocal/BrowserStackLocal/Util.cs | 52 ++++++++++++++++++- 3 files changed, 68 insertions(+), 19 deletions(-) diff --git a/BrowserStackLocal/BrowserStackLocal/BrowserStackLocal.csproj b/BrowserStackLocal/BrowserStackLocal/BrowserStackLocal.csproj index db178a6..2e3a514 100644 --- a/BrowserStackLocal/BrowserStackLocal/BrowserStackLocal.csproj +++ b/BrowserStackLocal/BrowserStackLocal/BrowserStackLocal.csproj @@ -2,7 +2,7 @@ BrowserStack BrowserStackLocal - net48;netstandard2.0 + net20;netstandard2.0 false BrowserStackLocal BrowserStackLocal diff --git a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs index f3cd6bc..7b5d461 100644 --- a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs +++ b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs @@ -7,7 +7,6 @@ using System.Security.AccessControl; using System.Security.Principal; using Newtonsoft.Json.Linq; -using System.Runtime.InteropServices; namespace BrowserStack { @@ -15,9 +14,11 @@ public enum LocalState { Idle, Connecting, Connected, Error, Disconnected }; public class BrowserStackTunnel : IDisposable { - static string binaryName = GetBinaryName(); + static readonly string uname = Util.GetUName(); + static readonly string binaryName = GetBinaryName(); static readonly string downloadURL = "https://www.browserstack.com/local-testing/downloads/binaries/" + binaryName; - static readonly string homepath = IsDarwin() || IsLinux() ? + + static readonly string homepath = !IsWindows() ? Environment.GetFolderPath(Environment.SpecialFolder.Personal) : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%"); public static readonly string[] basePaths = new string[] { @@ -36,9 +37,9 @@ public class BrowserStackTunnel : IDisposable Process process = null; - static bool IsDarwin() + static bool IsDarwin(string osName) { - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + if(osName.Contains("darwin")) { return true; } @@ -48,16 +49,16 @@ static bool IsDarwin() static bool IsWindows() { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + if (Environment.OSVersion.VersionString?.ToLower().Contains("windows") ?? false) { return true; } return false; } - static bool IsLinux() + static bool IsLinux(string osName) { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + if(osName.Contains("linux")) { return true; } @@ -69,7 +70,7 @@ static bool IsAlpine() try { string[] output = Util.RunShellCommand("grep -w 'NAME' /etc/os-release"); - if (string.IsNullOrEmpty(output[0]) && output[0].Contains("Alpine")) + if (output[0]?.ToLower()?.Contains("alpine") ?? false) { return true; } @@ -83,17 +84,17 @@ static bool IsAlpine() static string GetBinaryName() { - if (IsDarwin()) + if (IsWindows()) { - return "BrowserStackLocal-darwin-x64"; + return "BrowserStackLocal.exe"; } - else if (IsWindows()) + else if (IsDarwin(uname)) { - return "BrowserStackLocal.exe"; + return "BrowserStackLocal-darwin-x64"; } - else if (IsLinux()) + else if (IsLinux(uname)) { - if (Environment.Is64BitOperatingSystem) + if (Util.Is64BitOS()) { if (IsAlpine()) { @@ -148,7 +149,7 @@ public virtual void fallbackPaths() public void modifyBinaryPermission() { - if (IsDarwin() || IsLinux()) + if (!IsWindows()) { try { diff --git a/BrowserStackLocal/BrowserStackLocal/Util.cs b/BrowserStackLocal/BrowserStackLocal/Util.cs index cbd114a..818b1c1 100644 --- a/BrowserStackLocal/BrowserStackLocal/Util.cs +++ b/BrowserStackLocal/BrowserStackLocal/Util.cs @@ -1,11 +1,21 @@ +using System; using System.Diagnostics; +using System.Runtime.InteropServices; namespace BrowserStack { public class Util { + [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool IsWow64Process( + [In] IntPtr hProcess, + [Out] out bool wow64Process + ); + // Only Unix Support - public static string[] RunShellCommand(string command) { + public static string[] RunShellCommand(string command) + { ProcessStartInfo psi = new ProcessStartInfo("bash", $"-c \"{command}\"") { RedirectStandardOutput = true, RedirectStandardError = true, @@ -20,7 +30,45 @@ public static string[] RunShellCommand(string command) { process.WaitForExit(); return new string[]{output, error}; } - + + public static string GetUName() + { + string osName = ""; + try + { + string[] output = RunShellCommand("uname"); + osName = output[0]?.ToLower(); + } + catch (System.Exception) {} + return osName; + } + + public static bool Is64BitOS() + { + bool is64BitProcess = IntPtr.Size == 8; + return is64BitProcess || InternalCheckIsWow64(); + } + + public static bool InternalCheckIsWow64() + { + if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) || + Environment.OSVersion.Version.Major >= 6) + { + using (Process p = Process.GetCurrentProcess()) + { + bool retVal; + if (!IsWow64Process(p.Handle, out retVal)) + { + return false; + } + return retVal; + } + } + else + { + return false; + } + } } } From faf40d120236002942666c0265eae9348e2c9590 Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Thu, 26 Dec 2024 09:40:59 +0530 Subject: [PATCH 04/11] update: use preprocessor derivative to use in-built method for 64bit --- BrowserStackLocal/BrowserStackLocal/Util.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/BrowserStackLocal/BrowserStackLocal/Util.cs b/BrowserStackLocal/BrowserStackLocal/Util.cs index 818b1c1..ac66dc6 100644 --- a/BrowserStackLocal/BrowserStackLocal/Util.cs +++ b/BrowserStackLocal/BrowserStackLocal/Util.cs @@ -6,6 +6,7 @@ namespace BrowserStack { public class Util { + // Ref: https://stackoverflow.com/a/336729 [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool IsWow64Process( @@ -45,6 +46,9 @@ public static string GetUName() public static bool Is64BitOS() { + #if NET48_OR_GREATER || NETSTANDARD2_0_OR_GREATER || NETCOREAPP3_0_OR_GREATER + return Environment.Is64BitOperatingSystem; + #endif bool is64BitProcess = IntPtr.Size == 8; return is64BitProcess || InternalCheckIsWow64(); } From 217090262e6520ca8e770b8b3e3f33e3102e02dd Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Fri, 27 Dec 2024 14:50:13 +0530 Subject: [PATCH 05/11] chore: refactoring --- .../BrowserStackLocal/BrowserStackTunnel.cs | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs index 7b5d461..cb23a43 100644 --- a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs +++ b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs @@ -39,30 +39,18 @@ public class BrowserStackTunnel : IDisposable static bool IsDarwin(string osName) { - if(osName.Contains("darwin")) - { - return true; - } - return false; + return osName.Contains("darwin"); } static bool IsWindows() { - if (Environment.OSVersion.VersionString?.ToLower().Contains("windows") ?? false) - { - return true; - } - return false; + return Environment.OSVersion.VersionString?.ToLower().Contains("windows") ?? false; } static bool IsLinux(string osName) { - if(osName.Contains("linux")) - { - return true; - } - return false; + return osName.Contains("linux"); } static bool IsAlpine() @@ -70,16 +58,12 @@ static bool IsAlpine() try { string[] output = Util.RunShellCommand("grep -w 'NAME' /etc/os-release"); - if (output[0]?.ToLower()?.Contains("alpine") ?? false) - { - return true; - } + return output[0]?.ToLower()?.Contains("alpine") ?? false; } catch (System.Exception) { return false; } - return false; } static string GetBinaryName() From 9f233813cd29186481e81ab6b25ca36fe35f1757 Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Fri, 27 Dec 2024 15:06:26 +0530 Subject: [PATCH 06/11] chore: refactoring --- .../BrowserStackLocal/BrowserStackTunnel.cs | 5 +-- BrowserStackLocal/BrowserStackLocal/Util.cs | 34 ++----------------- 2 files changed, 5 insertions(+), 34 deletions(-) diff --git a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs index cb23a43..fa1923f 100644 --- a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs +++ b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs @@ -60,10 +60,11 @@ static bool IsAlpine() string[] output = Util.RunShellCommand("grep -w 'NAME' /etc/os-release"); return output[0]?.ToLower()?.Contains("alpine") ?? false; } - catch (System.Exception) + catch (System.Exception ex) { - return false; + Console.WriteLine("Exception while check isAlpine " + ex); } + return false; } static string GetBinaryName() diff --git a/BrowserStackLocal/BrowserStackLocal/Util.cs b/BrowserStackLocal/BrowserStackLocal/Util.cs index ac66dc6..aefd684 100644 --- a/BrowserStackLocal/BrowserStackLocal/Util.cs +++ b/BrowserStackLocal/BrowserStackLocal/Util.cs @@ -1,19 +1,10 @@ using System; using System.Diagnostics; -using System.Runtime.InteropServices; namespace BrowserStack { public class Util { - // Ref: https://stackoverflow.com/a/336729 - [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern bool IsWow64Process( - [In] IntPtr hProcess, - [Out] out bool wow64Process - ); - // Only Unix Support public static string[] RunShellCommand(string command) { @@ -44,34 +35,13 @@ public static string GetUName() return osName; } + // Using for Linux Only public static bool Is64BitOS() { #if NET48_OR_GREATER || NETSTANDARD2_0_OR_GREATER || NETCOREAPP3_0_OR_GREATER return Environment.Is64BitOperatingSystem; #endif - bool is64BitProcess = IntPtr.Size == 8; - return is64BitProcess || InternalCheckIsWow64(); - } - - public static bool InternalCheckIsWow64() - { - if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) || - Environment.OSVersion.Version.Major >= 6) - { - using (Process p = Process.GetCurrentProcess()) - { - bool retVal; - if (!IsWow64Process(p.Handle, out retVal)) - { - return false; - } - return retVal; - } - } - else - { - return false; - } + return true; } } } From c3b7b7142e9d11c1f9034cf095735540887f7d17 Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Fri, 27 Dec 2024 15:09:33 +0530 Subject: [PATCH 07/11] chore: refactoring if-else --- .../BrowserStackLocal/BrowserStackTunnel.cs | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs index fa1923f..3b217d7 100644 --- a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs +++ b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs @@ -69,32 +69,18 @@ static bool IsAlpine() static string GetBinaryName() { - if (IsWindows()) - { - return "BrowserStackLocal.exe"; - } - else if (IsDarwin(uname)) - { - return "BrowserStackLocal-darwin-x64"; - } - else if (IsLinux(uname)) + if (IsWindows()) return "BrowserStackLocal.exe"; + if (IsDarwin(uname)) return "BrowserStackLocal-darwin-x64"; + + if (IsLinux(uname)) { - if (Util.Is64BitOS()) - { - if (IsAlpine()) + if (Util.Is64BitOS()) { - return "BrowserStackLocal-alpine"; + return IsAlpine() ? "BrowserStackLocal-alpine" : "BrowserStackLocal-linux-x64"; } - else - { - return "BrowserStackLocal-linux-x64"; - } - } - else - { return "BrowserStackLocal-linux-ia32"; - } } + return "BrowserStackLocal.exe"; } From 5bfd59401220d4132fe8f7482a0eb259e0f769c1 Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Fri, 27 Dec 2024 15:27:29 +0530 Subject: [PATCH 08/11] chore: added comment --- BrowserStackLocal/BrowserStackLocal/Util.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BrowserStackLocal/BrowserStackLocal/Util.cs b/BrowserStackLocal/BrowserStackLocal/Util.cs index aefd684..f3d5a1e 100644 --- a/BrowserStackLocal/BrowserStackLocal/Util.cs +++ b/BrowserStackLocal/BrowserStackLocal/Util.cs @@ -41,6 +41,8 @@ public static bool Is64BitOS() #if NET48_OR_GREATER || NETSTANDARD2_0_OR_GREATER || NETCOREAPP3_0_OR_GREATER return Environment.Is64BitOperatingSystem; #endif + // https://learn.microsoft.com/en-gb/dotnet/standard/choosing-core-framework-server?WT.mc_id=dotnet-35129-website + // linux won't be supported in .NET Framework and fallback to 64 bit return true; } } From b046baa30692ed79df535d1781546032719dd22b Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Fri, 3 Jan 2025 16:12:24 +0530 Subject: [PATCH 09/11] fix: runShellCommand --- BrowserStackLocal/BrowserStackLocal/Util.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BrowserStackLocal/BrowserStackLocal/Util.cs b/BrowserStackLocal/BrowserStackLocal/Util.cs index f3d5a1e..235d8ea 100644 --- a/BrowserStackLocal/BrowserStackLocal/Util.cs +++ b/BrowserStackLocal/BrowserStackLocal/Util.cs @@ -8,11 +8,12 @@ public class Util { // Only Unix Support public static string[] RunShellCommand(string command) { - ProcessStartInfo psi = new ProcessStartInfo("bash", $"-c \"{command}\"") { + ProcessStartInfo psi = new ProcessStartInfo { RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, - CreateNoWindow = true + CreateNoWindow = true, + FileName = command }; Process process = new Process { StartInfo = psi }; From 65b3299b39c39ebed69846579612ab7821821a5a Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Fri, 3 Jan 2025 16:39:59 +0530 Subject: [PATCH 10/11] fix: runShellCommand --- BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs | 2 +- BrowserStackLocal/BrowserStackLocal/Util.cs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs index 3b217d7..1d694be 100644 --- a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs +++ b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs @@ -57,7 +57,7 @@ static bool IsAlpine() { try { - string[] output = Util.RunShellCommand("grep -w 'NAME' /etc/os-release"); + string[] output = Util.RunShellCommand("grep", "-w 'NAME' /etc/os-release"); return output[0]?.ToLower()?.Contains("alpine") ?? false; } catch (System.Exception ex) diff --git a/BrowserStackLocal/BrowserStackLocal/Util.cs b/BrowserStackLocal/BrowserStackLocal/Util.cs index 235d8ea..56b2ddd 100644 --- a/BrowserStackLocal/BrowserStackLocal/Util.cs +++ b/BrowserStackLocal/BrowserStackLocal/Util.cs @@ -6,14 +6,15 @@ namespace BrowserStack public class Util { // Only Unix Support - public static string[] RunShellCommand(string command) + public static string[] RunShellCommand(string command, string args = "") { ProcessStartInfo psi = new ProcessStartInfo { RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true, - FileName = command + FileName = command, + Arguments = args }; Process process = new Process { StartInfo = psi }; From 06e496a815759c48aea161318ba6947beedaae90 Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Fri, 3 Jan 2025 17:03:02 +0530 Subject: [PATCH 11/11] fix: alpine shell command --- BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs index 1d694be..40ed6c1 100644 --- a/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs +++ b/BrowserStackLocal/BrowserStackLocal/BrowserStackTunnel.cs @@ -57,7 +57,7 @@ static bool IsAlpine() { try { - string[] output = Util.RunShellCommand("grep", "-w 'NAME' /etc/os-release"); + string[] output = Util.RunShellCommand("grep", "-w \'NAME\' /etc/os-release"); return output[0]?.ToLower()?.Contains("alpine") ?? false; } catch (System.Exception ex)