public async Task PerformInstall(CliParams cliParams) { var latestBuild = await _githubApi.GetLatestBuildArtifact(cliParams); var latestBuildId = latestBuild?.id; if (cliParams.CreateNew == true) { var dispatchResult = await _githubApi.TriggerDispatch(cliParams); if (!dispatchResult) { ConsoleHelper.WriteError("GitHub API call to trigger build action failed. Do you have " + "Actions enabled on your forked Remotely repo on the Actions tab? If not, enable them and try again. " + "Otherwise, please check your input parameters."); return; } ConsoleHelper.WriteLine("Build action triggered successfully. Waiting for build completion."); while (latestBuild?.id == latestBuildId) { await Task.Delay(TimeSpan.FromMinutes(1)); ConsoleHelper.WriteLine("Waiting for GitHub build completion."); latestBuild = await _githubApi.GetLatestBuildArtifact(cliParams); } } else if (latestBuild is null) { ConsoleHelper.WriteError("There are no existing build artifacts, and --create-new was not specified. Exiting."); return; } var filePath = Path.Combine(Path.GetTempPath(), "Remotely_Artifact.zip"); var downloadResult = await _githubApi.DownloadArtifact(cliParams, latestBuild.archive_download_url, filePath); if (!downloadResult) { ConsoleHelper.WriteError("Downloading the build artifact was not successful."); return; } ConsoleHelper.WriteLine("Extracting artifact files."); if (Directory.Exists(cliParams.InstallDirectory)) { Directory.Delete(cliParams.InstallDirectory, true); } Directory.CreateDirectory(cliParams.InstallDirectory); ZipFile.ExtractToDirectory(filePath, cliParams.InstallDirectory); await LaunchExternalInstaller(cliParams); }
public async Task PerformInstall(CliParams cliParams) { var zipPath = Path.Combine(Path.GetTempPath(), "Remotely_Server.zip"); if (cliParams.UsePrebuiltPackage == true) { ConsoleHelper.WriteLine("Downloading pre-built server package."); int progress = 0; var releaseFile = cliParams.WebServer == WebServerType.IisWindows ? "https://github.com/lucent-sea/Remotely/releases/latest/download/Remotely_Server_Win-x64.zip" : "https://github.com/lucent-sea/Remotely/releases/latest/download/Remotely_Server_Linux-x64.zip"; using var webClient = new WebClient(); webClient.DownloadProgressChanged += (sender, args) => { var newProgress = args.ProgressPercentage / 5 * 5; if (newProgress != progress) { progress = newProgress; ConsoleHelper.WriteLine($"Progress: {progress}%"); } }; await webClient.DownloadFileTaskAsync(releaseFile, zipPath); } else { var latestBuild = await _githubApi.GetLatestBuildArtifact(cliParams); var latestBuildId = latestBuild?.id; if (cliParams.CreateNew == true) { var dispatchResult = await _githubApi.TriggerDispatch(cliParams); if (!dispatchResult) { ConsoleHelper.WriteError("GitHub API call to trigger build action failed. Do you have " + "Actions enabled on your forked Remotely repo on the Actions tab? If not, enable them and try again. " + "Otherwise, please check your input parameters."); return; } ConsoleHelper.WriteLine("Build action triggered successfully. Waiting for build completion."); while (latestBuild?.id == latestBuildId) { await Task.Delay(TimeSpan.FromMinutes(1)); ConsoleHelper.WriteLine("Waiting for GitHub build completion."); latestBuild = await _githubApi.GetLatestBuildArtifact(cliParams); } } else if (latestBuild is null) { ConsoleHelper.WriteError("There are no existing build artifacts, and --create-new was not specified. Exiting."); return; } var downloadResult = await _githubApi.DownloadArtifact(cliParams, latestBuild.archive_download_url, zipPath); if (!downloadResult) { ConsoleHelper.WriteError("Downloading the build artifact was not successful."); return; } } // Files in use can't be overwritten in Windows. Stop the // website process first. if (cliParams.WebServer == WebServerType.IisWindows) { var initialW3wpCount = Process.GetProcessesByName("w3wp").Length; Process.Start("powershell.exe", "-Command & \"{ Stop-WebAppPool -Name Remotely -ErrorAction SilentlyContinue }\"").WaitForExit(); Process.Start("powershell.exe", "-Command & \"{ Stop-Website -Name Remotely -ErrorAction SilentlyContinue }\"").WaitForExit(); ConsoleHelper.WriteLine("Waiting for w3wp processes to close..."); TaskHelper.DelayUntil(() => Process.GetProcessesByName("w3wp").Length < initialW3wpCount, TimeSpan.FromMinutes(5), 100); } ConsoleHelper.WriteLine("Extracting files."); Directory.CreateDirectory(cliParams.InstallDirectory); ZipFile.ExtractToDirectory(zipPath, cliParams.InstallDirectory, true); await LaunchExternalInstaller(cliParams); }
public async Task PerformInstall(CliParams cliParams) { var filePath = Path.Combine(Path.GetTempPath(), "Remotely_Server.zip"); if (cliParams.UsePrebuiltPackage == true) { ConsoleHelper.WriteLine("Downloading pre-built server package."); var progress = 0; var releaseFile = "https://github.com/lucent-sea/Remotely/releases/latest/download/Remotely_Server_Linux-x64.zip"; using var webClient = new WebClient(); webClient.DownloadProgressChanged += (sender, arg) => { var newProgress = arg.ProgressPercentage / 5 * 5; if (newProgress != progress) { progress = newProgress; ConsoleHelper.WriteLine($"Progress: {progress}%"); } }; await webClient.DownloadFileTaskAsync(releaseFile, filePath); } else { var latestBuild = await _githubApi.GetLatestBuildArtifact(cliParams); var latestBuildId = latestBuild?.id; if (cliParams.CreateNew == true) { var dispatchResult = await _githubApi.TriggerDispatch(cliParams); if (!dispatchResult) { ConsoleHelper.WriteError("GitHub API call to trigger build action failed. Do you have " + "Actions enabled on your forked Remotely repo on the Actions tab? If not, enable them and try again. " + "Otherwise, please check your input parameters."); return; } ConsoleHelper.WriteLine("Build action triggered successfully. Waiting for build completion."); while (latestBuild?.id == latestBuildId) { await Task.Delay(TimeSpan.FromMinutes(1)); ConsoleHelper.WriteLine("Waiting for GitHub build completion."); latestBuild = await _githubApi.GetLatestBuildArtifact(cliParams); } } else if (latestBuild is null) { ConsoleHelper.WriteError("There are no existing build artifacts, and --create-new was not specified. Exiting."); return; } var downloadResult = await _githubApi.DownloadArtifact(cliParams, latestBuild.archive_download_url, filePath); if (!downloadResult) { ConsoleHelper.WriteError("Downloading the build artifact was not successful."); return; } } ConsoleHelper.WriteLine("Extracting files."); if (Directory.Exists(cliParams.InstallDirectory)) { Directory.Delete(cliParams.InstallDirectory, true); } Directory.CreateDirectory(cliParams.InstallDirectory); ZipFile.ExtractToDirectory(filePath, cliParams.InstallDirectory); await LaunchExternalInstaller(cliParams); }