static async Task Main(string[] args) { try { var runner = new TestRunner(HelixTestRunnerOptions.Parse(args)); var keepGoing = runner.SetupEnvironment(); if (keepGoing) { keepGoing = await runner.InstallDotnetToolsAsync(); } if (keepGoing) { if (runner.Options.InstallPlaywright) { keepGoing = runner.InstallPlaywright(); } else { ProcessUtil.PrintMessage("Playwright install skipped."); } } runner.DisplayContents(); if (keepGoing) { if (!await runner.CheckTestDiscoveryAsync()) { ProcessUtil.PrintMessage("RunTest stopping due to test discovery failure."); Environment.Exit(1); return; } ProcessUtil.PrintMessage("Start running tests"); var exitCode = await runner.RunTestsAsync(); ProcessUtil.PrintMessage("Running tests complete"); ProcessUtil.PrintMessage("Uploading test results"); runner.UploadResults(); ProcessUtil.PrintMessage("Test results uploaded"); ProcessUtil.PrintMessage($"Completed Helix job with exit code '{exitCode}'"); Environment.Exit(exitCode); } ProcessUtil.PrintMessage("Tests were not run due to previous failures. Exit code=1"); Environment.Exit(1); } catch (Exception e) { ProcessUtil.PrintMessage($"HelixTestRunner uncaught exception: {e.ToString()}"); Environment.Exit(1); } }