mixlib-install 1.0.2 → 1.0.3
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/CHANGELOG.md +8 -0
- data/README.md +4 -7
- data/Rakefile +1 -13
- data/lib/mixlib/install/backend.rb +0 -1
- data/lib/mixlib/install/backend/artifactory.rb +8 -6
- data/lib/mixlib/install/backend/bintray.rb +45 -12
- data/lib/mixlib/install/options.rb +0 -11
- data/lib/mixlib/install/version.rb +1 -1
- data/mixlib-install.gemspec +2 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fa0731a332dd953d20aa43e53480e804409aa0f
|
4
|
+
data.tar.gz: 6df34bf9b664cda250fd3c312980630a4e95c386
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f6455a5e05a9cd10cdf54600bc8fd2e7b95599cb64f4ee8021ffb53b721dc83d3d94bafae43c1d5dc9f234c3a6bd7e84b2b9d791daaaf4999e22fb24019340b
|
7
|
+
data.tar.gz: 72542b720536309e129357a835931e88812d3d973ab98fd6e2b38594f898931b37c71bb1713f40cd63c0906d872f05df3a705779ee7ca753beb6554eb841d82c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## [1.0.3]
|
4
|
+
### Changed
|
5
|
+
- Artifactory credentials are no longer required. A designated account has been hard-coded as default.
|
6
|
+
- Exception is raised if Bintray can not find the version for channel/product.
|
7
|
+
|
8
|
+
### Fixed
|
9
|
+
- freebsd 9 artifacts return chef.bintray.com based urls
|
10
|
+
|
3
11
|
## [1.0.2]
|
4
12
|
### Added
|
5
13
|
- Use 32 bit windows artifacts for 64-bit, when there is no 64-bit native artifact.
|
data/README.md
CHANGED
@@ -51,14 +51,11 @@ artifact.platform_version # => "10.10"
|
|
51
51
|
|
52
52
|
## Unstable channel
|
53
53
|
The `:unstable` channel is currently only available when connected to Chef's internal network.
|
54
|
-
Configure Artifactory access by setting the following environment variables:
|
55
|
-
```
|
56
|
-
export ARTIFACTORY_USERNAME='username'
|
57
|
-
export ARTIFACTORY_PASSWORD='password'
|
58
|
-
```
|
59
54
|
|
60
|
-
|
61
|
-
|
55
|
+
## Development
|
56
|
+
Since mixlib-install needs to interact with Bintray and Artifactory and since Artifactory instances are only available in Chef's network, this project uses [vcr](https://github.com/vcr/vcr).
|
57
|
+
|
58
|
+
VCR is a tool that helps cache and replay http responses. When these responses change or when you add more tests you might need to update cached responses. Check out [spec_helper.rb](https://github.com/chef/mixlib-install/blob/master/spec/spec_helper.rb) for instructions on how to do this.
|
62
59
|
|
63
60
|
## Contributing
|
64
61
|
|
data/Rakefile
CHANGED
@@ -19,19 +19,7 @@ rescue LoadError
|
|
19
19
|
end
|
20
20
|
|
21
21
|
desc "Run all tests"
|
22
|
-
task test: [:style, :spec
|
23
|
-
|
24
|
-
desc "Run unstable channel tests"
|
25
|
-
task "unstable" do
|
26
|
-
if ENV["ARTIFACTORY_USERNAME"].nil? || ENV["ARTIFACTORY_PASSWORD"].nil?
|
27
|
-
abort <<-EOS.gsub(/^\s+/, "")
|
28
|
-
Must set ARTIFACTORY_USERNAME and ARTIFACTORY_PASSWORD environment
|
29
|
-
variables to run unstable tests
|
30
|
-
EOS
|
31
|
-
end
|
32
|
-
Rake::Task["style"].invoke
|
33
|
-
system("bundle exec rspec -t unstable")
|
34
|
-
end
|
22
|
+
task test: [:style, :spec]
|
35
23
|
|
36
24
|
desc "Run tests for Travis CI"
|
37
25
|
task ci: [:style, :spec]
|
@@ -32,6 +32,11 @@ module Mixlib
|
|
32
32
|
|
33
33
|
ENDPOINT = "http://artifactory.chef.co".freeze
|
34
34
|
|
35
|
+
# These credentials are read-only credentials in Chef's artifactory
|
36
|
+
# server which is only available in Chef's internal network.
|
37
|
+
ARTIFACTORY_USERNAME = "mixlib-install".freeze
|
38
|
+
ARTIFACTORY_PASSWORD = "%mKPtzbT1JH1wm333kjkkjs39oeuFLgZ8vNoOdLBPd)TZAJsURs9w0HloWR$l6h".freeze
|
39
|
+
|
35
40
|
# Create filtered list of artifacts
|
36
41
|
#
|
37
42
|
# @return [Array<ArtifactInfo>] list of artifacts for the configured
|
@@ -174,8 +179,8 @@ items.find(
|
|
174
179
|
def client
|
175
180
|
@client ||= ::Artifactory::Client.new(
|
176
181
|
endpoint: endpoint,
|
177
|
-
username:
|
178
|
-
password:
|
182
|
+
username: ARTIFACTORY_USERNAME,
|
183
|
+
password: ARTIFACTORY_PASSWORD
|
179
184
|
)
|
180
185
|
end
|
181
186
|
|
@@ -193,10 +198,7 @@ the endpoint is correct and there is an open connection to Chef's private networ
|
|
193
198
|
MSG
|
194
199
|
rescue ::Artifactory::Error::HTTPError => e
|
195
200
|
if e.code == 401 && e.message =~ /Bad credentials/
|
196
|
-
raise AuthenticationError,
|
197
|
-
Artifactory server denied credentials. Verify ARTIFACTORY_USERNAME and
|
198
|
-
ARTIFACTORY_PASSWORD environment variables are configured properly.
|
199
|
-
MSG
|
201
|
+
raise AuthenticationError, "Artifactory server denied credentials."
|
200
202
|
else
|
201
203
|
raise e
|
202
204
|
end
|
@@ -38,15 +38,14 @@ module Mixlib
|
|
38
38
|
class Backend
|
39
39
|
class Bintray < Base
|
40
40
|
class UnknownArchitecture < StandardError; end
|
41
|
-
|
42
|
-
ENDPOINT = "https://bintray.com/api/v1/".freeze
|
43
|
-
|
41
|
+
class VersionNotFound < StandardError; end
|
44
42
|
# Bintray credentials for api read access. These are here intentionally.
|
45
43
|
BINTRAY_USERNAME = "mixlib-install@chef".freeze
|
46
|
-
|
47
44
|
BINTRAY_PASSWORD = "a83d3a2ffad50eb9a2230f281a2e19b70fe0db2d".freeze
|
48
45
|
|
46
|
+
ENDPOINT = "https://bintray.com/api/v1/".freeze
|
49
47
|
DOWNLOAD_URL_ENDPOINT = "https://packages.chef.io".freeze
|
48
|
+
COMPAT_DOWNLOAD_URL_ENDPOINT = "http://chef.bintray.com".freeze
|
50
49
|
|
51
50
|
def endpoint
|
52
51
|
@endpoint ||= ENV.fetch("BINTRAY_ENDPOINT", ENDPOINT)
|
@@ -114,15 +113,25 @@ module Mixlib
|
|
114
113
|
#
|
115
114
|
def bintray_artifacts
|
116
115
|
version = options.latest_version? ? latest_version : options.product_version
|
117
|
-
|
116
|
+
begin
|
117
|
+
results = bintray_get("#{options.channel}/#{options.product_name}/versions/#{version}/files")
|
118
|
+
rescue Net::HTTPServerException => e
|
119
|
+
if e.message =~ /404 "Not Found"/
|
120
|
+
raise VersionNotFound,
|
121
|
+
"Specified version (#{version}) not found for #{options.product_name} in #{options.channel} channel."
|
122
|
+
else
|
123
|
+
raise
|
124
|
+
end
|
125
|
+
end
|
118
126
|
|
119
127
|
#
|
120
|
-
# Delete
|
121
|
-
#
|
128
|
+
# Delete files that we don't want as part of the artifact info array
|
129
|
+
# Windows: .asc files
|
130
|
+
# MAC OS _X: .pkg files which are uploaded along with dmg files for
|
122
131
|
# some chef versions.
|
123
132
|
#
|
124
|
-
|
125
|
-
|
133
|
+
%w{ asc pkg }.each do |ext|
|
134
|
+
results.reject! { |r| r["name"].end_with?(".#{ext}") }
|
126
135
|
end
|
127
136
|
|
128
137
|
# Convert results to build records
|
@@ -182,8 +191,6 @@ module Mixlib
|
|
182
191
|
def create_artifact(artifact_map)
|
183
192
|
platform_info = parse_platform_info(artifact_map)
|
184
193
|
|
185
|
-
url = "#{DOWNLOAD_URL_ENDPOINT}/#{options.channel}/#{artifact_map["path"]}"
|
186
|
-
|
187
194
|
ArtifactInfo.new(
|
188
195
|
sha1: artifact_map["sha1"],
|
189
196
|
sha256: artifact_map["sha256"],
|
@@ -191,10 +198,36 @@ module Mixlib
|
|
191
198
|
platform: platform_info[:platform],
|
192
199
|
platform_version: platform_info[:platform_version],
|
193
200
|
architecture: platform_info[:architecture],
|
194
|
-
url: url
|
201
|
+
url: url(artifact_map)
|
195
202
|
)
|
196
203
|
end
|
197
204
|
|
205
|
+
#
|
206
|
+
# Creates the URL for the artifact.
|
207
|
+
#
|
208
|
+
# For some older platform & platform_version combinations we need to
|
209
|
+
# use COMPAT_DOWNLOAD_URL_ENDPOINT since these versions have an
|
210
|
+
# OpenSSL version that can not verify the DOWNLOAD_URL_ENDPOINT
|
211
|
+
# based urls
|
212
|
+
#
|
213
|
+
# @param artifact_map
|
214
|
+
# see #create_artifact for details.
|
215
|
+
#
|
216
|
+
# @return [String] url for the artifact
|
217
|
+
#
|
218
|
+
def url(artifact_map)
|
219
|
+
platform_info = parse_platform_info(artifact_map)
|
220
|
+
|
221
|
+
base_url = case "#{platform_info[:platform]}-#{platform_info[:platform_version]}"
|
222
|
+
when "freebsd-9"
|
223
|
+
COMPAT_DOWNLOAD_URL_ENDPOINT
|
224
|
+
else
|
225
|
+
DOWNLOAD_URL_ENDPOINT
|
226
|
+
end
|
227
|
+
|
228
|
+
"#{base_url}/#{options.channel}/#{artifact_map["path"]}"
|
229
|
+
end
|
230
|
+
|
198
231
|
#
|
199
232
|
# Parses platform info
|
200
233
|
#
|
@@ -23,7 +23,6 @@ module Mixlib
|
|
23
23
|
class Install
|
24
24
|
class Options
|
25
25
|
class InvalidOptions < ArgumentError; end
|
26
|
-
class ArtifactoryCredentialsNotFound < StandardError; end
|
27
26
|
|
28
27
|
attr_reader :options
|
29
28
|
|
@@ -50,7 +49,6 @@ module Mixlib
|
|
50
49
|
|
51
50
|
def validate!
|
52
51
|
validate_options!
|
53
|
-
validate_unstable_channel! if for_artifactory?
|
54
52
|
end
|
55
53
|
|
56
54
|
def validate_options!
|
@@ -139,15 +137,6 @@ Must be one of: #{SUPPORTED_SHELL_TYPES.join(", ")}
|
|
139
137
|
end
|
140
138
|
end
|
141
139
|
|
142
|
-
def validate_unstable_channel!
|
143
|
-
if ENV["ARTIFACTORY_USERNAME"].nil? || ENV["ARTIFACTORY_PASSWORD"].nil?
|
144
|
-
raise ArtifactoryCredentialsNotFound,
|
145
|
-
<<-EOS
|
146
|
-
Must set ARTIFACTORY_USERNAME and ARTIFACTORY_PASSWORD environment variables
|
147
|
-
when using the unstable channel.
|
148
|
-
EOS
|
149
|
-
end
|
150
|
-
end
|
151
140
|
end
|
152
141
|
end
|
153
142
|
end
|
data/mixlib-install.gemspec
CHANGED
@@ -25,5 +25,6 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
26
|
spec.add_development_dependency "rspec", "~> 3.3"
|
27
27
|
spec.add_development_dependency "pry"
|
28
|
-
spec.add_development_dependency "
|
28
|
+
spec.add_development_dependency "vcr"
|
29
|
+
spec.add_development_dependency "webmock"
|
29
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mixlib-install
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thom May
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-04-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: artifactory
|
@@ -110,7 +110,21 @@ dependencies:
|
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
113
|
+
name: vcr
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: webmock
|
114
128
|
requirement: !ruby/object:Gem::Requirement
|
115
129
|
requirements:
|
116
130
|
- - ">="
|