static int Main(string[] args) { try { ParsedOpts parsedArgs = Options.ParseArguments(args); if (parsedArgs.Error != null) { Console.Error.WriteLine(parsedArgs.Error); Console.Error.WriteLine(Options.GetHelp(parsedArgs.Verb)); return(1); } if (parsedArgs["help"].Flag) { Console.WriteLine(Options.GetHelp(parsedArgs.Verb)); return(0); } return(parsedArgs.Verb.Handler(parsedArgs)); } catch (Exception e) { Console.WriteLine(e); return(99); } }
static int DoEncrypt(ParsedOpts args) { string value = EncryptValue(args["value"].Value); string name = args["name"].Value; string env = args["env"].Value; if (!String.IsNullOrEmpty(name) || !String.IsNullOrEmpty(env)) { if (String.IsNullOrEmpty(name) || String.IsNullOrEmpty(env)) { Console.Error.WriteLine( "Must specify both of 'name' and 'env'." ); return(-1); } var secretList = JsonConvert.DeserializeObject <JArray>( File.ReadAllText(Configuration.SecretsJson) ); bool found = false; foreach (JObject secret in secretList) { string secretEnvironment = secret.Value <string>("env"); string secretName = secret.Value <string>("name"); if (secretEnvironment == env && secretName == name) { secret["value"] = JValue.CreateString(value); found = true; break; } } if (!found) { secretList.Add( new JObject( new JProperty("name", name), new JProperty("env", env), new JProperty("ord", secretList.Count), new JProperty("value", value) ) ); } File.WriteAllText( Configuration.SecretsJson, JsonConvert.SerializeObject(secretList, Formatting.Indented) ); } else { Console.WriteLine("{0}", value); } return(0); }
static int DoDecrypt(ParsedOpts args) { string value = args["value"].Value; if (String.IsNullOrEmpty(value)) { string name = args["name"].Value; string env = args["env"].Value; if (String.IsNullOrEmpty(name) || String.IsNullOrEmpty(env)) { Console.Error.WriteLine( "Must specify either 'value' or 'name' and 'env'." ); return(-1); } var secretList = JsonConvert.DeserializeObject <JArray>( File.ReadAllText(Configuration.SecretsJson) ); foreach (JObject secret in secretList) { string secretEnvironment = secret.Value <string>("env"); string secretName = secret.Value <string>("name"); if (secretEnvironment == env && secretName == name) { value = secret.Value <string>("value"); break; } } if (String.IsNullOrEmpty(value)) { Console.Error.WriteLine( "Setting '{0}' in environment '{1}' not found.", name, env ); return(-2); } } Console.WriteLine("{0}", DecryptValue(value)); return(0); }
static int DoDeploy(ParsedOpts args) { const string environment = "qa"; DateTime startTime = DateTime.Now; BuildVersion version = GetLastVersion(); string deployedCommit = GetDeployedCommit(environment); if (deployedCommit != version.Commit) { List <Revision> log = GetMasterLog(); List <Revision> changes = GetDelta( log, log[0].Commit, deployedCommit ); if (changes != null && changes.Count > 0) { Console.WriteLine("Commits to be deployed:"); PrintChangeLog(changes); } } else if (!args["force"].Flag) { Console.WriteLine( "Latest release is for this build, nothing to do." ); return(0); } if (!Confirm()) { Console.WriteLine("Aborting."); return(3); } Console.WriteLine( "Deploying {0} to {1} @ {2}", version, environment, startTime ); string[] oldStackIds = GetOldReleaseStacks(environment); if (oldStackIds.Length > 0) { Console.WriteLine("Existing stacks are:"); for (int i = 0; i < oldStackIds.Length; i++) { Console.WriteLine(" {0}", oldStackIds[i]); } } string stackId = CreateStack(new ReleaseStack(version, environment)); bool succeeded = WaitForStackCreated(stackId) && WaitForStackHealthy(stackId); if (succeeded) { Console.WriteLine("CREATE SUCCESS"); Console.WriteLine("Cleaning up old stacks..."); for (int i = 0; i < oldStackIds.Length; i++) { DeleteStack(oldStackIds[i]); } Console.WriteLine("DEPLOY SUCCESS"); } else { Console.WriteLine("FAILED -- Cleaning Up"); DeleteStack(stackId); } return(succeeded ? 0 : 1); }
static int DoBuild(ParsedOpts args) { DateTime startTime = DateTime.Now; List <Revision> log = GetMasterLog(); string commit = args["commit"].Value ?? log[0].Commit; Console.WriteLine( "Building and uploading for commit {0}...", commit ); BuildVersion lastVersion = GetLastVersion(); List <Revision> changes = GetDelta(log, commit, lastVersion.Commit); if (changes == null) { Console.WriteLine( "Cannot find commit {0} in the log; aborting!", commit ); return(2); } if (changes.Count > 0) { Console.WriteLine("Commits since the last build:"); PrintChangeLog(changes); } else if (!args["force"].Flag) { Console.WriteLine( "Latest build is for this commit, nothing to do." ); return(0); } if (!Confirm()) { Console.WriteLine("Aborting."); return(3); } DateTime now = DateTime.UtcNow; string buildDate = String.Format( "{0:D4}{1:D2}{2:D2}", now.Year, now.Month, now.Day ); string buildTime = String.Format( "{0:D2}{1:D2}{2:D2}Z", now.Hour, now.Minute, now.Second ); var version = new BuildVersion { BuildDate = buildDate, BuildTime = buildTime, Commit = commit }; Console.WriteLine("Building {0}", version); string stackId = CreateStack(new BuildStack(version)); bool succeeded = WaitForStackCreated(stackId); DeleteStack(stackId); Console.WriteLine("BUILD {0}", succeeded ? "SUCCESS" : "FAILED"); return(succeeded ? 0 : 1); }