/// <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");

		}