Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }