dpl-hephy 1.10.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 +7 -0
- data/dpl-hephy.gemspec +3 -0
- data/lib/dpl/provider/hephy.rb +128 -0
- data/spec/provider/hephy_spec.rb +116 -0
- metadata +186 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e3cbd733d47d2a9b963becf1950573c2582c8533
|
4
|
+
data.tar.gz: c156420f4f7c38e1b9373ab48bc31f1dc4134eeb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bf9fed3c67e9ddf80a7e24a2638e8199c1f8dd758f86637d91fbfe5042b8c42f93a1f42a76002aa5f71895bdc1136a2430773a52d5d8cdd41a2a2dc04885e17f
|
7
|
+
data.tar.gz: d7bd1e46c29993268ccc63c78f47c8b84d6882f5fef7fbf0ec51e61beb6991b6b4d1feeabdcae4a01b53612ecb6e9a1c51571235096a85ddd974c3529bacb207
|
data/dpl-hephy.gemspec
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
module DPL
|
2
|
+
class Provider
|
3
|
+
class Hephy < Provider
|
4
|
+
|
5
|
+
def install_deploy_dependencies
|
6
|
+
install_url = determine_install_url
|
7
|
+
context.shell "curl -sSL #{install_url} | bash -x -s #{option(:cli_version)}"
|
8
|
+
end
|
9
|
+
|
10
|
+
#Default to installing the default v1 client. Otherwise determine if this is a v2 client
|
11
|
+
def determine_install_url
|
12
|
+
if option(:cli_version).nil?
|
13
|
+
return "https://raw.githubusercontent.com/teamhephy/workflow-cli/master/install-v2.sh"
|
14
|
+
else
|
15
|
+
version_arg = Gem::Version.new(option(:cli_version).gsub(/^v?V?/,''))
|
16
|
+
if version_arg >= Gem::Version.new('2.0.0')
|
17
|
+
return "https://raw.githubusercontent.com/teamhephy/workflow-cli/master/install-v2.sh"
|
18
|
+
else
|
19
|
+
return "https://raw.githubusercontent.com/teamhephy/workflow-cli/master/install-v2.sh"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def needs_key?
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
def check_auth
|
29
|
+
unless context.shell "./deis login #{option(:controller)}" \
|
30
|
+
" --username=#{option(:username)}" \
|
31
|
+
" --password=#{option(:password)}"
|
32
|
+
error 'Login failed.'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def check_app
|
37
|
+
unless context.shell "./deis apps:info --app=#{option(:app)}"
|
38
|
+
error 'Application could not be verified.'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def setup_key(file)
|
43
|
+
unless context.shell "./deis keys:add #{file}"
|
44
|
+
error 'Adding keys failed.'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def setup_git_ssh(path, key_path)
|
49
|
+
key_path = File.expand_path(key_path)
|
50
|
+
path = File.expand_path(path)
|
51
|
+
|
52
|
+
File.open(path, 'w') do |file|
|
53
|
+
file.write "#!/bin/sh\n"
|
54
|
+
file.write "exec ssh #{verbose_flag} -o StrictHostKeychecking=no -o CheckHostIP=no -o UserKnownHostsFile=/dev/null -i #{key_path} \"$@\"\n"
|
55
|
+
end
|
56
|
+
|
57
|
+
chmod(0740, path)
|
58
|
+
context.env['GIT_SSH'] = path
|
59
|
+
|
60
|
+
wait_for_git_access
|
61
|
+
end
|
62
|
+
|
63
|
+
def wait_for_git_access()
|
64
|
+
retry_count=0
|
65
|
+
max_retries=30
|
66
|
+
|
67
|
+
#Get the deis git remote host and port
|
68
|
+
remote_uri=repository_url.split("ssh://")[1].split("/")[0]
|
69
|
+
remote_host, remote_port = remote_uri.split(":")
|
70
|
+
puts "Git remote is #{remote_host} at port #{remote_port}"
|
71
|
+
|
72
|
+
#Try and connect to the github remote via ssh.
|
73
|
+
while retry_count < max_retries
|
74
|
+
puts "Waiting for ssh key to propagate..."
|
75
|
+
if context.shell "#{context.env['GIT_SSH']} #{remote_host} -p #{remote_port} 2>&1 | grep -c 'PTY allocation request failed' > /dev/null"
|
76
|
+
puts "SSH connection established."
|
77
|
+
break
|
78
|
+
end
|
79
|
+
retry_count += 1
|
80
|
+
sleep(1)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def remove_key
|
85
|
+
unless context.shell "./deis keys:remove #{option(:key_name)}"
|
86
|
+
error 'Removing keys failed.'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def repository_url
|
91
|
+
"ssh://git@#{builder_hostname}:2222/#{option(:app)}.git"
|
92
|
+
end
|
93
|
+
|
94
|
+
def builder_hostname
|
95
|
+
host_tokens = controller_host.split(".")
|
96
|
+
host_tokens[0] = [host_tokens[0], "builder"].join("-")
|
97
|
+
host_tokens.join(".")
|
98
|
+
end
|
99
|
+
|
100
|
+
def controller_host
|
101
|
+
option(:controller).gsub(/https?:\/\//, "").split(":")[0]
|
102
|
+
end
|
103
|
+
|
104
|
+
def push_app
|
105
|
+
unless context.shell "bash -c 'git push #{verbose_flag} #{repository_url} HEAD:refs/heads/master -f 2>&1 | tr -dc \"[:alnum:][:space:][:punct:]\" | sed -E \"s/remote: (\\[1G)+//\" | sed \"s/\\[K$//\"; exit ${PIPESTATUS[0]}'"
|
106
|
+
error 'Deploying application failed.'
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def run(command)
|
111
|
+
unless context.shell "./deis run -a #{option(:app)} -- #{command}"
|
112
|
+
error 'Running command failed.'
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def cleanup
|
117
|
+
return if options[:skip_cleanup]
|
118
|
+
context.shell "mv deis ~/deis"
|
119
|
+
super
|
120
|
+
context.shell "mv ~/deis deis"
|
121
|
+
end
|
122
|
+
|
123
|
+
def verbose_flag
|
124
|
+
'-v' if options[:verbose]
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dpl/provider/hephy'
|
3
|
+
|
4
|
+
describe DPL::Provider::Hephy do
|
5
|
+
let(:options) do
|
6
|
+
{
|
7
|
+
:app => 'example',
|
8
|
+
:key_name => 'key',
|
9
|
+
:controller => 'https://deis.deisapps.com',
|
10
|
+
:username => 'travis',
|
11
|
+
:password => 'secret',
|
12
|
+
:cli_version => 'v2.0.0'
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
subject :provider do
|
17
|
+
described_class.new(DummyContext.new, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#install_deploy_dependencies" do
|
21
|
+
example do
|
22
|
+
expect(provider.context).to receive(:shell).with(
|
23
|
+
'curl -sSL https://raw.githubusercontent.com/teamhephy/workflow-cli/master/install-v2.sh | bash -x -s v2.0.0'
|
24
|
+
).and_return(true)
|
25
|
+
provider.install_deploy_dependencies
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#needs_key?" do
|
30
|
+
example do
|
31
|
+
expect(provider.needs_key?).to eq(true)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#check_auth" do
|
36
|
+
example do
|
37
|
+
expect(provider.context).to receive(:shell).with(
|
38
|
+
'./deis login https://deis.deisapps.com --username=travis --password=secret'
|
39
|
+
).and_return(true)
|
40
|
+
provider.check_auth
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#check_app" do
|
45
|
+
example do
|
46
|
+
expect(provider.context).to receive(:shell).with(
|
47
|
+
'./deis apps:info --app=example'
|
48
|
+
).and_return(true)
|
49
|
+
provider.check_app
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#setup_key" do
|
54
|
+
let(:ssh_config_handle) { double 'ssh_config_handle' }
|
55
|
+
let(:ssh_config) { File.join(Dir.home, '.ssh', 'config') }
|
56
|
+
let(:identity_file) { File.join(Dir.pwd, 'key_file') }
|
57
|
+
example do
|
58
|
+
expect(provider.context).to receive(:shell).with(
|
59
|
+
'./deis keys:add key_file'
|
60
|
+
).and_return(true)
|
61
|
+
provider.setup_key('key_file')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "#setup_git_ssh" do
|
66
|
+
example do
|
67
|
+
expect(provider.context).to receive(:shell).with(
|
68
|
+
/grep -c 'PTY allocation request failed'/
|
69
|
+
).and_return(false)
|
70
|
+
|
71
|
+
expect(provider.context).to receive(:shell).with(
|
72
|
+
/grep -c 'PTY allocation request failed'/
|
73
|
+
).and_return(true)
|
74
|
+
|
75
|
+
provider.setup_git_ssh('foo', 'key_file')
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#remove_key" do
|
80
|
+
example do
|
81
|
+
expect(provider.context).to receive(:shell).with(
|
82
|
+
'./deis keys:remove key'
|
83
|
+
).and_return(true)
|
84
|
+
provider.remove_key
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "#push_app" do
|
89
|
+
example do
|
90
|
+
expect(provider.context).to receive(:shell).with(
|
91
|
+
"bash -c 'git push ssh://git@deis-builder.deisapps.com:2222/example.git HEAD:refs/heads/master -f 2>&1 | tr -dc \"[:alnum:][:space:][:punct:]\" | sed -E \"s/remote: (\\[1G)+//\" | sed \"s/\\[K$//\"; exit ${PIPESTATUS[0]}'"
|
92
|
+
).and_return(true)
|
93
|
+
provider.push_app
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "#run" do
|
98
|
+
example do
|
99
|
+
expect(provider.context).to receive(:shell).with(
|
100
|
+
'./deis run -a example -- shell command'
|
101
|
+
).and_return(true)
|
102
|
+
provider.run('shell command')
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "#cleanup" do
|
107
|
+
example do
|
108
|
+
expect(provider.context).to receive(:shell).with('mv deis ~/deis')
|
109
|
+
expect(provider.context).to receive(:shell).with('mv .dpl ~/dpl')
|
110
|
+
expect(provider.context).to receive(:shell).with('git stash --all')
|
111
|
+
expect(provider.context).to receive(:shell).with('mv ~/dpl .dpl')
|
112
|
+
expect(provider.context).to receive(:shell).with('mv ~/deis deis')
|
113
|
+
provider.cleanup
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
metadata
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dpl-hephy
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.10.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Konstantin Haase
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-08-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: dpl
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.10.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.10.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-its
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: json_pure
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: tins
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: highline
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: term-ansicolor
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: faraday
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
description: deploy tool abstraction for clients
|
154
|
+
email: konstantin.mailinglists@googlemail.com
|
155
|
+
executables: []
|
156
|
+
extensions: []
|
157
|
+
extra_rdoc_files: []
|
158
|
+
files:
|
159
|
+
- dpl-hephy.gemspec
|
160
|
+
- lib/dpl/provider/hephy.rb
|
161
|
+
- spec/provider/hephy_spec.rb
|
162
|
+
homepage: https://github.com/travis-ci/dpl
|
163
|
+
licenses:
|
164
|
+
- MIT
|
165
|
+
metadata: {}
|
166
|
+
post_install_message:
|
167
|
+
rdoc_options: []
|
168
|
+
require_paths:
|
169
|
+
- lib
|
170
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '2.2'
|
175
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
180
|
+
requirements: []
|
181
|
+
rubyforge_project:
|
182
|
+
rubygems_version: 2.6.13
|
183
|
+
signing_key:
|
184
|
+
specification_version: 4
|
185
|
+
summary: deploy tool
|
186
|
+
test_files: []
|