bard 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.2
1
+ 0.6.3
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bard}
8
- s.version = "0.6.2"
8
+ s.version = "0.6.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Micah Geisel", "Nick Hogle"]
@@ -41,6 +41,7 @@ Gem::Specification.new do |s|
41
41
  "features/support/grit_ext.rb",
42
42
  "features/support/io.rb",
43
43
  "lib/bard.rb",
44
+ "lib/bard/check.rb",
44
45
  "lib/bard/git.rb",
45
46
  "lib/bard/io.rb",
46
47
  "spec/bard_spec.rb",
@@ -1,7 +1,7 @@
1
1
  Feature: Bard can check its environment for missing dependencies and potential problems
2
2
 
3
3
  Scenario: Bard check returns its version
4
- When I type "bard check"
4
+ When I type "bard check -v"
5
5
  Then I should see the current version of bard
6
6
  And I should see the current version of git
7
7
  And I should see the current version of rubygems
@@ -9,96 +9,96 @@ Feature: Bard can check its environment for missing dependencies and potential p
9
9
 
10
10
  Scenario: Bard check examines a local project for problems
11
11
  Given a shared rails project
12
- When I type "bard check ."
12
+ When I type "bard check"
13
13
  Then I should see "No problems"
14
14
 
15
15
  Scenario: Bard check detects missing database
16
16
  Given a shared rails project
17
17
  And the database is missing
18
- When I type "bard check ."
18
+ When I type "bard check"
19
19
  Then I should see the fatal error "missing database"
20
20
 
21
21
  Scenario: Bard check detects pending migrations
22
22
  Given a shared rails project
23
23
  And I have committed a set of changes that includes a new migration
24
- When I type "bard check ."
24
+ When I type "bard check"
25
25
  Then I should see the fatal error "pending migrations"
26
26
 
27
27
  Scenario: Bard check detects missing config/database.yml
28
28
  Given a shared rails project
29
29
  And "config/database.yml" is missing
30
- When I type "bard check ."
30
+ When I type "bard check"
31
31
  Then I should see the fatal error "missing config/database.yml"
32
32
 
33
33
  Scenario: Bard check detects missing submodules
34
34
  Given a shared rails project
35
35
  And a submodule
36
36
  And the submodule is missing
37
- When I type "bard check ."
37
+ When I type "bard check"
38
38
  Then I should see the fatal error "missing submodule"
39
39
 
40
40
  Scenario: Bard check detects submodules with detached heads
41
41
  Given a shared rails project
42
42
  And a submodule
43
43
  And the submodule has a detached head
44
- When I type "bard check ."
44
+ When I type "bard check"
45
45
  Then I should see the fatal error "submodule has a detached head"
46
46
 
47
47
  Scenario: Bard check detects missing gems
48
48
  Given a shared rails project
49
49
  And I have committed a set of changes that adds the test gem as a dependency
50
50
  And I dont have the test gem installed
51
- When I type "bard check ."
51
+ When I type "bard check"
52
52
  Then I should see the fatal error "missing gems"
53
53
 
54
54
  Scenario: Bard check detects master branch checked out
55
55
  Given a shared rails project
56
56
  And I am on the master branch
57
- When I type "bard check ."
57
+ When I type "bard check"
58
58
  Then I should see the fatal error "master branch"
59
59
 
60
60
  Scenario: Bard check detects missing integration branch
61
61
  Given a shared rails project
62
62
  And there is no integration branch
63
- When I type "bard check ."
63
+ When I type "bard check"
64
64
  Then I should see the fatal error "missing integration branch"
65
65
 
66
66
  Scenario: Bard check detects non-tracking integration branch
67
67
  Given a shared rails project
68
68
  And the integration branch isnt tracking origin/integration
69
- When I type "bard check ."
69
+ When I type "bard check"
70
70
  Then I should see the fatal error "tracking"
71
71
 
72
72
  Scenario: Bard check detects missing RAILS_ENV environment variable
73
73
  Given a shared rails project
74
74
  And my "RAILS_ENV" environment variable is ""
75
- When I type "bard check ."
75
+ When I type "bard check"
76
76
  Then I should see the warning "RAILS_ENV is not set"
77
77
 
78
78
  Scenario: Bard check detects missing staging hook
79
79
  Given a shared rails project
80
80
  And my "RAILS_ENV" environment variable is "staging"
81
81
  And there is no git hook on the staging server
82
- When I type "bard check ." on the staging server
82
+ When I type "bard check" on the staging server
83
83
  Then I should see the fatal error "missing git hook"
84
84
 
85
85
  Scenario: Bard check detects unexecutable staging hook
86
86
  Given a shared rails project
87
87
  And my "RAILS_ENV" environment variable is "staging"
88
88
  And the git hook on the staging server is not executable
89
- When I type "bard check ." on the staging server
89
+ When I type "bard check" on the staging server
90
90
  Then I should see the fatal error "unexecutable git hook"
91
91
 
92
92
  Scenario: Bard check detects improper staging hook
93
93
  Given a shared rails project
94
94
  And my "RAILS_ENV" environment variable is "staging"
95
95
  And the git hook on the staging server is bad
96
- When I type "bard check ." on the staging server
96
+ When I type "bard check" on the staging server
97
97
  Then I should see the fatal error "improper git hook"
98
98
 
99
99
  Scenario: Bard check detects missing receive.denyCurrentBranch git variable on staging
100
100
  Given a shared rails project
101
101
  And my "RAILS_ENV" environment variable is "staging"
102
102
  And the staging server git config for receive.denyCurrentBranch is not "ignore"
103
- When I type "bard check ." on the staging server
103
+ When I type "bard check" on the staging server
104
104
  Then I should see the fatal error "denyCurrentBranch"
@@ -8,46 +8,26 @@ require 'thor'
8
8
  require 'bard/git'
9
9
  require 'bard/io'
10
10
 
11
+ require 'bard/check'
12
+
11
13
  class Bard < Thor
12
14
  include BardGit
13
15
  include BardIO
14
16
 
15
- desc "check [PROJECT]", "check PROJECT or environment for missing dependencies"
16
- def check(project = nil)
17
- required = {
18
- 'bard' => Net::HTTP.get(URI.parse("http://gemcutter.org/gems/bard.json")).match(/"version":"([0-9.]+)"/)[1],
19
- 'git' => '1.6.4',
20
- 'rubygems' => '1.3.4',
21
- 'ruby' => '1.8.6'
22
- }
23
- actual = {
24
- 'bard' => File.read(File.expand_path(File.dirname(__FILE__) + "../../VERSION")).chomp,
25
- 'git' => `git --version`[/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/],
26
- 'rubygems' => Gem::VERSION,
27
- 'ruby' => RUBY_VERSION
28
- }
29
- help = {
30
- 'bard' => 'please type `gem install bard` to update',
31
- 'git' => 'please visit http://git-scm.com/download and install the appropriate package for your architecture',
32
- 'rubygems' => 'please type `gem update --system` to update',
33
- 'ruby' => 'um... ask micah?'
34
- }
35
-
36
- %w(bard git rubygems ruby).each do |pkg|
37
- if actual[pkg] < required[pkg]
38
- puts red("#{pkg.ljust(9)} (#{actual[pkg]}) ... NEED (#{required[pkg]})")
39
- puts red(" #{help[pkg]}")
40
- else
41
- puts green("#{pkg.ljust(9)} (#{actual[pkg]})")
42
- end
43
- end
17
+ VERSION = File.read(File.expand_path(File.dirname(__FILE__) + "../../VERSION")).chomp
18
+
19
+ method_options %w( verbose -v ) => :boolean
44
20
 
45
- check_project(project) if project
21
+ desc "check [PROJECT_PATH]", "check current project and environment for missing dependencies and common problems"
22
+ def check(project_path = nil)
23
+ project_path = "." if project_path.nil? and File.directory? ".git"
24
+ check_dependencies
25
+ check_project project_path if project_path
46
26
  end
47
27
 
48
28
  desc "pull", "pull changes to your local machine"
49
29
  def pull
50
- invoke :check
30
+ check_dependencies
51
31
 
52
32
  ensure_project_root!
53
33
  ensure_integration_branch!
@@ -82,7 +62,7 @@ class Bard < Thor
82
62
 
83
63
  desc "push", "push local changes out to the remote"
84
64
  def push
85
- invoke :check
65
+ check_dependencies
86
66
 
87
67
  ensure_project_root!
88
68
  ensure_integration_branch!
@@ -107,7 +87,6 @@ class Bard < Thor
107
87
 
108
88
  desc "deploy", "pushes, merges integration branch into master and deploys it to production"
109
89
  def deploy
110
- invoke :check
111
90
  invoke :push
112
91
 
113
92
  run_crucial "git fetch origin"
@@ -119,12 +98,13 @@ class Bard < Thor
119
98
 
120
99
  run_crucial "git merge integration"
121
100
  run_crucial "git push origin master"
101
+ run_crucial "git checkout integration"
122
102
  end
123
103
 
124
104
  if ENV['RAILS_ENV'] == "staging"
125
105
  desc "stage", "!!! INTERNAL USE ONLY !!! reset HEAD to integration, update submodules, run migrations, install gems, restart server"
126
106
  def stage
127
- invoke :check
107
+ check_dependencies
128
108
 
129
109
  if ENV['GIT_DIR'] == '.'
130
110
  # this means the script has been called as a hook, not manually.
@@ -140,12 +120,12 @@ class Bard < Thor
140
120
  head = File.read('.git/HEAD').chomp
141
121
  # abort if we're on a detached head
142
122
  exit unless head.sub! 'ref: ', ''
143
- if head == "master"
144
- run_crucial "cap deploy"
145
- else
146
- revs = gets.split ' '
147
- old_rev, new_rev = revs if head == revs.pop
123
+ revs = gets.split ' '
124
+ old_rev, new_rev, branch = revs
148
125
 
126
+ if branch == "master"
127
+ run_crucial "cap deploy"
128
+ elsif read == branch
149
129
  changed_files = run_crucial("git diff #{old_rev} #{new_rev} --diff-filter=ACMRD --name-only").split("\n")
150
130
 
151
131
  if changed_files.any? { |f| f =~ %r(^db/migrate/.+) }
@@ -167,49 +147,4 @@ class Bard < Thor
167
147
  end
168
148
  end
169
149
  end
170
-
171
- private
172
- def check_project(project)
173
- errors = []
174
- warnings = []
175
- Dir.chdir project do
176
- status, stdout, stderr = systemu "rake db:abort_if_pending_migrations"
177
- errors << "missing config/database.yml, adapt from config/database.sample.yml." if stderr.include? "config/database.yml"
178
- errors << "missing config/database.sample.yml, please complain to micah" if not File.exist? "config/database.sample.yml"
179
- errors << "missing database, please run `rake db:create db:migrate" if stderr.include? "Unknown database"
180
- errors << "pending migrations, please run `rake db:migrate`" if stdout.include? "pending migrations"
181
-
182
- errors << "missing submodule, please run git submodule update --init" if `git submodule status` =~ /^-/
183
- errors << "submodule has a detached head, please complain to micah" unless system 'git submodule foreach "git symbolic-ref HEAD"'
184
-
185
- errors << "missing gems, please run `rake gems:install`" if `rake gems` =~ /\[ \]/
186
-
187
- errors << "missing integration branch, please complain to micah" if `git branch` !~ /\bintegration\b/
188
- errors << "integration branch isnt tracking the remote integration branch, please run `grb track integration`" if `git config branch.integration.merge` !~ %r%\brefs/heads/integration\b%
189
- errors << "you shouldn't be working on the master branch, please work on the integration branch" if `cat .git/HEAD`.include? "refs/heads/master"
190
-
191
- if ENV['RAILS_ENV'] == "staging"
192
- if not File.exist? ".git/hooks/post-receive"
193
- errors << "missing git hook, please complain to micah"
194
- else
195
- errors << "unexecutable git hook, please complain to micah" unless File.executable? ".git/hooks/post-receive"
196
- errors << "improper git hook, please complain to micah" unless File.read(".git/hooks/post-receive").include? "bard stage $@"
197
- end
198
- errors << "the git config variable receive.denyCurrentBranch is not set to ignore, please complain to micah" if `git config receive.denyCurrentBranch`.chomp != "ignore"
199
- end
200
-
201
- warnings << "RAILS_ENV is not set, please complain to micah" if ENV['RAILS_ENV'].nil? or ENV['RAILS_ENV'].empty?
202
- end
203
-
204
- if not errors.empty?
205
- fatal "#{errors.length} problems detected:\n #{errors.join("\n ")}"
206
- elsif not warnings.empty?
207
- warn "#{warnings.length} potential problems detected:\n #{warnings.join("\n ")}"
208
- else
209
- puts green("No problems detected in project: #{project}")
210
- if ENV['RAILS_ENV'] != "staging"
211
- puts "please run it on the staging server by typing `cap shell` and then `bard check [PROJECT_NAME]`"
212
- end
213
- end
214
- end
215
150
  end
@@ -0,0 +1,76 @@
1
+ class Bard < Thor
2
+ private
3
+ def check_dependencies
4
+ required = {
5
+ 'bard' => Net::HTTP.get(URI.parse("http://gemcutter.org/gems/bard.json")).match(/"version":"([0-9.]+)"/)[1],
6
+ 'git' => '1.6.4',
7
+ 'rubygems' => '1.3.4',
8
+ 'ruby' => '1.8.6'
9
+ }
10
+ actual = {
11
+ 'bard' => Bard::VERSION,
12
+ 'git' => `git --version`[/[0-9.]+/],
13
+ 'rubygems' => Gem::VERSION,
14
+ 'ruby' => RUBY_VERSION
15
+ }
16
+ help = {
17
+ 'bard' => 'please type `gem install bard` to update',
18
+ 'git' => 'please visit http://git-scm.com/download and install the appropriate package for your architecture',
19
+ 'rubygems' => 'please type `gem update --system` to update',
20
+ 'ruby' => 'um... ask micah?'
21
+ }
22
+
23
+ %w(bard git rubygems ruby).each do |pkg|
24
+ if actual[pkg] < required[pkg]
25
+ puts red("#{pkg.ljust(9)} (#{actual[pkg]}) ... NEED (#{required[pkg]})")
26
+ puts red(" #{help[pkg]}")
27
+ elsif options.verbose?
28
+ puts green("#{pkg.ljust(9)} (#{actual[pkg]})")
29
+ end
30
+ end
31
+ end
32
+
33
+ def check_project(project)
34
+ errors = []
35
+ warnings = []
36
+ Dir.chdir project do
37
+ status, stdout, stderr = systemu "rake db:abort_if_pending_migrations"
38
+ errors << "missing config/database.yml, adapt from config/database.sample.yml." if stderr.include? "config/database.yml"
39
+ errors << "missing config/database.sample.yml, please complain to micah" if not File.exist? "config/database.sample.yml"
40
+ errors << "missing database, please run `rake db:create db:migrate" if stderr.include? "Unknown database"
41
+ errors << "pending migrations, please run `rake db:migrate`" if stdout.include? "pending migrations"
42
+
43
+ errors << "missing submodule, please run git submodule update --init" if `git submodule status` =~ /^-/
44
+ errors << "submodule has a detached head, please complain to micah" unless system 'git submodule foreach "git symbolic-ref HEAD"'
45
+
46
+ errors << "missing gems, please run `rake gems:install`" if `rake gems` =~ /\[ \]/
47
+
48
+ errors << "missing integration branch, please complain to micah" if `git branch` !~ /\bintegration\b/
49
+ errors << "integration branch isnt tracking the remote integration branch, please run `grb track integration`" if `git config branch.integration.merge` !~ %r%\brefs/heads/integration\b%
50
+ errors << "you shouldn't be working on the master branch, please work on the integration branch" if `cat .git/HEAD`.include? "refs/heads/master"
51
+
52
+ if ENV['RAILS_ENV'] == "staging"
53
+ if not File.exist? ".git/hooks/post-receive"
54
+ errors << "missing git hook, please complain to micah"
55
+ else
56
+ errors << "unexecutable git hook, please complain to micah" unless File.executable? ".git/hooks/post-receive"
57
+ errors << "improper git hook, please complain to micah" unless File.read(".git/hooks/post-receive").include? "bard stage $@"
58
+ end
59
+ errors << "the git config variable receive.denyCurrentBranch is not set to ignore, please complain to micah" if `git config receive.denyCurrentBranch`.chomp != "ignore"
60
+ end
61
+
62
+ warnings << "RAILS_ENV is not set, please complain to micah" if ENV['RAILS_ENV'].nil? or ENV['RAILS_ENV'].empty?
63
+ end
64
+
65
+ if not errors.empty?
66
+ fatal "#{errors.length} problems detected:\n #{errors.join("\n ")}"
67
+ elsif not warnings.empty?
68
+ warn "#{warnings.length} potential problems detected:\n #{warnings.join("\n ")}"
69
+ else
70
+ puts green("No problems detected in project: #{project}")
71
+ if ENV['RAILS_ENV'] != "staging"
72
+ puts "please run it on the staging server by typing `cap shell` and then `bard check [PROJECT_NAME]`"
73
+ end
74
+ end
75
+ end
76
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Geisel
@@ -135,6 +135,7 @@ files:
135
135
  - features/support/grit_ext.rb
136
136
  - features/support/io.rb
137
137
  - lib/bard.rb
138
+ - lib/bard/check.rb
138
139
  - lib/bard/git.rb
139
140
  - lib/bard/io.rb
140
141
  - spec/bard_spec.rb