/// <summary> /// Flow to create a new environment group /// </summary> /// <returns></returns> private static async Task CreateEnvironmentGroup() { Console.WriteLine("Creating new Environment Group"); //Get GroupName Console.WriteLine("Enter new group name:"); var groupName = Console.ReadLine(); EnvironmentGroup newGroup = new EnvironmentGroup(); newGroup.Name = groupName; //Get all projects var allProject = await _appVeyorService.GetAllAppVeyorProjects(); Console.WriteLine("Pick a Project:"); var menu = new TypedMenu<AppVeyorProject>(allProject, "Choose a number", x => x.Name); var pickedProject = menu.Display(); newGroup.Project = pickedProject; //Get all environments var allEnv = await _appVeyorService.GetAllAppVeyorEnvironmentsForProject(newGroup.Project.AccountName + "/" + newGroup.Project.Slug); AskForEnvironment(newGroup, allEnv); //Save group //Write JSON to file _groupFileService.SaveGroupToFile(newGroup); Console.WriteLine("Saved Environment Group {0} with {1} environments", newGroup.Name, newGroup.Environments.Count); }
/// <summary> /// Save a group.json file /// </summary> /// <param name="newGroup"></param> public void SaveGroupToFile(EnvironmentGroup newGroup) { string fileName = string.Format("{0}.group.json", newGroup.Name); using (FileStream fs = File.Open(fileName, FileMode.CreateNew)) using (StreamWriter sw = new StreamWriter(fs)) using (JsonWriter jw = new JsonTextWriter(sw)) { jw.Formatting = Formatting.Indented; JsonSerializer serializer = new JsonSerializer(); serializer.Serialize(jw, newGroup); } }
/// <summary> /// Ask for an environment to add to a group /// </summary> /// <param name="newGroup"></param> /// <param name="allEnv"></param> private static void AskForEnvironment(EnvironmentGroup newGroup, List<AppVeyorEnvironment> allEnv) { Console.WriteLine("Pick an Environment:"); var menu = new TypedMenu<AppVeyorEnvironment>(allEnv.Except(newGroup.Environments).ToList(), "Choose a number", x => x.Name); var picked = menu.Display(); newGroup.Environments.Add(picked); Console.WriteLine("Add another environment? (Y/N) (default Y)"); var answer = Console.ReadLine(); if (answer.Equals("N", StringComparison.InvariantCultureIgnoreCase)) return; else AskForEnvironment(newGroup, allEnv); }
/// <summary> /// Trigger deploys for the provided environment group /// </summary> /// <param name="picked"></param> /// <param name="buildVersion"></param> /// <returns></returns> private static async Task<Dictionary<int, string>> DeployEnvironmentGroup(EnvironmentGroup picked, string buildVersion) { Dictionary<int, string> deployments = new Dictionary<int, string>(); Console.WriteLine("-------------------"); Console.WriteLine("Starting Deployment"); Console.WriteLine("-------------------"); foreach (var env in picked.Environments) { try { Console.Write($"Starting deploy for {env.Name} build version {buildVersion}..."); var response = await _appVeyorService.DeployEnvironment(picked.Project, env, buildVersion); deployments.Add(response.DeploymentId, env.Name); Console.WriteLine("Success!"); } catch { Console.WriteLine("FAILED!"); } } Console.WriteLine(); Console.WriteLine("Deployments are started."); return deployments; }
/// <summary> /// Trigger deploys for the provided environment group /// </summary> /// <param name="picked"></param> /// <param name="buildVersion"></param> /// <returns></returns> private static async Task DeployEnvironmentGroup(EnvironmentGroup picked, string buildVersion) { foreach(var env in picked.Environments) { bool success = await _appVeyorService.DeployEnvironment(picked.Project, env, buildVersion); if (success) Console.WriteLine("Success, started deploy to: " + env.Name); else Console.WriteLine("FAILED to start deploy to: " + env.Name); } Console.WriteLine("Deployments are NOT finished yet."); Console.WriteLine("Check the progress of your deployements on ci.appveyor.com"); }