dpl-hephy 1.10.0

Sign up to get free protection for your applications and to get access to all the features.
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,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'hephy'
@@ -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: []