api_deploy 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,16 @@
1
+ {
2
+ "teamcity":{
3
+ "url":"http://teamcity.yoox.net/httpAuth/app/rest",
4
+ "user":"test",
5
+ "pass":"test"
6
+ },
7
+ "artifactory":{
8
+ "url":"http://artifactory.yoox.net/artifactory",
9
+ "user":"test",
10
+ "pass":"test"
11
+ },
12
+ "octopus":{
13
+ "url":"http://octopus3.yoox.net/api",
14
+ "api_key":"test"
15
+ }
16
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "teamcity":{
3
+ "user":"override"
4
+ }
5
+ }
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ class ExampleAPI
4
+ include API
5
+ end
6
+
7
+ describe API do
8
+ let(:api) { ExampleAPI.new }
9
+ let(:config) { double(:config, url: url) }
10
+ let(:connection) { double(:connection) }
11
+ let(:url) { 'http://example.com' }
12
+ let(:query) { '{}' }
13
+
14
+ context '#create_api' do
15
+ context 'with an api key' do
16
+ it 'creates a connection' do
17
+ expect(config).to receive(:api_key).twice.and_return('foo')
18
+ expect(api.create_api(config)).to be_an_instance_of(Faraday::Connection)
19
+ end
20
+ end
21
+
22
+ context 'without an api key' do
23
+ it 'creates a connection' do
24
+ expect(config).to receive(:api_key).once.and_return(nil)
25
+ expect(config).to receive(:user).once.and_return('foo')
26
+ expect(config).to receive(:pass).once.and_return('bar')
27
+ expect(api.create_api(config)).to be_an_instance_of(Faraday::Connection)
28
+ end
29
+ end
30
+ end
31
+
32
+ context '#request' do
33
+ before do
34
+ allow(api).to receive(:api).and_return(connection)
35
+ allow(connection).to receive(:url_prefix).and_return(url)
36
+ end
37
+
38
+ context 'with query' do
39
+ it 'sends the request with the params' do
40
+ expect(connection).to receive(:post)
41
+ api.request(:post, url, query)
42
+ end
43
+ end
44
+
45
+ context 'without query' do
46
+ it 'sends the request' do
47
+ expect(connection).to receive(:post).with(url)
48
+ api.request(:post, url)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe ArtifactoryApi do
4
+ let(:artifactory) { described_class.new }
5
+
6
+ it 'configures the api endpoint' do
7
+ expect(artifactory.api.endpoint).to eq('http://artifactory.yoox.net/artifactory')
8
+ expect(artifactory.api.username).to eq('continuous_integration')
9
+ end
10
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe ConfigStore do
4
+ let(:config) { described_class }
5
+ let(:octopus_config) {{
6
+ 'url' => 'http://octopus3.yoox.net/api',
7
+ 'api_key' => 'test'
8
+ }}
9
+ let(:teamcity_config) {{
10
+ 'pass' => 'test',
11
+ 'url' => 'http://teamcity.yoox.net/httpAuth/app/rest',
12
+ 'user' => 'override',
13
+ }}
14
+
15
+ before(:all) do
16
+ ConfigStore.defaults_path = 'spec/data/defaults.json'
17
+ ConfigStore.overrides_path = 'spec/data/overrides.json'
18
+ ConfigStore.set_config
19
+ end
20
+
21
+ context 'self.load_config' do
22
+ it 'loads the defaults' do
23
+ expect(config.octopus).to eq(octopus_config)
24
+ end
25
+
26
+ it 'loads the overrides' do
27
+ expect(config.teamcity).to eq(teamcity_config)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe Log do
4
+ let(:log) { described_class }
5
+ let(:logger) { double(:logger) }
6
+
7
+ before do
8
+ allow(Log).to receive(:logger).and_return(logger)
9
+ end
10
+
11
+ it 'forwards to Logging' do
12
+ expect(logger).to receive(:warn).with('foo')
13
+ Log.warn('foo')
14
+ end
15
+ end
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ describe OctopusApi do
4
+ let(:api_url) { 'http://octopus3.yoox.net/api' }
5
+ let(:api_key) { 'TESTKEY' }
6
+ let(:type) { 'Test' }
7
+ let(:id) { 'id' }
8
+ let(:headers) {{ 'X-Octopus-ApiKey'=> api_key }}
9
+ let(:create_query) {{ name: "new_box" }}
10
+ let(:api) { double(:api, url_prefix: api_url) }
11
+
12
+ let(:environments) {[
13
+ {'Name' => 'Foo'},
14
+ {'Name' => 'Bar'},
15
+ {'Name' => 'Baz'},
16
+ ]}
17
+
18
+ let(:octopus) { described_class.new }
19
+
20
+ before do
21
+ expect(Faraday).to receive(:new).with(url: api_url).and_return(api)
22
+ end
23
+
24
+ it 'has a list of valid resource types' do
25
+ expect(octopus.class::RESOURCE_TYPES.count).to eq(10)
26
+ end
27
+
28
+ context '#create_resource' do
29
+ it 'sends a post to octopus' do
30
+ expect(octopus).to receive(:check_type).with(type)
31
+ expect(api).to receive(:post)
32
+ octopus.create_resource(type, name: "new_box")
33
+ end
34
+ end
35
+
36
+ context '#remove_resource' do
37
+ it 'sends a delete to octopus' do
38
+ expect(octopus).to receive(:check_type).with(type)
39
+ expect(api).to receive(:delete).with("/#{type}/#{id}")
40
+ octopus.remove_resource(type, id)
41
+ end
42
+ end
43
+
44
+ context '#get_resource' do
45
+ it 'sends a get to octopus' do
46
+ expect(octopus).to receive(:check_type).with(type)
47
+ expect(api).to receive(:get).with("/#{type}/all")
48
+ octopus.get_resource(type)
49
+ end
50
+ end
51
+
52
+ context '#check_type' do
53
+ it 'raises an error unless type in list' do
54
+ expect { octopus.check_type("Invalid type") }.to raise_error NameError
55
+ end
56
+
57
+ it 'does not raise an error if type in list' do
58
+ expect { octopus.check_type(octopus.class::RESOURCE_TYPES.first) }.to_not raise_error
59
+ end
60
+ end
61
+
62
+ context '#get_resource_by_type_and_name' do
63
+ it 'returns all if no name given' do
64
+ expect(octopus).
65
+ to receive(:get_resource).
66
+ with('Environments').
67
+ and_return(environments)
68
+ expect(octopus.get_resource_by_type_and_name('Environments')).to eq(environments)
69
+ end
70
+
71
+ it 'returns one if exact name filter given' do
72
+ expect(octopus).
73
+ to receive(:get_resource).
74
+ with('Environments').
75
+ and_return(environments)
76
+ expect(octopus.get_resource_by_type_and_name('Environments', 'Foo')).to eq([environments.first])
77
+ end
78
+
79
+ it 'returns one if only part of name given' do
80
+ expect(octopus).
81
+ to receive(:get_resource).
82
+ with('Environments').
83
+ and_return(environments)
84
+ expect(octopus.get_resource_by_type_and_name('Environments', 'az')).to eq([environments.last])
85
+ end
86
+
87
+ it 'returns all that match if only part of name given' do
88
+ expect(octopus).
89
+ to receive(:get_resource).
90
+ with('Environments').
91
+ and_return(environments)
92
+ expect(octopus.get_resource_by_type_and_name('Environments', 'B')).to eq(environments[1..2])
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe TeamcityApi do
4
+ let(:api_url) { 'http://example.com' }
5
+ let(:user) { 'user' }
6
+ let(:pass) { 'pass' }
7
+
8
+ let(:teamcity) { described_class.new(api_url, user, pass) }
9
+
10
+ before do
11
+ end
12
+
13
+ it 'has a list of valid resource types' do
14
+ end
15
+
16
+ context '#create_resource' do
17
+ it 'sends a post to octopus' do
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,2 @@
1
+ require 'rspec'
2
+ require 'libraries'
metadata ADDED
@@ -0,0 +1,224 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: api_deploy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Felix Hawkins
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: require_all
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '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: :runtime
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: github_api
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
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: faraday
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
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: artifactory
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
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: logging
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
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: thin
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
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: hashie
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
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: net-ldap
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
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: pry
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: can also be run as a server
154
+ email: felix@whimsicaldoodles.com
155
+ executables: []
156
+ extensions: []
157
+ extra_rdoc_files: []
158
+ files:
159
+ - ".dockerignore"
160
+ - ".gitattributes"
161
+ - ".gitignore"
162
+ - ".vault_pass.py"
163
+ - Dockerfile
164
+ - Gemfile
165
+ - Gemfile.lock
166
+ - Jenkinsfile
167
+ - Makefile
168
+ - README.md
169
+ - Rakefile
170
+ - api_deploy.gemspec
171
+ - bin/api_deploy
172
+ - bin/apply_restrictions
173
+ - bin/bitbucket
174
+ - bin/get_all_repo_sizes
175
+ - bin/ldap
176
+ - config/defaults.json
177
+ - config/vault
178
+ - lib/api.rb
179
+ - lib/api_deploy.rb
180
+ - lib/artifactory_api.rb
181
+ - lib/bitbucket.rb
182
+ - lib/bitbucket/project.rb
183
+ - lib/bitbucket/repository.rb
184
+ - lib/config_store.rb
185
+ - lib/github.rb
186
+ - lib/ldap.rb
187
+ - lib/libraries.rb
188
+ - lib/log.rb
189
+ - lib/octopus_api.rb
190
+ - lib/teamcity_api.rb
191
+ - spec/data/defaults.json
192
+ - spec/data/overrides.json
193
+ - spec/lib/api_spec.rb
194
+ - spec/lib/artifactory_api_spec.rb
195
+ - spec/lib/config_spec.rb
196
+ - spec/lib/log_spec.rb
197
+ - spec/lib/octopus_api_spec.rb
198
+ - spec/lib/teamcity_api_spec.rb
199
+ - spec/spec_helper.rb
200
+ homepage: https://rubygems.org/gems/example
201
+ licenses:
202
+ - MIT
203
+ metadata: {}
204
+ post_install_message:
205
+ rdoc_options: []
206
+ require_paths:
207
+ - lib
208
+ required_ruby_version: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ required_rubygems_version: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - ">="
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ requirements: []
219
+ rubyforge_project:
220
+ rubygems_version: 2.6.8
221
+ signing_key:
222
+ specification_version: 4
223
+ summary: gem for yoox-nap api deployment
224
+ test_files: []