geordi 1.2.3 → 1.3.0
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.
- checksums.yaml +8 -8
- data/.gitignore +1 -2
- data/Gemfile +7 -0
- data/Gemfile.lock +61 -0
- data/README.md +65 -25
- data/Rakefile +8 -0
- data/bin/cap-all +0 -0
- data/bin/console-for +0 -0
- data/bin/cuc +0 -0
- data/bin/cuc-show +0 -0
- data/bin/cuc-vnc-setup +1 -1
- data/bin/deploy-to-production +0 -0
- data/bin/dump-for +0 -0
- data/bin/gitpt +0 -0
- data/bin/load-dump +0 -0
- data/bin/migrate-all +0 -0
- data/bin/rs +0 -0
- data/bin/run_tests +1 -1
- data/bin/shell-for +0 -0
- data/bin/tests +0 -0
- data/features/console.feature +6 -0
- data/features/cucumber.feature +129 -0
- data/features/dump.feature +31 -0
- data/features/firefox.feature +53 -0
- data/features/shell.feature +30 -0
- data/features/support/env.rb +5 -0
- data/geordi.gemspec +1 -2
- data/lib/geordi/capistrano_config.rb +23 -26
- data/lib/geordi/commands/capistrano.rb +1 -4
- data/lib/geordi/commands/cucumber.rb +19 -6
- data/lib/geordi/commands/deploy.rb +9 -14
- data/lib/geordi/commands/firefox.rb +9 -6
- data/lib/geordi/commands/png_optimize.rb +2 -3
- data/lib/geordi/commands/shell.rb +2 -3
- data/lib/geordi/cucumber.rb +29 -28
- data/lib/geordi/firefox_for_selenium.rb +21 -60
- data/lib/geordi/interaction.rb +0 -1
- data/lib/geordi/remote.rb +9 -5
- data/lib/geordi/util.rb +6 -2
- data/lib/geordi/version.rb +1 -1
- metadata +10 -5
- data/lib/geordi/capistrano.rb +0 -118
- data/lib/geordi/run_tests.rb +0 -17
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZTg1YjZmMGRjNzQ1YTY4ZTJmNzE2ZmE4Yzc4YjQzOGU3YThlNTY0ZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YTVjMTg5NTA0YmU2NDQzZGU5ZWY1Yjc1NjNmODkyMmVhOGYwNGFiMA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YWI3YjAzMDE3ZWVmMmFjNGU3ZWM0NTI1MjljZWRiNzE0N2QwYTU1MTlkMjBh
|
10
|
+
ZWEzMzFiMGEyODY1OWNlMmE3ZTBjMTc0MTMwZDU0MDJiYmU2M2IyNWY1NDNk
|
11
|
+
ODMyZGJkYjdhNTNjM2NhMDEwZjVmYjYxYjBkNzhlZmRjZjg5MzM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ODhkNTY5ZmNhOTdkMmM3OWRlNzEzMGJkZjBlYWRhMTQxNjMzZGIyNDIzZmVi
|
14
|
+
ZjU0MTFmNDBjYmU4MjYyMzIwMzNhZmFjMTZhYTY3ZGRiYjJkOWE5MjZkMzgz
|
15
|
+
YmQ0MjgwMGFkMjg3MjdiMjIwNWYxOGVhMjc2N2UzZjdiMzU5YzA=
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
geordi (1.3.0)
|
5
|
+
thor (>= 0.18.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
aruba (0.13.0)
|
11
|
+
childprocess (~> 0.5.6)
|
12
|
+
contracts (~> 0.9)
|
13
|
+
cucumber (>= 1.3.19)
|
14
|
+
ffi (~> 1.9.10)
|
15
|
+
rspec-expectations (>= 2.99)
|
16
|
+
thor (~> 0.19)
|
17
|
+
builder (3.2.2)
|
18
|
+
childprocess (0.5.9)
|
19
|
+
ffi (~> 1.0, >= 1.0.11)
|
20
|
+
coderay (1.1.0)
|
21
|
+
contracts (0.13.0)
|
22
|
+
cucumber (2.3.2)
|
23
|
+
builder (>= 2.1.2)
|
24
|
+
cucumber-core (~> 1.4.0)
|
25
|
+
cucumber-wire (~> 0.0.1)
|
26
|
+
diff-lcs (>= 1.1.3)
|
27
|
+
gherkin (~> 3.2.0)
|
28
|
+
multi_json (>= 1.7.5, < 2.0)
|
29
|
+
multi_test (>= 0.1.2)
|
30
|
+
cucumber-core (1.4.0)
|
31
|
+
gherkin (~> 3.2.0)
|
32
|
+
cucumber-wire (0.0.1)
|
33
|
+
diff-lcs (1.2.5)
|
34
|
+
ffi (1.9.10)
|
35
|
+
gherkin (3.2.0)
|
36
|
+
highline (1.7.8)
|
37
|
+
method_source (0.8.2)
|
38
|
+
multi_json (1.11.2)
|
39
|
+
multi_test (0.1.2)
|
40
|
+
pry (0.10.3)
|
41
|
+
coderay (~> 1.1.0)
|
42
|
+
method_source (~> 0.8.1)
|
43
|
+
slop (~> 3.4)
|
44
|
+
rspec-expectations (3.4.0)
|
45
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
+
rspec-support (~> 3.4.0)
|
47
|
+
rspec-support (3.4.1)
|
48
|
+
slop (3.6.0)
|
49
|
+
thor (0.19.1)
|
50
|
+
|
51
|
+
PLATFORMS
|
52
|
+
ruby
|
53
|
+
|
54
|
+
DEPENDENCIES
|
55
|
+
aruba
|
56
|
+
geordi!
|
57
|
+
highline
|
58
|
+
pry
|
59
|
+
|
60
|
+
BUNDLED WITH
|
61
|
+
1.10.6
|
data/README.md
CHANGED
@@ -32,9 +32,9 @@ Run a capistrano command on all deploy targets.
|
|
32
32
|
Example: `geordi capistrano deploy`
|
33
33
|
|
34
34
|
|
35
|
-
### geordi
|
35
|
+
### geordi clean
|
36
36
|
|
37
|
-
Remove unneeded files.
|
37
|
+
Remove unneeded files from the current directory.
|
38
38
|
|
39
39
|
|
40
40
|
### geordi commit
|
@@ -57,13 +57,44 @@ Run Cucumber features.
|
|
57
57
|
|
58
58
|
Example: `geordi cucumber features/authentication_feature:3`
|
59
59
|
|
60
|
-
Runs Cucumber as you want: with `bundle exec`,
|
61
|
-
|
60
|
+
Runs Cucumber as you want: with `bundle exec`, using parallel tests, with
|
61
|
+
a VNC session holding Selenium test browsers, support for using a dedicated
|
62
|
+
testing firefox and beta support for rerunning failed scenarios.
|
62
63
|
|
64
|
+
- *@solo:* Generally, features are run in parallel. However, scenarios tagged
|
65
|
+
with @solo are excluded and will be run sequentially, _after_ the parallel run.
|
63
66
|
|
64
|
-
|
67
|
+
- *Debugging:* Sometimes, the dot-printing Cucumber formatter does not show
|
68
|
+
errors. In case a feature fails without a message, try running it with `--debug`
|
69
|
+
or `-d`.
|
65
70
|
|
66
|
-
|
71
|
+
- *Options:* Any unknown option will be passed through to Cucumber,
|
72
|
+
e.g. `--format pretty`.
|
73
|
+
|
74
|
+
|
75
|
+
### geordi deploy [STAGE]
|
76
|
+
|
77
|
+
Guided deployment across branches.
|
78
|
+
|
79
|
+
Example: `geordi deploy production`
|
80
|
+
|
81
|
+
Merge, push and deploy with a single command! There are several scenarios where
|
82
|
+
this command comes in handy:
|
83
|
+
|
84
|
+
1) *Production deploy:* From the master branch, run `geordi deploy production`.
|
85
|
+
This will merge `master` to `production`, push and deploy to production.
|
86
|
+
|
87
|
+
2) *Feature branch deploy:* From the feature branch, run `geordi deploy staging`.
|
88
|
+
This will merge the feature branch to `master`, push and deploy to staging.
|
89
|
+
|
90
|
+
3) *Simple deploy:* If the source branch matches the target branch, merging will
|
91
|
+
be skipped.
|
92
|
+
|
93
|
+
Calling the command without arguments will infer the target stage from the
|
94
|
+
current branch and fall back to master/staging.
|
95
|
+
|
96
|
+
When your project does not have a `deploy:migrations` task, this command will
|
97
|
+
run `cap deploy` instead when called with `-M`: `geordi deploy -M staging`.
|
67
98
|
|
68
99
|
|
69
100
|
### geordi devserver
|
@@ -100,6 +131,20 @@ dump into the development database after downloading it.
|
|
100
131
|
Open the current Eurest cantina menu.
|
101
132
|
|
102
133
|
|
134
|
+
### geordi firefox COMMAND
|
135
|
+
|
136
|
+
Run a command with VNC set up (and the test firefox, if present).
|
137
|
+
|
138
|
+
Example: `geordi firefox b cucumber` or `geordi firefox --setup 24.0`
|
139
|
+
|
140
|
+
Useful when you need Firefox for Selenium or the VNC set up, but can't use the
|
141
|
+
`geordi cucumber` command.
|
142
|
+
|
143
|
+
*Install* a special Firefox by calling with `--setup <version>`.
|
144
|
+
|
145
|
+
This command is aliased `chrome` for users running Selenium in Chrome.
|
146
|
+
|
147
|
+
|
103
148
|
### geordi help [COMMAND]
|
104
149
|
|
105
150
|
Describe available commands or one specific command.
|
@@ -116,7 +161,7 @@ environment and `rake parallel:prepare` afterwards. Otherwise, invokes `geordi r
|
|
116
161
|
with `db:migrate`.
|
117
162
|
|
118
163
|
|
119
|
-
### geordi png-optimize
|
164
|
+
### geordi png-optimize PATH
|
120
165
|
|
121
166
|
Optimize .png files.
|
122
167
|
|
@@ -199,16 +244,6 @@ After setting up, runs all tests when called with the `--test` option:
|
|
199
244
|
See `geordi help setup` for details.
|
200
245
|
|
201
246
|
|
202
|
-
### geordi setup-firefox-for-selenium VERSION
|
203
|
-
|
204
|
-
Install a special firefox for running Selenium tests.
|
205
|
-
|
206
|
-
|
207
|
-
### geordi setup-vnc
|
208
|
-
|
209
|
-
Setup VNC for running Selenium tests there.
|
210
|
-
|
211
|
-
|
212
247
|
### geordi shell TARGET
|
213
248
|
|
214
249
|
Open a shell on a Capistrano deploy target.
|
@@ -255,19 +290,16 @@ See `geordi help update` for details.
|
|
255
290
|
Print the current version of geordi.
|
256
291
|
|
257
292
|
|
258
|
-
### geordi vnc
|
293
|
+
### geordi vnc
|
259
294
|
|
260
295
|
Show the hidden VNC window.
|
261
296
|
|
297
|
+
Example: `geordi vnc` or `geordi vnc --setup`
|
262
298
|
|
263
|
-
|
264
|
-
|
265
|
-
Run a command with firefox for selenium set up.
|
299
|
+
Launch a VNC session to the hidden screen where `geordi cucumber` runs Selenium
|
300
|
+
tests.
|
266
301
|
|
267
|
-
|
268
|
-
|
269
|
-
Useful when you need Firefox for Selenium, but can't use the `geordi cucumber`
|
270
|
-
command.
|
302
|
+
When called with `--setup`, will guide through the setup of VNC.
|
271
303
|
|
272
304
|
|
273
305
|
b
|
@@ -311,3 +343,11 @@ calling your local geordi like so (adjust paths to your needs):
|
|
311
343
|
|
312
344
|
Don't forget to update this README. The whole `geordi` section is auto-generated
|
313
345
|
by `rake update_readme`.
|
346
|
+
|
347
|
+
Geordi is (partially) tested with Cucumber and Aruba. Run all tests with `rake`.
|
348
|
+
Of course you're free to use `geordi tests` ;)
|
349
|
+
|
350
|
+
**Note** that Geordi still needs to support Ruby 1.8.7, so make sure you only
|
351
|
+
use syntax that was valid back then (e.g. the :old => hash syntax).
|
352
|
+
Unfortunately, it is really hard to get Geordi's tests running on 1.8.7, so you
|
353
|
+
need to make sure it runs on 1.8.7 manually.
|
data/Rakefile
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
|
+
desc 'Default: Run all tests'
|
5
|
+
task :default => :features
|
6
|
+
|
7
|
+
task :features do
|
8
|
+
system 'cucumber'
|
9
|
+
end
|
10
|
+
|
4
11
|
task :update_readme do
|
5
12
|
require File.expand_path('../lib/geordi/cli', __FILE__)
|
6
13
|
|
@@ -39,4 +46,5 @@ For details on commands, e.g. supported options, run `geordi help <command>`.
|
|
39
46
|
|
40
47
|
updated_readme = readme.sub(geordi_section_regex, geordi_section)
|
41
48
|
File.open('README.md', 'w') { |f| f.puts updated_readme.strip }
|
49
|
+
puts 'README.me updated.'
|
42
50
|
end
|
data/bin/cap-all
CHANGED
File without changes
|
data/bin/console-for
CHANGED
File without changes
|
data/bin/cuc
CHANGED
File without changes
|
data/bin/cuc-show
CHANGED
File without changes
|
data/bin/cuc-vnc-setup
CHANGED
data/bin/deploy-to-production
CHANGED
File without changes
|
data/bin/dump-for
CHANGED
File without changes
|
data/bin/gitpt
CHANGED
File without changes
|
data/bin/load-dump
CHANGED
File without changes
|
data/bin/migrate-all
CHANGED
File without changes
|
data/bin/rs
CHANGED
File without changes
|
data/bin/run_tests
CHANGED
data/bin/shell-for
CHANGED
File without changes
|
data/bin/tests
CHANGED
File without changes
|
@@ -0,0 +1,129 @@
|
|
1
|
+
Feature: The cucumber command
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given a file named "config/cucumber.yml" with:
|
5
|
+
"""
|
6
|
+
default: features
|
7
|
+
rerun: features
|
8
|
+
"""
|
9
|
+
|
10
|
+
Scenario: Run a single feature
|
11
|
+
Given a file named "features/single.feature" with:
|
12
|
+
"""
|
13
|
+
Feature: Running a single feature
|
14
|
+
Scenario: A single scenario
|
15
|
+
"""
|
16
|
+
|
17
|
+
When I run `geordi cucumber features/single.feature`
|
18
|
+
Then the output should contain "# Running features"
|
19
|
+
And the output should contain "> Only: features/single.feature"
|
20
|
+
But the output should not contain "parallel"
|
21
|
+
|
22
|
+
|
23
|
+
Scenario: Multiple features are run in parallel
|
24
|
+
Given a file named "features/one.feature" with:
|
25
|
+
"""
|
26
|
+
Feature: One
|
27
|
+
Scenario: One
|
28
|
+
"""
|
29
|
+
And a file named "features/two.feature" with:
|
30
|
+
"""
|
31
|
+
Feature: Two
|
32
|
+
Scenario: Two
|
33
|
+
"""
|
34
|
+
|
35
|
+
When I run `geordi cucumber`
|
36
|
+
Then the output should contain "# Running features"
|
37
|
+
And the output should contain "> All features in features/"
|
38
|
+
And the output should contain "> Using parallel_tests"
|
39
|
+
|
40
|
+
|
41
|
+
Scenario: Rerunning tests until they pass
|
42
|
+
Given a file named "features/step_definitions/test_steps.rb" with:
|
43
|
+
"""
|
44
|
+
Given /^this test fails$/ do
|
45
|
+
raise
|
46
|
+
end
|
47
|
+
"""
|
48
|
+
And a file named "features/failing.feature" with:
|
49
|
+
"""
|
50
|
+
Feature: Failing feature
|
51
|
+
Scenario: Failing scenario
|
52
|
+
And this test fails
|
53
|
+
"""
|
54
|
+
|
55
|
+
When I run `geordi cucumber --rerun=2`
|
56
|
+
Then the output should contain "# Running features"
|
57
|
+
And the output should contain "# Rerun #1 of 2"
|
58
|
+
And the output should contain "# Rerun #2 of 2"
|
59
|
+
And the output should contain "Rerunning failed scenarios"
|
60
|
+
And the output should contain "Using the rerun profile"
|
61
|
+
And the exit status should be 1
|
62
|
+
|
63
|
+
|
64
|
+
Scenario: Running all features in a given subfolder
|
65
|
+
Given a file named "features/sub/one.feature" with:
|
66
|
+
"""
|
67
|
+
Feature: Testfeature
|
68
|
+
"""
|
69
|
+
And a file named "features/sub/two.feature" with:
|
70
|
+
"""
|
71
|
+
Feature: Testfeature
|
72
|
+
"""
|
73
|
+
|
74
|
+
When I run `geordi cucumber features/sub`
|
75
|
+
Then the output should contain "> Only: features/sub/two.feature, features/sub/one.feature"
|
76
|
+
And the output should contain "> Using parallel_tests"
|
77
|
+
|
78
|
+
|
79
|
+
Scenario: Using the @solo tag
|
80
|
+
|
81
|
+
The cucumber command runs all features without the @solo tag. If any of the
|
82
|
+
.feature files contains '@solo', it boots Cucumber a second time and runs
|
83
|
+
only the features tagged with @solo.
|
84
|
+
|
85
|
+
Given a file named "features/no_solo.feature" with:
|
86
|
+
"""
|
87
|
+
Feature: Test without solo tag
|
88
|
+
Scenario: This scenario can run in parallel
|
89
|
+
"""
|
90
|
+
And a file named "features/solo.feature" with:
|
91
|
+
"""
|
92
|
+
Feature: Solo test
|
93
|
+
@solo
|
94
|
+
Scenario: This scenario must NOT run in parallel
|
95
|
+
"""
|
96
|
+
|
97
|
+
When I run `geordi cucumber --verbose`
|
98
|
+
Then the output should contain "# Running features"
|
99
|
+
And the output should match /^> .*cucumber .*--tags ~@solo/
|
100
|
+
And the output should contain "# Running @solo features"
|
101
|
+
And the output should match /^> .*cucumber .*--tags @solo/
|
102
|
+
|
103
|
+
|
104
|
+
Scenario: When there are no scenarios tagged @solo, the extra run is skipped
|
105
|
+
Given a file named "features/no_solo.feature" with:
|
106
|
+
"""
|
107
|
+
Feature: Test without solo tag
|
108
|
+
Scenario: This scenario can run in parallel
|
109
|
+
"""
|
110
|
+
|
111
|
+
When I run `geordi cucumber --verbose`
|
112
|
+
Then the output should contain "# Running features"
|
113
|
+
And the output should match /^> .*cucumber .*--tags ~@solo/
|
114
|
+
But the output should not contain "# Running @solo features"
|
115
|
+
And the output should not match /^> .*cucumber .*--tags @solo/
|
116
|
+
|
117
|
+
|
118
|
+
Scenario: Specifying a firefox version to use
|
119
|
+
Given a file named "features/sub/one.feature" with:
|
120
|
+
"""
|
121
|
+
Feature: Testfeature
|
122
|
+
"""
|
123
|
+
And a file named ".firefox-version" with:
|
124
|
+
"""
|
125
|
+
24.0
|
126
|
+
"""
|
127
|
+
|
128
|
+
When I run `geordi cucumber --verbose`
|
129
|
+
Then the output should match /^> PATH=.*24.0:\$PATH.* cucumber/
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Feature: The dump command
|
2
|
+
|
3
|
+
Scenario: Creating a dump of the development database
|
4
|
+
When I run `geordi dump`
|
5
|
+
Then the output should contain "Util.system! dumple development"
|
6
|
+
And the output should contain "Successfully dumped the development database"
|
7
|
+
|
8
|
+
|
9
|
+
Scenario: Creating a dump of a remote database
|
10
|
+
Given a file named "Capfile" with "Capfile exists"
|
11
|
+
And a file named "config/deploy.rb" with:
|
12
|
+
"""
|
13
|
+
"""
|
14
|
+
And a file named "config/deploy/staging.rb" with:
|
15
|
+
"""
|
16
|
+
set :rails_env, 'staging'
|
17
|
+
set :deploy_to, '/var/www/example.com'
|
18
|
+
set :user, 'user'
|
19
|
+
|
20
|
+
server 'www.example.com'
|
21
|
+
"""
|
22
|
+
|
23
|
+
When I run `geordi dump staging`
|
24
|
+
Then the output should contain "# Dumping the database of staging"
|
25
|
+
And the output should contain "> Connecting to www.example.com"
|
26
|
+
And the output should contain "Util.system! ssh user@www.example.com -t cd /var/www/example.com/current && bash --login -c 'dumple staging --for_download'"
|
27
|
+
And the output should contain "> Downloading remote dump to tmp/staging.dump"
|
28
|
+
# Omitting the absolute path in this regex (.*)
|
29
|
+
And the output should match %r<Util.system! scp user@www.example.com:~/dumps/dump_for_download.dump .*/tmp/aruba/tmp/staging.dump>
|
30
|
+
And the output should contain "> Dumped the staging database to tmp/staging.dump"
|
31
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
Feature: The firefox/chrome command
|
2
|
+
|
3
|
+
This command is used internally by the cucumber command.
|
4
|
+
|
5
|
+
Scenario: Running a command with VNC set up
|
6
|
+
Given a file named "testfile" with "testcontent"
|
7
|
+
|
8
|
+
When I run `geordi firefox cat testfile`
|
9
|
+
Then the output should contain "> VNC is ready to hold Selenium test browsers. Use `geordi vnc` to view them."
|
10
|
+
And the output should contain "testcontent"
|
11
|
+
But the output should not contain "Firefox for Selenium"
|
12
|
+
|
13
|
+
|
14
|
+
Scenario: The command is aliased as "chrome"
|
15
|
+
Given a file named "testfile" with "testcontent"
|
16
|
+
|
17
|
+
When I run `geordi chrome cat testfile`
|
18
|
+
Then the output should contain "> VNC is ready to hold Selenium test browsers. Use `geordi vnc` to view them."
|
19
|
+
And the output should contain "testcontent"
|
20
|
+
|
21
|
+
|
22
|
+
# Could not get this to work
|
23
|
+
# Scenario: Running a command with VNC and Firefox set up
|
24
|
+
# Given a mocked home directory
|
25
|
+
# Given a file named ".firefox-version" with "1337"
|
26
|
+
# And a file named "bin/firefoxes/1337/firefox" with "<fake>"
|
27
|
+
# And a file named "testfile" with "testcontent"
|
28
|
+
#
|
29
|
+
# When I run `geordi firefox cat testfile`
|
30
|
+
# Then the output should contain "> VNC is ready"
|
31
|
+
# And the output should contain "> Firefox for Selenium set up"
|
32
|
+
# And the output should contain "testcontent"
|
33
|
+
|
34
|
+
|
35
|
+
Scenario: Having a .firefox-version that is not installed yet
|
36
|
+
Given a file named ".firefox-version" with "1337"
|
37
|
+
And a file named "testfile" with "testcontent"
|
38
|
+
|
39
|
+
When I run `geordi firefox cat testfile` interactively
|
40
|
+
And I type "yes"
|
41
|
+
Then the output should contain "> Firefox 1337 not found"
|
42
|
+
And the output should contain "Run tests anyway?"
|
43
|
+
And the output should contain "testcontent"
|
44
|
+
|
45
|
+
|
46
|
+
Scenario: A .firefox-version file with "system" is ignored (legacy support)
|
47
|
+
Given a file named ".firefox-version" with "system"
|
48
|
+
And a file named "testfile" with "testcontent"
|
49
|
+
|
50
|
+
When I run `geordi firefox cat testfile`
|
51
|
+
Then the output should contain "> VNC is ready"
|
52
|
+
And the output should contain "testcontent"
|
53
|
+
But the output should not contain "Firefox for Selenium"
|
@@ -0,0 +1,30 @@
|
|
1
|
+
Feature: The shell command
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given a file named "Capfile" with "Capfile exists"
|
5
|
+
|
6
|
+
|
7
|
+
Scenario: It opens a remote shell on the primary server
|
8
|
+
Given a file named "config/deploy.rb" with "deploy.rb exists"
|
9
|
+
And a file named "config/deploy/geordi.rb" with:
|
10
|
+
"""
|
11
|
+
set :user, 'deploy'
|
12
|
+
set :deploy_to, '/var/www/example.com'
|
13
|
+
server 'first.example.com'
|
14
|
+
server 'second.example.com'
|
15
|
+
"""
|
16
|
+
|
17
|
+
When I run `geordi shell geordi`
|
18
|
+
Then the output should contain "Util.system! ssh deploy@first.example.com -t cd /var/www/example.com/current && bash --login"
|
19
|
+
|
20
|
+
|
21
|
+
Scenario: It understands Capistrano 3 syntax
|
22
|
+
Given a file named "config/deploy.rb" with "deploy.rb exists"
|
23
|
+
And a file named "config/deploy/geordi.rb" with:
|
24
|
+
"""
|
25
|
+
set :deploy_to, '/var/www/example.com'
|
26
|
+
server 'first.example.com', user: 'deploy'
|
27
|
+
"""
|
28
|
+
|
29
|
+
When I run `geordi shell geordi`
|
30
|
+
Then the output should contain "Util.system! ssh deploy@first.example.com -t cd /var/www/example.com/current && bash --login"
|
data/geordi.gemspec
CHANGED
@@ -21,9 +21,8 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.require_paths = ["lib"]
|
22
22
|
|
23
23
|
s.add_runtime_dependency 'thor', '>= 0.18.0'
|
24
|
-
# s.add_development_dependency 'debugger'
|
25
24
|
|
26
25
|
s.post_install_message = <<-ATTENTION
|
27
|
-
|
26
|
+
Binary `geordi` installed
|
28
27
|
ATTENTION
|
29
28
|
end
|
@@ -1,60 +1,57 @@
|
|
1
|
-
require 'capistrano'
|
2
|
-
|
3
1
|
module Geordi
|
4
2
|
class CapistranoConfig
|
5
3
|
|
6
4
|
attr_accessor :root
|
7
5
|
|
8
6
|
def initialize(stage)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
@root = find_project_root!
|
13
|
-
load_capistrano_config
|
7
|
+
self.stage = stage
|
8
|
+
self.root = find_project_root!
|
9
|
+
load_deploy_info
|
14
10
|
end
|
15
11
|
|
16
|
-
def user
|
17
|
-
|
12
|
+
def user(server)
|
13
|
+
cap2user = deploy_info[ /^set :user, ['"](.*?)['"]/, 1 ]
|
14
|
+
cap2user || deploy_info[ /^server ['"]#{ server }['"],.*user.{1,4}['"](.*?)['"]/, 1 ]
|
18
15
|
end
|
19
16
|
|
20
17
|
def servers
|
21
|
-
|
18
|
+
deploy_info.scan(/^server ['"](.*?)['"]/).flatten
|
22
19
|
end
|
23
20
|
|
24
21
|
def primary_server
|
25
|
-
|
22
|
+
# Actually, servers may have a :primary property. From Capistrano 3, the
|
23
|
+
# first listed server is the primary one by default, which is a good-
|
24
|
+
# enough default for us.
|
25
|
+
servers.first
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
29
|
-
|
28
|
+
def remote_root
|
29
|
+
File.join deploy_info[ /^set :deploy_to, ['"](.*?)['"]/, 1 ], 'current'
|
30
30
|
end
|
31
31
|
|
32
32
|
def env
|
33
|
-
|
33
|
+
deploy_info[ /^set :rails_env, ['"](.*?)['"]/, 1 ]
|
34
34
|
end
|
35
35
|
|
36
36
|
def shell
|
37
|
-
|
37
|
+
'bash --login'
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
40
|
private
|
42
41
|
|
43
|
-
|
44
|
-
config = ::Capistrano::Configuration.new
|
45
|
-
config.load('deploy')
|
46
|
-
config.load('config/deploy')
|
47
|
-
if @stage and @stage != ''
|
48
|
-
config[:stage] = @stage
|
49
|
-
config.find_and_execute_task(@stage)
|
50
|
-
end
|
42
|
+
attr_accessor :deploy_info, :stage
|
51
43
|
|
52
|
-
|
44
|
+
def load_deploy_info
|
45
|
+
self.deploy_info = File.read(File.join root, 'config/deploy.rb').tap do |info|
|
46
|
+
if stage
|
47
|
+
info << "\n" << File.read(File.join root, "config/deploy/#{ stage }.rb")
|
48
|
+
end
|
49
|
+
end
|
53
50
|
end
|
54
51
|
|
55
52
|
def find_project_root!
|
56
53
|
current = Dir.pwd
|
57
|
-
until
|
54
|
+
until File.exists?('Capfile')
|
58
55
|
Dir.chdir '..'
|
59
56
|
raise <<-ERROR if current == Dir.pwd
|
60
57
|
Could not locate Capfile.
|