api_deploy 0.1.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.
@@ -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: []