geordi 2.12.1 → 2.12.2
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 +4 -4
- data/Gemfile.lock +50 -1
- data/features/docker.feature +25 -1
- data/features/step_definitions/docker_command_steps.rb +11 -0
- data/lib/geordi/commands/docker.rb +2 -1
- data/lib/geordi/docker.rb +34 -6
- data/lib/geordi/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72b80aa5fcd6e4f4bb048f76aac069a7cb99310a3900b933f53c5549e737f52e
|
4
|
+
data.tar.gz: 1a0bba5ab27c1759e9b0b5a7f3b79f946596605d903129f332f53f4afb33b324
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa1a3c5c3bc2278cb10f347d4b94dbea177cb94a65ce27459819cc32f87a82a6cf9408f4e659fdc3d9ca1f005e957f82e0867063d645367aec2019f721159ead
|
7
|
+
data.tar.gz: fd92c28543206ac2c61dca8efa017a944612e6ce84fa3f7c513b9b9056e358dc7423dae3163d3954cc56d4abf974620c76c9469a1c2a832f46836923fc0c0da1
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
geordi (2.12.
|
4
|
+
geordi (2.12.2)
|
5
5
|
thor (~> 0.18.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -13,9 +13,16 @@ GEM
|
|
13
13
|
contracts (~> 0.9)
|
14
14
|
cucumber (>= 1.3.19)
|
15
15
|
rspec-expectations (>= 2.99)
|
16
|
+
axiom-types (0.1.1)
|
17
|
+
descendants_tracker (~> 0.0.4)
|
18
|
+
ice_nine (~> 0.11.0)
|
19
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
16
20
|
builder (3.2.4)
|
17
21
|
childprocess (0.5.9)
|
18
22
|
ffi (~> 1.0, >= 1.0.11)
|
23
|
+
coderay (1.1.3)
|
24
|
+
coercible (1.0.0)
|
25
|
+
descendants_tracker (~> 0.0.1)
|
19
26
|
contracts (0.9)
|
20
27
|
cucumber (1.3.20)
|
21
28
|
builder (>= 2.1.2)
|
@@ -23,18 +30,40 @@ GEM
|
|
23
30
|
gherkin (~> 2.12)
|
24
31
|
multi_json (>= 1.7.5, < 2.0)
|
25
32
|
multi_test (>= 0.1.2)
|
33
|
+
declarative (0.0.20)
|
34
|
+
declarative-option (0.1.0)
|
35
|
+
descendants_tracker (0.0.4)
|
36
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
26
37
|
diff-lcs (1.2.5)
|
38
|
+
equalizer (0.0.11)
|
39
|
+
excon (0.78.0)
|
40
|
+
faraday (1.1.0)
|
41
|
+
multipart-post (>= 1.2, < 3)
|
42
|
+
ruby2_keywords
|
43
|
+
faraday_middleware (1.0.0)
|
44
|
+
faraday (~> 1.0)
|
27
45
|
ffi (1.9.18)
|
28
46
|
gherkin (2.12.2)
|
29
47
|
multi_json (~> 1.3)
|
30
48
|
highline (1.6.21)
|
49
|
+
ice_nine (0.11.2)
|
31
50
|
launchy (2.4.3)
|
32
51
|
addressable (~> 2.3)
|
52
|
+
method_source (1.0.0)
|
53
|
+
mimemagic (0.3.5)
|
33
54
|
multi_json (1.15.0)
|
34
55
|
multi_test (0.1.2)
|
56
|
+
multipart-post (2.1.1)
|
35
57
|
parallel (0.5.16)
|
36
58
|
parallel_tests (0.6.18)
|
37
59
|
parallel
|
60
|
+
pry (0.13.1)
|
61
|
+
coderay (~> 1.1)
|
62
|
+
method_source (~> 1.0)
|
63
|
+
representable (3.0.4)
|
64
|
+
declarative (< 0.1.0)
|
65
|
+
declarative-option (< 0.2.0)
|
66
|
+
uber (< 0.2.0)
|
38
67
|
rspec-expectations (3.4.0)
|
39
68
|
diff-lcs (>= 1.2.0, < 2.0)
|
40
69
|
rspec-support (~> 3.4.0)
|
@@ -42,7 +71,25 @@ GEM
|
|
42
71
|
diff-lcs (>= 1.2.0, < 2.0)
|
43
72
|
rspec-support (~> 3.4.0)
|
44
73
|
rspec-support (3.4.1)
|
74
|
+
ruby2_keywords (0.0.2)
|
45
75
|
thor (0.18.1)
|
76
|
+
thread_safe (0.3.6)
|
77
|
+
tracker_api (1.11.0)
|
78
|
+
addressable
|
79
|
+
equalizer
|
80
|
+
excon
|
81
|
+
faraday
|
82
|
+
faraday_middleware
|
83
|
+
mimemagic
|
84
|
+
multi_json
|
85
|
+
representable
|
86
|
+
virtus
|
87
|
+
uber (0.1.0)
|
88
|
+
virtus (1.0.5)
|
89
|
+
axiom-types (~> 0.1)
|
90
|
+
coercible (~> 1.0)
|
91
|
+
descendants_tracker (~> 0.0, >= 0.0.3)
|
92
|
+
equalizer (~> 0.0, >= 0.0.9)
|
46
93
|
|
47
94
|
PLATFORMS
|
48
95
|
ruby
|
@@ -54,7 +101,9 @@ DEPENDENCIES
|
|
54
101
|
highline
|
55
102
|
launchy
|
56
103
|
parallel_tests
|
104
|
+
pry
|
57
105
|
rspec-mocks
|
106
|
+
tracker_api
|
58
107
|
|
59
108
|
BUNDLED WITH
|
60
109
|
1.17.3
|
data/features/docker.feature
CHANGED
@@ -48,7 +48,7 @@ Feature: The docker command
|
|
48
48
|
And the output should contain "x You need to install docker first"
|
49
49
|
|
50
50
|
|
51
|
-
Scenario: Shell runs docker-compose run main
|
51
|
+
Scenario: Shell runs docker-compose run main, and docker-compose stop
|
52
52
|
Given a file named "docker-compose.yml" with:
|
53
53
|
"""
|
54
54
|
services:
|
@@ -60,3 +60,27 @@ Feature: The docker command
|
|
60
60
|
|
61
61
|
When I run `geordi docker shell`
|
62
62
|
Then the output should contain "docker-compose run --service-ports -v /path/to/sock:/path/to/sock -e SSH_AUTH_SOCK=/path/to/sock/ssh main"
|
63
|
+
Then the output should contain "docker-compose stop"
|
64
|
+
|
65
|
+
|
66
|
+
Scenario: One can attach to a running shell
|
67
|
+
Given the docker command finds a running shell "project_main_run_foo"
|
68
|
+
And a file named "docker-compose.yml" with:
|
69
|
+
"""
|
70
|
+
services:
|
71
|
+
main: foo
|
72
|
+
"""
|
73
|
+
|
74
|
+
When I run `geordi docker shell --secondary`
|
75
|
+
Then the output should contain "Could not find a running shell"
|
76
|
+
|
77
|
+
|
78
|
+
Scenario: Attaching fails if no shell is running
|
79
|
+
Given a file named "docker-compose.yml" with:
|
80
|
+
"""
|
81
|
+
services:
|
82
|
+
main: foo
|
83
|
+
"""
|
84
|
+
|
85
|
+
When I run `geordi docker shell --secondary`
|
86
|
+
Then the output should contain "Could not find a running shell"
|
@@ -8,3 +8,14 @@ Given(/the docker command cannot find the "(.*?)" binary/) do |command|
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
11
|
+
|
12
|
+
Given(/^the docker command finds a running shell "(.*?)"$/) do |shell_name|
|
13
|
+
require 'geordi/docker'
|
14
|
+
expect_any_instance_of(Geordi::Docker).to receive(:mock_parse).at_least(:once).and_wrap_original do |original, *args|
|
15
|
+
if args[0] =~ /docker-compose ps/
|
16
|
+
"other_shell\nshell_name foo"
|
17
|
+
else
|
18
|
+
original.call(*args)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -5,9 +5,10 @@ class DockerCLI < Thor
|
|
5
5
|
end
|
6
6
|
|
7
7
|
desc 'shell', 'Open a shell in the main docker container for the current project.'
|
8
|
+
option :secondary, default: false, :type => :boolean
|
8
9
|
map 'shell' => '_shell'
|
9
10
|
def _shell
|
10
|
-
docker.shell
|
11
|
+
docker.shell(:secondary => options[:secondary])
|
11
12
|
end
|
12
13
|
|
13
14
|
desc 'vnc', 'Open a vnc viewer connecting to the docker container.'
|
data/lib/geordi/docker.rb
CHANGED
@@ -18,12 +18,13 @@ module Geordi
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def shell
|
21
|
+
def shell(options = {})
|
22
22
|
check_installation_and_config
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
if options[:secondary]
|
24
|
+
attach_to_running_shell
|
25
|
+
else
|
26
|
+
run_shell
|
27
|
+
end
|
27
28
|
end
|
28
29
|
|
29
30
|
def vnc
|
@@ -32,10 +33,32 @@ module Geordi
|
|
32
33
|
|
33
34
|
private
|
34
35
|
|
36
|
+
def attach_to_running_shell
|
37
|
+
running_containers = execute(:`, 'docker-compose ps').split("\n")
|
38
|
+
if (main_container_line = running_containers.grep(/_main_run/).first)
|
39
|
+
container_name = main_container_line.split(' ').first
|
40
|
+
execute(:system, 'docker', 'exec', '-it', container_name, 'bash')
|
41
|
+
else
|
42
|
+
fail('Could not find a running shell. Start without --secondary first.')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def run_shell
|
47
|
+
command = [:system, 'docker-compose', 'run', '--service-ports']
|
48
|
+
command += ssh_agent_forward
|
49
|
+
command += ['main']
|
50
|
+
execute(*command)
|
51
|
+
execute(:system, 'docker-compose', 'stop')
|
52
|
+
end
|
53
|
+
|
35
54
|
def execute(kind, *args)
|
36
55
|
if ENV['GEORDI_TESTING']
|
37
56
|
puts "Stubbed run #{args.join(' ')}"
|
38
|
-
|
57
|
+
if kind == :`
|
58
|
+
mock_parse(*args)
|
59
|
+
else
|
60
|
+
mock_run(*args)
|
61
|
+
end
|
39
62
|
else
|
40
63
|
send(kind, *args)
|
41
64
|
end
|
@@ -46,6 +69,11 @@ module Geordi
|
|
46
69
|
true
|
47
70
|
end
|
48
71
|
|
72
|
+
def mock_parse(*args)
|
73
|
+
# exists just to be stubbed in tests
|
74
|
+
'command output'
|
75
|
+
end
|
76
|
+
|
49
77
|
def check_installation_and_config
|
50
78
|
unless command_exists?('docker')
|
51
79
|
fail('You need to install docker first with `sudo apt install docker`. After installation please log out and back in to your system once.')
|
data/lib/geordi/version.rb
CHANGED