Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
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);
        }
Beispiel #4
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);
        }
Beispiel #5
0
        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);
        }