kibo 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,19 +10,33 @@ module Kibo::CommandLine
10
10
  def subcommand
11
11
  parse; @subcommand
12
12
  end
13
-
13
+
14
+ def environment
15
+ parse; @environment
16
+ end
17
+
14
18
  def args
15
19
  parse; @args
16
20
  end
17
21
 
18
22
  private
19
23
 
24
+ COMMANDS_WO_ENVIRONMENT = %w(generate log compress)
25
+
20
26
  def parse
21
27
  return if @options
22
28
 
23
- usage = Kibo::Commands.commands.map do |subcommand|
24
- next unless description = Kibo::Commands.descriptions[subcommand.to_s]
25
- " kibo [options] %-30s ... %s" % [ subcommand, description ]
29
+ commands, descriptions = Kibo::Commands.commands, Kibo::Commands.descriptions
30
+
31
+ commands = commands.map(&:to_s) & descriptions.keys
32
+ ll_commands, hl_commands = commands.partition { |a| COMMANDS_WO_ENVIRONMENT.include?(a) }
33
+
34
+ hl_usage = hl_commands.map do |subcommand|
35
+ " kibo [options] %-33s ... %s" % [ "#{subcommand} <environment>", descriptions[subcommand] ]
36
+ end.compact.join("\n")
37
+
38
+ ll_usage = ll_commands.map do |subcommand|
39
+ " kibo [options] %-33s ... %s" % [ subcommand, descriptions[subcommand] ]
26
40
  end.compact.join("\n")
27
41
 
28
42
  @options = Trollop::options do
@@ -32,13 +46,16 @@ kibo manages multiple application roles on single heroku dynos.
32
46
 
33
47
  Usage:
34
48
 
35
- #{usage}
49
+ #{hl_usage}
50
+
51
+ More commands:
52
+
53
+ #{ll_usage}
36
54
 
37
55
  where [options] are:
38
56
 
39
57
  EOS
40
58
 
41
- opt :environment, "Set environment", :short => 'e', :type => String, :default => "staging"
42
59
  opt :config, "Set Kibofile name", :short => 'c', :type => String, :default => "Kibofile"
43
60
 
44
61
  stop_on Kibo::Commands.commands
@@ -54,6 +71,15 @@ EOS
54
71
  end
55
72
  end
56
73
 
74
+ # Does this subcommand needs the environment setting?
75
+ # This includes all subcommands except generate and log
76
+ unless COMMANDS_WO_ENVIRONMENT.include?(@subcommands)
77
+ @environment = ARGV.shift || begin
78
+ W "You should supply the <environment> argument. Using default 'staging'"
79
+ "staging"
80
+ end
81
+ end
82
+
57
83
  # Is there a specific subcommand options configuration?
58
84
 
59
85
  if proc = Kibo::Commands.options[@subcommand]
@@ -3,22 +3,30 @@ module Kibo::Commands
3
3
 
4
4
  def deploy
5
5
  ENV["ENVIRONMENT"] = Kibo.environment
6
-
6
+
7
+ missing_instances = Kibo.config.instances - configured_instances
8
+ unless missing_instances.empty?
9
+ E "Use 'kibo setup #{Kibo.environment}' to set up these missing instances", *missing_instances
10
+ end
11
+
7
12
  #
8
13
  # Run source commands
9
14
  with_commands :source do
15
+ with_stashed_changes do
16
+ # create a deployment branch, if there is none yet.
17
+ in_branch "kibo.#{Kibo.environment}" do
18
+ git "merge", "master"
10
19
 
11
- # create a deployment branch, if there is none yet.
12
- in_branch "kibo.#{Kibo.environment}" do
13
- git "merge", "master"
14
-
15
- with_commands :arena do
16
- Kibo.config.instances.each do |instance|
17
- git "push", "--force", instance, "HEAD:master"
20
+ with_commands :arena do
21
+ Kibo.config.instances.each do |instance|
22
+ git "push", "--force", instance, "HEAD:master"
23
+ end
18
24
  end
19
25
  end
20
26
  end
21
27
  end
28
+ rescue FatalError
29
+ raise
22
30
  rescue StandardError
23
31
  W $!
24
32
  raise
@@ -51,13 +59,25 @@ module Kibo::Commands
51
59
  run.call("final") if run
52
60
  end
53
61
 
62
+ def dirty?
63
+ return false if git? "diff-index", "--quiet", "HEAD", :quiet
64
+
65
+ true
66
+ end
67
+
68
+ def with_stashed_changes(&block)
69
+ is_clean = git? "diff-index", "--quiet", "HEAD", :quiet
70
+ git "stash" unless is_clean
71
+ yield
72
+ ensure
73
+ git "stash", "pop" unless is_clean
74
+ end
75
+
54
76
  #
55
77
  # checkout the branch +name+, create it if necessary.
56
78
  def in_branch(name, &block)
57
79
  previous_branch = current_branch
58
80
 
59
- git "stash"
60
-
61
81
  if name != previous_branch
62
82
  git "branch", name unless branches.include?(name)
63
83
  git "checkout", name
@@ -72,8 +92,6 @@ module Kibo::Commands
72
92
  git "reset", "--hard"
73
93
  git "checkout", previous_branch
74
94
  end
75
-
76
- git "stash", "pop"
77
95
  end
78
96
 
79
97
  def current_branch
@@ -1,3 +1,5 @@
1
+ __END__
2
+
1
3
  module Kibo::Commands
2
4
  subcommand :generate, "generate an example Kibofile"
3
5
 
@@ -8,7 +8,7 @@ module Kibo::Commands
8
8
 
9
9
  extend Forwardable
10
10
 
11
- delegate [:git, :heroku, :sys, :sh] => Kibo::System
11
+ delegate [:git, :git?, :heroku, :sys] => Kibo::System
12
12
 
13
13
  # -- which remotes are defined, present and configured --------------
14
14
 
@@ -33,8 +33,8 @@ module Kibo::Commands
33
33
  end
34
34
 
35
35
  def configured_instances
36
- sys("git remote").split("\n").select { |line|
37
- line =~ /^#{Kibo.namespace}-/
36
+ sys("git remote", :quiet).split("\n").select { |line|
37
+ line =~ /^#{Kibo.namespace}-#{Kibo.environment}/
38
38
  }
39
39
  end
40
40
  end
@@ -7,13 +7,15 @@ module Kibo::Commands
7
7
  subcommand :setup, "Setup and configure application instances" do
8
8
  opt :force, "Reconfigure existing instances, too.", :short => "f"
9
9
  end
10
+
11
+ subcommand :reconfigure, "Reconfigure application instances"
10
12
 
11
13
  def setup
12
14
  verify_heroku_login
13
15
 
14
16
  # create all apps on heroku or make sure that they
15
17
  # exist as remotes in the local git configuration.
16
- instances.each do |instance|
18
+ Kibo.config.instances.each do |instance|
17
19
  next unless create_instance(instance) || Kibo::CommandLine.force?
18
20
 
19
21
  # The following only when forced (--force) to do so or when
@@ -24,6 +26,15 @@ module Kibo::Commands
24
26
  end
25
27
  end
26
28
 
29
+ def reconfigure
30
+ # create all apps on heroku or make sure that they
31
+ # exist as remotes in the local git configuration.
32
+ Kibo.config.instances.each do |instance|
33
+ # provide_instance instance
34
+ configure_instance instance
35
+ end
36
+ end
37
+
27
38
  def create_instance(instance)
28
39
  return false if sys("git remote | grep #{instance}", :quiet)
29
40
 
@@ -51,7 +62,7 @@ module Kibo::Commands
51
62
  end
52
63
 
53
64
  def configure_instance(instance)
54
- heroku "config:set", "INSTANCE=#{instance}"
65
+ heroku "config:set", "INSTANCE=#{instance.instance_name}", "--app", instance
55
66
  end
56
67
 
57
68
  def verify_heroku_login
data/lib/kibo/config.rb CHANGED
@@ -88,6 +88,10 @@ class Kibo::Instance < String
88
88
  []
89
89
  end
90
90
 
91
+ def instance_name
92
+ self.split("-", 2).last
93
+ end
94
+
91
95
  class Freemium < self
92
96
  def initialize(config, role, number)
93
97
  super config, role, 1
data/lib/kibo/heroku.rb CHANGED
@@ -81,7 +81,7 @@ module Kibo::Heroku
81
81
 
82
82
  # returns names of all apps for the current user on heroku
83
83
  def apps
84
- @apps ||= Kibo::System.heroku("apps").
84
+ @apps ||= Kibo::System.heroku("apps", :quiet).
85
85
  split(/\n/).
86
86
  reject { |line| line.empty? || line =~ /=== / }.
87
87
  map { |line| line.split(" ").first }
data/lib/kibo/system.rb CHANGED
@@ -9,6 +9,10 @@ module Kibo::System
9
9
  sys! "git", *args
10
10
  end
11
11
 
12
+ def git?(*args)
13
+ sys "git", *args
14
+ end
15
+
12
16
  def sys(*args)
13
17
  quiet = args.pop if args.last == :quiet
14
18
 
data/lib/kibo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kibo
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
data/man/kibo.1 CHANGED
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "KIBO" "1" "October 2012" "Kibo 0.4.0" "Kibo Manual"
4
+ .TH "KIBO" "1" "October 2012" "Kibo 0.4.1" "Kibo Manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBkibo\fR \- manage heroku applications
data/man/kibo.1.html CHANGED
@@ -172,7 +172,7 @@ kibo -e production spindown
172
172
 
173
173
 
174
174
  <ol class='man-decor man-foot man foot'>
175
- <li class='tl'>Kibo 0.4.0</li>
175
+ <li class='tl'>Kibo 0.4.1</li>
176
176
  <li class='tc'>October 2012</li>
177
177
  <li class='tr'>kibo(1)</li>
178
178
  </ol>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kibo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-09 00:00:00.000000000 Z
12
+ date: 2012-10-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: trollop
@@ -180,7 +180,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
180
180
  version: '0'
181
181
  segments:
182
182
  - 0
183
- hash: -3844677239198829294
183
+ hash: -2440088423911513347
184
184
  required_rubygems_version: !ruby/object:Gem::Requirement
185
185
  none: false
186
186
  requirements: