mixlib-install 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e92952408c7ab6f65b6613a45e2debc1cecc561
4
- data.tar.gz: da6e6ae0fff21cf77a0823883f72788a95dc7434
3
+ metadata.gz: e766479dca9a2bb0dbdfc558b76d0e291580ed9e
4
+ data.tar.gz: bf3a9b004e84d76307c1bcfb7826b9166eecab47
5
5
  SHA512:
6
- metadata.gz: 210497a42f51a085c00170ad28d77bff5861fbc0c12588ac091fcd7b5268e494b97b792c08f17c1f3bd4f21784420b12e452c9e0a0861b578c13730867364a79
7
- data.tar.gz: 8a7b5fe062d3d3f842bbc5e3e031fcb293ca27df61f961d5671ec66bbc56304c6e024128cd62e4f2b398e811974d0009999c251930ba42b2b6f6ac1dc1f3e46d
6
+ metadata.gz: 6d97cf66c06b5f551ce3ea799a49544ff311b9f2aac37914926dc79761dc0aa9f9a0bdb9ec6b76a18ddabcd9b8f6ba743a17c4e04958486f2f668e9077204b09
7
+ data.tar.gz: a34a4378b3083182b156b1489abd5964cad41b5566f56219fa151136ea34385c9aa12e9200ea24181f7de63e681dcc4bb91a9aeb171ad0d993ec51f8dee0b79c
data/.travis.yml CHANGED
@@ -19,8 +19,8 @@ matrix:
19
19
  env: SUITE=ubuntu
20
20
  - rvm: 2.3
21
21
  env: SUITE=windows-server-2012r2
22
- - rvm: 2.3
23
- env: SUITE=windows-nano
22
+ # - rvm: 2.3
23
+ # env: SUITE=windows-nano
24
24
 
25
25
  before_script:
26
26
  - ci/before-script.sh
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Change Log
2
2
 
3
+ ## [3.2.0]
4
+ - Add support for partial product versioning support ("11", 12", "12.1", etc.)
5
+ - Refactor and expose `#normalize_architecture`
6
+
3
7
  ## [3.1.0]
4
8
  - Add support for Windows Nano 2016 (returns appx packages)
5
9
 
data/README.md CHANGED
@@ -16,10 +16,13 @@ Run `$ mixlib-install help` for additional commands and options.
16
16
 
17
17
  ## API Usage
18
18
 
19
- ### Get URL for specific platform and package version
19
+ ### Load mixlib-install
20
20
  ```ruby
21
21
  require 'mixlib/install'
22
+ ```
22
23
 
24
+ ### Get URL for specific platform and package version
25
+ ```ruby
23
26
  options = {
24
27
  channel: :current,
25
28
  product_name: 'chef',
@@ -51,6 +54,39 @@ artifacts.first.url
51
54
  # => => "https://packages.chef.io/files/current/chef/12.14.90/mac_os_x/10.11/chef-12.14.90-1.dmg"
52
55
  ```
53
56
 
57
+ ### Get latest artifacts for a partial version
58
+ ```ruby
59
+ options = {
60
+ channel: :current,
61
+ product_name: 'chef',
62
+ product_version: '12.14'
63
+ }
64
+
65
+ artifacts = Mixlib::Install.new(options).artifact_info
66
+ # => [#<Mixlib::Install::ArtifactInfo>]
67
+
68
+ artifacts.first.version
69
+ # => "12.14.89"
70
+ ```
71
+
72
+ ### Get latest artifact for a partial version
73
+ ```ruby
74
+ options = {
75
+ channel: :current,
76
+ product_name: 'chef',
77
+ product_version: '12',
78
+ platform: 'mac_os_x',
79
+ platform_version: '10.9',
80
+ architecture: 'x86_64'
81
+ }
82
+
83
+ artifact = Mixlib::Install.new(options).artifact_info
84
+ # => #<Mixlib::Install::ArtifactInfo>
85
+
86
+ artifact.version
87
+ # => "12.19.36"
88
+ ```
89
+
54
90
  ### Detect platform information
55
91
  ```ruby
56
92
  options = {
@@ -1,3 +1,3 @@
1
- describe package("Chef Client v12*") do
1
+ describe package("Chef Client v13*") do
2
2
  it { should be_installed }
3
3
  end
@@ -222,25 +222,6 @@ EOF
222
222
  [platform, platform_version]
223
223
  end
224
224
 
225
- #
226
- # Normalizes architecture information that we receive from omnibus.architecture
227
- #
228
- # @param [String] architecture
229
- #
230
- # @return String [architecture]
231
- def normalize_architecture(architecture)
232
- case architecture
233
- when "amd64"
234
- "x86_64"
235
- when "i86pc", "i686"
236
- "i386"
237
- when "sun4u", "sun4v"
238
- "sparc"
239
- else
240
- architecture
241
- end
242
- end
243
-
244
225
  private
245
226
 
246
227
  #
@@ -21,6 +21,7 @@ require "mixlib/install/artifact_info"
21
21
  require "mixlib/install/backend/base"
22
22
  require "mixlib/install/product"
23
23
  require "mixlib/install/util"
24
+ require "mixlib/versioning"
24
25
  require "net/http"
25
26
 
26
27
  module Mixlib
@@ -36,7 +37,7 @@ module Mixlib
36
37
  # @return [Array<ArtifactInfo>] list of artifacts for the configured
37
38
  # channel, product name, and product version.
38
39
  def available_artifacts
39
- artifacts = if options.latest_version?
40
+ artifacts = if options.latest_version? || options.partial_version?
40
41
  latest_version
41
42
  else
42
43
  artifacts_for_version(options.product_version)
@@ -89,12 +90,25 @@ EOF
89
90
 
90
91
  #
91
92
  # Get artifacts for the latest version, channel and product_name
93
+ # When a partial version is set the results will be filtered
94
+ # before return latest version.
92
95
  #
93
96
  # @return [Array<ArtifactInfo>] Array of info about found artifacts
94
97
  def latest_version
95
- # Sort by created data
96
- sorted_versions = versions.sort_by! { |b| b["created"] }.reverse!
97
- version = extract_version_from_response(sorted_versions.first)
98
+ product_versions = if options.partial_version?
99
+ v = options.product_version
100
+ partial_version = v.end_with?(".") ? v : v + "."
101
+ versions.find_all { |ver| extract_version_from_response(ver).start_with?(partial_version) }
102
+ else
103
+ versions
104
+ end
105
+
106
+ # Use mixlib versioning to parse and sort versions
107
+ ordered_versions = product_versions.sort_by do |v|
108
+ Mixlib::Versioning.parse(extract_version_from_response(v))
109
+ end.reverse
110
+
111
+ version = extract_version_from_response(ordered_versions.first)
98
112
  artifacts_for_version(version)
99
113
  end
100
114
 
@@ -193,7 +207,7 @@ EOF
193
207
  end
194
208
 
195
209
  ArtifactInfo.new(
196
- architecture: normalize_architecture(artifact_map["omnibus.architecture"]),
210
+ architecture: Util.normalize_architecture(artifact_map["omnibus.architecture"]),
197
211
  license: artifact_map["omnibus.license"],
198
212
  license_content: license_content,
199
213
  md5: artifact_map["omnibus.md5"],
@@ -57,8 +57,14 @@ module Mixlib
57
57
  project=#{options.product_name}
58
58
  version=#{options.product_version}
59
59
  channel=#{options.channel}
60
+ #{install_command_vars}
60
61
  EOS
61
62
  end
63
+
64
+ def install_command_vars
65
+ return if options.install_command_options.nil?
66
+ options.install_command_options.map { |key, value| "#{key}='#{value}'" }.join("\n")
67
+ end
62
68
  end
63
69
  end
64
70
  end
@@ -71,8 +71,13 @@ module Mixlib
71
71
  cmd << " -version #{options.product_version}"
72
72
  cmd << " -channel #{options.channel}"
73
73
  cmd << " -architecture #{options.architecture}" if options.architecture
74
+ cmd << install_command_params if options.install_command_options
74
75
  cmd << "\n"
75
76
  end
77
+
78
+ def install_command_params
79
+ options.install_command_options.map { |key, value| " -#{key} '#{value}'" }.join
80
+ end
76
81
  end
77
82
  end
78
83
  end
@@ -45,9 +45,14 @@ function Install-Project {
45
45
  $architecture = 'auto',
46
46
  [validateset('auto', 'service', 'task')]
47
47
  [string]
48
- $daemon = 'auto'
48
+ $daemon = 'auto',
49
+ [string]
50
+ $http_proxy
49
51
  )
50
52
 
53
+ # Set http_proxy as env var
54
+ $env:http_proxy = $http_proxy
55
+
51
56
  $package_metadata = Get-ProjectMetadata -project $project -channel $channel -version $version -prerelease:$prerelease -nightlies:$nightlies -architecture $architecture
52
57
 
53
58
  if (-not [string]::IsNullOrEmpty($filename)) {
@@ -60,6 +60,7 @@ module Mixlib
60
60
  :platform_version_compatibility_mode,
61
61
  :include_metadata,
62
62
  :user_agent_headers,
63
+ :install_command_options,
63
64
  ]
64
65
 
65
66
  SUPPORTED_WINDOWS_DESKTOP_VERSIONS = %w{7 8 8.1 10}
@@ -70,7 +71,7 @@ module Mixlib
70
71
  @options = options
71
72
  @errors = []
72
73
 
73
- # Store original platform version in cases where we must remap it
74
+ # Store original options in cases where we must remap
74
75
  @original_platform_version = options[:platform_version]
75
76
 
76
77
  resolve_platform_version_compatibility_mode!
@@ -110,6 +111,10 @@ module Mixlib
110
111
  product_version.to_sym == :latest
111
112
  end
112
113
 
114
+ def partial_version?
115
+ !latest_version? && !Mixlib::Versioning.parse(product_version)
116
+ end
117
+
113
118
  def include_metadata?
114
119
  include_metadata.to_s == "true"
115
120
  end
@@ -148,6 +148,25 @@ module Mixlib
148
148
  version
149
149
  end
150
150
  end
151
+
152
+ #
153
+ # Normalizes architecture information
154
+ #
155
+ # @param [String] architecture
156
+ #
157
+ # @return String [architecture]
158
+ def normalize_architecture(architecture)
159
+ case architecture
160
+ when "amd64"
161
+ "x86_64"
162
+ when "i86pc", "i686"
163
+ "i386"
164
+ when "sun4u", "sun4v"
165
+ "sparc"
166
+ else
167
+ architecture
168
+ end
169
+ end
151
170
  end
152
171
  end
153
172
  end
@@ -1,5 +1,5 @@
1
1
  module Mixlib
2
2
  class Install
3
- VERSION = "3.1.0"
3
+ VERSION = "3.2.0"
4
4
  end
5
5
  end
@@ -30,5 +30,5 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency "rspec"
31
31
  spec.add_development_dependency "simplecov"
32
32
  spec.add_development_dependency "vcr"
33
- spec.add_development_dependency "webmock", "~> 1.0"
33
+ spec.add_development_dependency "webmock"
34
34
  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: 3.1.0
4
+ version: 3.2.0
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: 2017-03-24 00:00:00.000000000 Z
12
+ date: 2017-04-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mixlib-shellout
@@ -183,16 +183,16 @@ dependencies:
183
183
  name: webmock
184
184
  requirement: !ruby/object:Gem::Requirement
185
185
  requirements:
186
- - - "~>"
186
+ - - ">="
187
187
  - !ruby/object:Gem::Version
188
- version: '1.0'
188
+ version: '0'
189
189
  type: :development
190
190
  prerelease: false
191
191
  version_requirements: !ruby/object:Gem::Requirement
192
192
  requirements:
193
- - - "~>"
193
+ - - ">="
194
194
  - !ruby/object:Gem::Version
195
- version: '1.0'
195
+ version: '0'
196
196
  description:
197
197
  email:
198
198
  - thom@chef.io
@@ -305,7 +305,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
305
305
  version: '0'
306
306
  requirements: []
307
307
  rubyforge_project:
308
- rubygems_version: 2.6.10
308
+ rubygems_version: 2.5.1
309
309
  signing_key:
310
310
  specification_version: 4
311
311
  summary: A library for interacting with Chef Software Inc's software distribution