private void ValidateSftpBtn_Click(object sender, RoutedEventArgs e) { string host = hostTxt.Text; string user = userTxt.Text; string pass = passTxt.Password.ToString(); string sftpPath = sftpPathTxt.Text; Sftp sftp = new Sftp(host, user, pass); sftp.Test(sftpPath); }
private void worker_DoWork(object sender, DoWorkEventArgs e) { Dictionary <string, string> inputData = (Dictionary <string, string>)e.Argument; // Validate version string version = inputData["version"]; Regex rVersion = new Regex(@"\d+\.\d+\.\d+\.\d+"); if (!rVersion.IsMatch(version)) { MiniLogger.LogQueue.Enqueue("Version string is invalid format. Should be x.x.x.x. Cancelling."); return; } worker.ReportProgress(1); // validate setup file string setupFile = inputData["setupFile"]; if (!File.Exists(setupFile)) { MiniLogger.LogQueue.Enqueue("Setup file does not exist. Cancelling."); return; } Properties.Settings.Default.SetupFilePath = setupFile; worker.ReportProgress(2); // validate release dir string releaseDir = inputData["releaseDir"]; if (!Directory.Exists(releaseDir) || !releaseDir.Contains("Release")) { MiniLogger.LogQueue.Enqueue("Release directory does not exist or does not contain \"Release\". Cancelling."); return; } Properties.Settings.Default.ReleaseDirPath = releaseDir; Properties.Settings.Default.Save(); worker.ReportProgress(3); // validate access token & store on change string accessToken = inputData["accessToken"]; if (accessToken == "") { MiniLogger.LogQueue.Enqueue("Invalid access token"); return; } else if (accessToken != Properties.Settings.Default.AccessToken) { Properties.Settings.Default.AccessToken = accessToken; Properties.Settings.Default.Save(); } worker.ReportProgress(5); // store ftp info on change string host = inputData["host"]; string user = inputData["user"]; string pass = inputData["pass"]; string sftpPath = inputData["sftpPath"]; // Update changes if (Properties.Settings.Default.SftpHost != host) { Properties.Settings.Default.SftpHost = host; } if (Properties.Settings.Default.SftpUser != user) { Properties.Settings.Default.SftpUser = user; } if (Properties.Settings.Default.SftpPass != pass) { Properties.Settings.Default.SftpPass = pass; } if (Properties.Settings.Default.SftpPath != sftpPath) { Properties.Settings.Default.SftpPath = sftpPath; } Properties.Settings.Default.Save(); worker.ReportProgress(7); // Validate SFTP Sftp sftp = new Sftp(host, user, pass); if (!sftp.Test(sftpPath)) { MiniLogger.LogQueue.Enqueue("Problem connecting to SFTP server."); return; } worker.ReportProgress(15); // Validate changelog if (inputData["changelog"] == "") { MiniLogger.LogQueue.Enqueue("Changelog is empty. Write some changes!"); return; } // Push to DB string json = ""; try { var values = new Dictionary <string, string> { { "version", version }, { "branch", inputData["branch"] }, { "changelog", inputData["changelog"] }, { "product_group", "1" }, { "access_token", accessToken } }; json = ApiCreateBuild(values).GetAwaiter().GetResult(); } catch (Exception ex) { MiniLogger.LogQueue.Enqueue("Error connecting to API: " + ex.Message); return; } worker.ReportProgress(25); // Get version ID int versionId = 0; try { dynamic apiResponse = JObject.Parse(json); if (apiResponse.errors.Count > 0) { throw new Exception("Error in output: " + apiResponse.errors[0]); } else { versionId = apiResponse.result.version_id.ToObject <int>(); } MiniLogger.LogQueue.Enqueue("Created new version in database. ID: " + versionId); } catch (Exception ex) { MiniLogger.LogQueue.Enqueue("Error deserializing json or parsing output to int: " + ex.Message); return; } worker.ReportProgress(30); // Upload setup file try { MiniLogger.LogQueue.Enqueue("Uploading setup file..."); sftp.UploadFile(sftpPath + "/setup/", versionId + ".msi", setupFile); MiniLogger.LogQueue.Enqueue("Setup file uploaded."); worker.ReportProgress(50); } catch (Exception ex) { MiniLogger.LogQueue.Enqueue("Failed to upload setup file" + ex.Message); } // Compress all dll/exe files in release dir string zFile = versionId + ".zip"; try { using (ZipArchive archive = ZipFile.Open(zFile, ZipArchiveMode.Create)) { foreach (string fPath in Directory.EnumerateFiles(releaseDir)) { string ext = System.IO.Path.GetExtension(fPath); if (ext == ".exe" || ext == ".dll") { archive.CreateEntryFromFile(fPath, System.IO.Path.GetFileName(fPath)); } } } MiniLogger.LogQueue.Enqueue("Created zip file for update files."); } catch (Exception ex) { MiniLogger.LogQueue.Enqueue("Error creating zip file: " + ex.Message); } worker.ReportProgress(60); // Upload Update zip try { MiniLogger.LogQueue.Enqueue("Uploading update file..."); sftp.UploadFile(sftpPath + "/update/", versionId + ".zip", zFile); MiniLogger.LogQueue.Enqueue("Setup update uploaded."); worker.ReportProgress(95); } catch (Exception ex) { MiniLogger.LogQueue.Enqueue("Failed to upload update zip file" + ex.Message); } // Report success MiniLogger.LogQueue.Enqueue("New build was successfully published"); worker.ReportProgress(100); }