예제 #1
2
 private RunContext(ApplicationContext applicationContext, string action, ReleasesConfig releasesConfig, FeatureConfigCollection featuresConfig, TaskDefinitionConfigCollection taskDefinitionsConfig, TaskManager taskManager, ReleaseConfig activeRelease, EnvironmentConfig activeEnvironment, bool dryRun)
 {
     mApplicationContext = applicationContext;
     mAction = action;
     mReleasesConfig = releasesConfig;
     mFeaturesConfig = featuresConfig;
     mTaskDefinitionsConfig = taskDefinitionsConfig;
     mTaskManager = taskManager;
     mActiveRelease = activeRelease;
     mActiveEnvironment = activeEnvironment;
     mDryRun = dryRun;
 }
        public override void Run(ApplicationContext appContext, IEnumerable<string> args)
        {
            string release = null;
            string env = null;
            var dryRun = false;
            var resume = false;
            var noCache = appContext.UserConfig.Cache.Disabled;
            var noBeeps = false;

            var p = new OptionSet
            {
                { "r=|release=", "Select which release to use, instead of the default.", v => release = v },
                { "e=|env=|environment=", "Select which environment to use, instead of the default.", v => env = v },
                { "n|dry-run", "Don't actually run actions, just print what would be done and exit.", v => dryRun = v != null },
                { "s|resume", "Resume a failed deploy, if possible.", v => resume = v != null },
                { "C|no-cache", "Disable cache.", v => noCache = v != null },
                { "B|no-beeps", "Disable buzzer.", v => noBeeps = v != null }
            };

            var extra = Parse(p, args,
                CommandConstants.Deploy,
                "[OPTIONS]+");
            if (extra == null)
                return;

            var runContext = RunContext.Create(appContext, CommandConstants.Deploy, release, env, dryRun);
            RunCore(DeployContext.Create(runContext, resume, noCache, noBeeps));
        }
예제 #3
0
        public override void Run(ApplicationContext appContext, IEnumerable<string> args)
        {
            string release = null;
            string env = null;
            var dryRun = false;

            var p = new OptionSet
            {
                { "r=|release=", "Select which release to use, instead of the default.", v => release = v },
                { "e=|env=|environment=", "Select which environment to use, instead of the default.", v => env = v },
                { "n|dry-run", "Don't actually run actions, just print what would be done and exit.", v => dryRun = v != null }
            };

            var extra = Parse(p, args,
                CommandConstants.Run,
                "<ACTION> [OPTIONS]+");
            if (extra == null)
                return;

            if (extra.Count != 1)
                return;

            var runContext = RunContext.Create(appContext, extra[0], release, env, dryRun);
            RunCore(runContext);
        }
예제 #4
0
 private VariableReplacer(ApplicationContext context, FeatureConfig feature, TaskConfig task, Dictionary<string, string> replacements)
 {
     mContext = context;
     mFeature = feature;
     mTask = task;
     mReplacements = replacements;
 }
예제 #5
0
        public override void Run(ApplicationContext appContext, IEnumerable<string> args)
        {
            var p = new OptionSet();
            var extra = Parse(p, args,
                CommandConstants.Help,
                "[COMMAND]");

            if (extra == null || extra.Count == 0)
            {
                Console.WriteLine("Usage: dbbm <COMMAND> [OPTIONS]+");
                Console.WriteLine();
                Console.WriteLine("Available commands:");
                Console.WriteLine();

                var maxLen = mCommands.Max(x => x.Key.Length);
                foreach (var cmd in mCommands)
                {
                    Console.WriteLine("{0}{1} - {2}", new string(' ', maxLen - cmd.Key.Length + 2), cmd.Key, cmd.Value.Description);
                }
            }
            else
            {
                DbbmCommand cmd;
                if (!mCommands.TryGetValue(extra[0], out cmd))
                    throw new SoftFailureException(string.Format("Unknown command {0}", extra[0]));

                cmd.Run(appContext, new[] { extra[0], "--help" });
            }
        }
        public override void Run(ApplicationContext appContext, IEnumerable<string> args)
        {
            var dryRun = false;
            var p = new OptionSet
            {
                { "n|dry-run", "Don't actually run actions, just print what would be done and exit.", v => dryRun = v != null }
            };

            var extra = Parse(p, args,
                CommandConstants.GarbageCollect,
                "[OPTIONS]+");
            if (extra == null)
                return;

            RunCore(new GarbageCollectContext(appContext.UserConfig.Cache, dryRun, appContext.Log));
        }
예제 #7
0
        public Application()
        {
            mSubCommands = new Dictionary<string, DbbmCommand>
            {
                { CommandConstants.Deploy, new DbbmDeployCommand() },
                { CommandConstants.Run, new DbbmRunCommand() },
                { CommandConstants.GarbageCollect, new DbbmGarbageCollectCommand() }
            };
            mSubCommands.Add(CommandConstants.Help, new DbbmHelpCommand(mSubCommands));

            var projectRoot = DiscoverProjectRoot();
            var projectConfig = ProjectConfig.LoadFromJson(Path.Combine(projectRoot, FileConstants.ProjectFileName));
            var userConfig = UserConfig.LoadFromJson(Path.Combine(projectRoot, FileConstants.UserFileName));

            mApplicationContext = new ApplicationContext(projectRoot, projectConfig, userConfig, new ConsoleLog());
        }
예제 #8
0
        private static Dictionary<string, string> BuildInitialReplacements(ApplicationContext context, FeatureConfig feature, TaskConfig task)
        {
            var result = new Dictionary<string, string>();

            result["projectRoot"] = context.ProjectRoot;
            result["f:name"] = feature.Name;
            result["f:baseDirectory"] = feature.BaseDirectory;

            foreach (var kvp in context.UserConfig.EnvironmentVariables)
            {
                result[string.Format("e:{0}", kvp.Key)] = kvp.Value;
            }

            foreach (var kvp in task.Parameters)
            {
                result[kvp.Key] = kvp.Value;
            }

            return result;
        }
예제 #9
0
 public VariableReplacer(ApplicationContext context, FeatureConfig feature, TaskConfig task)
     : this(context, feature, task, BuildInitialReplacements(context, feature, task))
 {
 }
예제 #10
0
        public static RunContext Create(ApplicationContext applicationContext, string action, string release, string env, bool dryRun)
        {
            var releasesFile = Path.Combine(applicationContext.ProjectRoot, applicationContext.ProjectConfig.Releases);
            var releases = ReleasesConfig.LoadFromJson(releasesFile);

            var featuresFiles = FileUtils.ExpandGlob(Path.Combine(applicationContext.ProjectRoot, applicationContext.ProjectConfig.Features));
            var features = FeatureConfigCollection.LoadFromMultipleJsons(featuresFiles);

            var tasksFiles = FileUtils.ExpandGlob(Path.Combine(applicationContext.ProjectRoot, applicationContext.ProjectConfig.Tasks));
            var tasks = TaskDefinitionConfigCollection.LoadFromMultipleJsons(tasksFiles);

            if (string.IsNullOrWhiteSpace(release))
                release = applicationContext.UserConfig.ActiveRelease ?? releases.DefaultRelease;
            if (string.IsNullOrWhiteSpace(env))
                env = applicationContext.UserConfig.EnvironmentVariables.GetOrDefault(EnvironmentConstants.Environment, EnvironmentConstants.DefaultEnvironment);

            ReleaseConfig activeRelease;
            if (!releases.Releases.TryGet(release, out activeRelease))
                throw new SoftFailureException(string.Format("Cannot find Release '{0}'", release));

            EnvironmentConfig activeEnvironment;
            if (!applicationContext.ProjectConfig.Environments.TryGet(env, out activeEnvironment))
                throw new SoftFailureException(string.Format("Cannot find Environment '{0}'", env));

            var taskManager = new TaskManager(tasks);

            return new RunContext(applicationContext, action, releases, features, tasks, taskManager, activeRelease, activeEnvironment, dryRun);
        }
예제 #11
0
 public abstract void Run(ApplicationContext appContext, IEnumerable<string> args);