omnibus 5.2.0 → 5.3.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: d909e83257599b77c57d11ad3f4cad644286d005
4
- data.tar.gz: ff63967a1b6a5189f29bb6524e73af08ecfc2d29
3
+ metadata.gz: a17a0e151fcd48e38827a9504daafcbdeb58abe5
4
+ data.tar.gz: 599d4ab2fb191028721c42fb912d836a05ef6e69
5
5
  SHA512:
6
- metadata.gz: 5c02188f92090b922772ffc0c9c50a92ae32224a90ae36d0c5b3fe3bf79c56e3e32043ef797ade533ac783700665ea8b8874bfea24954c8db5190a21321565ef
7
- data.tar.gz: 67be7899e3af5eff14c57d54c2d414165daa3b4811a65e8f4491a355a2725274f6522ca6daa4a7b8a3df1251657659e71b1ed8d664afecdd6e7561522ff16726
6
+ metadata.gz: 829c377378e984fabdbc83f3e23e7f092a25c8dda2823391fa7c4198a873529c8f8750367abeca0b908ad9c3b6073633a4308aa90814cb0e114fe6a2d6a0b39f
7
+ data.tar.gz: 6262ddf08f75fc3d49735e2f223a63c0eced1bf6050ab912f9a79113589c4dfd69ccc30abcc97f4c5caca60609435dabd861d09f0a6b88dd4ae61b586de77c32
@@ -0,0 +1,26 @@
1
+ ### Description
2
+
3
+ Briefly describe the issue
4
+
5
+ ### Omnibus Version
6
+
7
+ Tell us which version of Omnibus you are using
8
+
9
+ ### Platform Version
10
+
11
+ Tell us which Operating System distribution, version and architecture the Omnibus build is being executed on.
12
+
13
+ ### Replication Case
14
+
15
+ Tell us what steps to take to replicate your problem. See [How to create a Minimal, Complete, and Verifiable example](https://stackoverflow.com/help/mcve)
16
+ for information on how to create a good replication case.
17
+
18
+ ### Build Output
19
+
20
+ The relevant output of the Omnibus build or a link to a gist of the entire build, if there is one.
21
+
22
+ The verbose build output (`omnibus build <PROJECT> -l internal`) may be useful, but please link to a gist, or truncate it.
23
+
24
+ --------------------------------------------------
25
+ /cc @chef/omnibus-maintainers <- This ensures the Omnibus Maintainers team are notified to review this PR.
26
+
@@ -0,0 +1,6 @@
1
+ ### Description
2
+
3
+ Briefly describe the new feature or fix here
4
+
5
+ --------------------------------------------------
6
+ /cc @chef/omnibus-maintainers <- This ensures the Omnibus Maintainers team are notified to review this PR.
@@ -1,3 +1,4 @@
1
+ sudo: false
1
2
  rvm:
2
3
  - 2.0.0
3
4
  - 2.1
@@ -8,7 +9,12 @@ branches:
8
9
  - 2.0-stable
9
10
  - 3.0-stable
10
11
  - master
11
- before_install: gem install bundler
12
+ before_install:
13
+ - gem update --system
14
+ - gem install bundler
15
+ before_script:
16
+ - git config --global user.email "clouseau@chef.io"
17
+ - git config --global user.name "Pink Panther"
12
18
  script: bundle exec rake travis:ci
13
19
  notifications:
14
20
  slack:
@@ -1,6 +1,30 @@
1
1
  Omnibus CHANGELOG
2
2
  =================
3
3
 
4
+ v5.3.0 (March 25, 2016)
5
+ -----------------------
6
+ ### New Features
7
+
8
+ - Get correct architecture name for Debian environments from `dpkg` (#646)
9
+ - Update fauxhai to latest (#652)
10
+ - Use project.license in deb and rpm packagers if available (#653)
11
+ - Whitelist additional Solaris11 libraries (#650)
12
+ - Use gcc 4.9 on freebsd (#649)
13
+ - Per-Platform manifest generation (#645)
14
+ - Support omnibus manifest arguments: `omnibus manifest --os=OS --platform-family=FAMILY --platform=PLATFORM --platform-version=VERSION`
15
+ - Can be used to generate manifests for other platforms than the one you are on, allowing a multi-platform build to be quickly set up.
16
+ - Affects chef-sugar's `windows?`, `solaris?` and similar functions, which are used by software in `omnibus-software`
17
+ - Performance: Ignore non-libraries in health checks (#642)
18
+ - Add `github` source (#643)
19
+ - Add `suse` support (#647)
20
+ - Exclude files with whitespace names from AIX packages (#641)
21
+ - Fix compilation problems on Windows (#640)
22
+ - Disable `sse` to avoid compilation segfaults
23
+ - Don't change newlines when `git pull`ing
24
+ - Warn when software licenses are missing for software components (#638)
25
+ - Add Chef MLSA to the list of recognized licenses (#639)
26
+ - Download remote license files into the LICENSES directory (#637)
27
+
4
28
  v5.2.0 (March 15, 2016)
5
29
  -----------------------
6
30
  ### New Features
@@ -1,8 +1,8 @@
1
1
  # Maintainers
2
2
 
3
- This file lists how the Omnibus project is maintained. When making changes
4
- to the system, this file tells you who needs to review your patch - you need a
5
- simple majority of maintainers for the relevant subsystems to provide a :+1: on
3
+ This file lists how the `omnibus` project is maintained.
4
+
5
+ When making changes to the system, you need two maintainers to provide a :+1: on
6
6
  your pull request. Additionally, you need to not receive a veto from a
7
7
  Lieutenant or the Project Lead.
8
8
 
@@ -19,10 +19,10 @@ project lead.
19
19
 
20
20
  * [Daniel DeLeo](https://github.com/danielsdeleo)
21
21
  * [Jay Mundrawala](https://github.com/jaym)
22
+ * [Kartik Null Cating-Subramanian](https://github.com/ksubrama)
22
23
  * [Lamont Granquist](https://github.com/lamont-granquist)
23
24
  * [Scott Hain](https://github.com/scotthain)
24
25
  * [Seth Vargo](http://github.com/sethvargo)
25
26
  * [Steven Danna](https://github.com/stevendanna)
26
- * [Yvonne Lam](http://github.com/yzl)
27
27
  * [Thom May](https://github.com/thommay)
28
- * [Kartik Null Cating-Subramanian](https://github.com/ksubrama)
28
+ * [Yvonne Lam](http://github.com/yzl)
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Build Status](http://img.shields.io/travis/chef/omnibus.svg)][travis]
5
5
 
6
6
  [gem]: https://rubygems.org/gems/omnibus
7
- [travis]: http://travis-ci.org/chef/omnibus
7
+ [travis]: https://travis-ci.org/chef/omnibus
8
8
 
9
9
  Easily create full-stack installers for your project across a variety of platforms.
10
10
 
@@ -341,7 +341,7 @@ use_git_caching false
341
341
  License
342
342
  -------
343
343
  ```text
344
- Copyright 2012-2014 Chef Software, Inc.
344
+ Copyright 2012-2016 Chef Software, Inc.
345
345
 
346
346
  Licensed under the Apache License, Version 2.0 (the "License");
347
347
  you may not use this file except in compliance with the License.
@@ -25,6 +25,8 @@ install:
25
25
  - cp C:\Ruby21%ruby_version:~3%\Devkit\mingw\bin\bsdtar.exe C:\Ruby21%ruby_version:~3%\Devkit\mingw\bin\tar.exe
26
26
  - appveyor DownloadFile http://curl.haxx.se/ca/cacert.pem -FileName C:\cacert.pem
27
27
  - set SSL_CERT_FILE=C:\cacert.pem
28
+ - git config --global user.email "clouseau@chef.io"
29
+ - git config --global user.name "Pink Panther"
28
30
 
29
31
  build_script:
30
32
  - bundle install
@@ -1,8 +1,42 @@
1
1
  Feature: omnibus build
2
+ Background:
3
+ Given I have an omnibus project named "hamlet"
4
+
2
5
  Scenario: When the project does not exist
3
- * I have an omnibus project named "hamlet"
4
- * I run `omnibus build bacon`
5
- * the output should contain:
6
- """
7
- I could not find a project named `bacon' in any of the project locations:
8
- """
6
+ When I run `omnibus build bacon`
7
+
8
+ Then the output should contain:
9
+ """
10
+ I could not find a project named `bacon' in any of the project locations:
11
+ """
12
+ And the exit status should not be 0
13
+
14
+ # These scenarios don't work on appveyor due to no heat.exe/candle.exe/light.exe
15
+ # Scenario: When the project has no software definitions
16
+ # When I run `omnibus build hamlet`
17
+ #
18
+ # Then it should pass with "[Project: hamlet] I | Building version manifest"
19
+ # And the file "output/version-manifest.json" should exist
20
+ # And the file "output/version-manifest.txt" should exist
21
+ # And the file "output/LICENSE" should exist
22
+ # And the directory "output/LICENSES" should exist
23
+ #
24
+ # Scenario: When the project has a software definition
25
+ # Given a file "config/software/ophelia.rb" with:
26
+ # """
27
+ # name "ophelia"
28
+ # default_version "1.0.0"
29
+ # build do
30
+ # command "echo true > #{install_dir}/blah.txt"
31
+ # end
32
+ # """
33
+ # And I append to "config/projects/hamlet.rb" with "dependency 'ophelia'"
34
+ #
35
+ # When I run `omnibus build hamlet`
36
+ #
37
+ # Then it should pass with "[Builder: ophelia] I | $ echo true"
38
+ # And the file "output/blah.txt" should contain "true"
39
+ # And the file "output/version-manifest.json" should exist
40
+ # And the file "output/version-manifest.txt" should exist
41
+ # And the file "output/LICENSE" should exist
42
+ # And the directory "output/LICENSES" should exist
@@ -10,12 +10,12 @@ Feature: omnibus clean
10
10
  Scenario: When the --purge option is given
11
11
  * I have an omnibus project named "hamlet"
12
12
  * I successfully run `omnibus clean hamlet --purge`
13
- * the output should contain "remove local/build/hamlet"
13
+ * the output should contain "remove output"
14
14
 
15
15
  Scenario: When no options are given
16
16
  * I have an omnibus project named "hamlet"
17
17
  * I successfully run `omnibus clean hamlet`
18
18
  * the output should not contain:
19
19
  """
20
- remove local/build/hamlet
20
+ remove output
21
21
  """
@@ -0,0 +1,131 @@
1
+ Feature: omnibus manifest
2
+ Background:
3
+ Given I have an omnibus project named "hamlet"
4
+
5
+ Scenario: When the project does not exist
6
+ When I run `omnibus manifest bacon`
7
+
8
+ Then the output should contain:
9
+ """
10
+ I could not find a project named `bacon' in any of the project locations:
11
+ """
12
+ And the exit status should not be 0
13
+
14
+ Scenario: When the project has no software definitions
15
+ When I run `omnibus manifest hamlet`
16
+
17
+ Then it should pass with "[Project: hamlet] I | Building version manifest"
18
+ And the output should contain:
19
+ """
20
+ "software": {
21
+ },
22
+ """
23
+
24
+ Scenario: When the project has a software definition
25
+ Given a file "config/software/ophelia.rb" with:
26
+ """
27
+ name "ophelia"
28
+ default_version "1.0.0"
29
+ build do
30
+ command "echo true > #{install_dir}/blah.txt"
31
+ end
32
+ """
33
+ And I append to "config/projects/hamlet.rb" with "dependency 'ophelia'"
34
+
35
+ When I run `omnibus manifest hamlet`
36
+
37
+ Then it should pass with "[Project: hamlet] I | Building version manifest"
38
+ And the output should contain:
39
+ """
40
+ "software": {
41
+ "ophelia": {
42
+ "locked_version": "1.0.0",
43
+ "locked_source": null,
44
+ "source_type": "project_local",
45
+ "described_version": "1.0.0",
46
+ "license": "Unspecified"
47
+ }
48
+ },
49
+ """
50
+
51
+ Scenario: When the project has a software definition
52
+ Given a file "config/software/ophelia.rb" with:
53
+ """
54
+ name "ophelia"
55
+ default_version "1.0.0"
56
+ build do
57
+ command "echo true > #{install_dir}/blah.txt"
58
+ end
59
+ """
60
+ And I append to "config/projects/hamlet.rb" with "dependency 'ophelia'"
61
+
62
+ When I run `omnibus manifest hamlet`
63
+
64
+ Then it should pass with "[Project: hamlet] I | Building version manifest"
65
+ And the output should contain:
66
+ """
67
+ "software": {
68
+ "ophelia": {
69
+ "locked_version": "1.0.0",
70
+ "locked_source": null,
71
+ "source_type": "project_local",
72
+ "described_version": "1.0.0",
73
+ "license": "Unspecified"
74
+ }
75
+ },
76
+ """
77
+ And the exit status should be 0
78
+
79
+ Scenario: When the project has a software definition whose version depends on the OS
80
+ Given a file "config/software/ophelia.rb" with:
81
+ """
82
+ name "ophelia"
83
+ default_version (windows? ? "2.0.0" : "1.0.0")
84
+ build do
85
+ command "echo true > #{install_dir}/blah.txt"
86
+ end
87
+ """
88
+ And I append to "config/projects/hamlet.rb" with "dependency 'ophelia'"
89
+
90
+ When I run `omnibus manifest hamlet --os=linux --platform_family=debian --platform=ubuntu --platform_version=14.04`
91
+
92
+ Then it should pass with "[Project: hamlet] I | Building version manifest"
93
+ And the output should contain:
94
+ """
95
+ "software": {
96
+ "ophelia": {
97
+ "locked_version": "1.0.0",
98
+ "locked_source": null,
99
+ "source_type": "project_local",
100
+ "described_version": "1.0.0",
101
+ "license": "Unspecified"
102
+ }
103
+ },
104
+ """
105
+
106
+ Scenario: When the project has a software definition whose version depends on the OS
107
+ Given a file "config/software/ophelia.rb" with:
108
+ """
109
+ name "ophelia"
110
+ default_version (windows? ? "2.0.0" : "1.0.0")
111
+ build do
112
+ command "echo true > #{install_dir}/blah.txt"
113
+ end
114
+ """
115
+ And I append to "config/projects/hamlet.rb" with "dependency 'ophelia'"
116
+
117
+ When I run `omnibus manifest hamlet --os=windows --platform_family=windows --platform=windows --platform_version=2012r2`
118
+
119
+ Then it should pass with "[Project: hamlet] I | Building version manifest"
120
+ And the output should contain:
121
+ """
122
+ "software": {
123
+ "ophelia": {
124
+ "locked_version": "2.0.0",
125
+ "locked_source": null,
126
+ "source_type": "project_local",
127
+ "described_version": "2.0.0",
128
+ "license": "Unspecified"
129
+ }
130
+ },
131
+ """
@@ -4,30 +4,46 @@ Given(/^I have an omnibus project named "(.+)"$/) do |name|
4
4
  create_directory(name)
5
5
  cd(name)
6
6
 
7
+ # Build target dir must be created
8
+ abs_path = expand_path(".")
9
+
10
+ # Single top level output dir
11
+ create_directory("output")
12
+
7
13
  write_file("config/projects/#{name}.rb", <<-EOH.gsub(/^ {4}/, ''))
8
14
  name '#{name}'
9
15
  maintainer 'Mrs. Maintainer'
10
16
  homepage 'https://example.com'
11
- install_dir './local/build/#{name}'
17
+ install_dir "#{abs_path}/output"
12
18
 
13
19
  build_version '1.0.0'
14
20
 
15
21
  exclude '\.git*'
16
22
  exclude 'bundler\/git'
23
+
24
+ # This is necessary for Windows to pass.
25
+ package :msi do
26
+ upgrade_code "102FDF98-B9BF-4CE1-A716-2AB9CBCDA403"
27
+ end
17
28
  EOH
18
29
 
19
30
  write_file('omnibus.rb', <<-EOH.gsub(/^ {4}/, ''))
20
31
  # Build configuration
21
32
  append_timestamp false
22
- cache_dir './local/omnibus/cache'
23
- git_cache_dir './local/omnibus/cache/git_cache'
24
- source_dir './local/omnibus/src'
25
- build_dir './local/omnibus/build'
26
- package_dir './local/omnibus/pkg'
27
- package_tmp './local/omnibus/pkg-tmp'
33
+ cache_dir '#{abs_path}/local/omnibus/cache'
34
+ git_cache_dir '#{abs_path}/local/omnibus/cache/git_cache'
35
+ source_dir '#{abs_path}/local/omnibus/src'
36
+ build_dir '#{abs_path}/local/omnibus/build'
37
+ package_dir '#{abs_path}/local/omnibus/pkg'
38
+ package_tmp '#{abs_path}/local/omnibus/pkg-tmp'
28
39
  EOH
29
40
  end
30
41
 
42
+ Given(/^I debug$/) do
43
+ require 'pry'
44
+ binding.pry
45
+ end
46
+
31
47
  Given(/^I have a platform mappings file named "(.+)"$/) do |name|
32
48
  write_file(name, <<-EOH.gsub(/^ {4}/, ''))
33
49
  {
@@ -112,6 +112,9 @@ module Omnibus
112
112
  end
113
113
 
114
114
  Config.reset!
115
+ # Clear caches on Project and Software
116
+ Project.reset!
117
+ Software.reset!
115
118
  end
116
119
 
117
120
  #
@@ -99,8 +99,28 @@ module Omnibus
99
99
  #
100
100
  # $ omnibus manifest PROJECT
101
101
  #
102
+ method_option :os,
103
+ desc: "An os name in Ohai form. Defaults to the current os.",
104
+ type: :string
105
+ method_option :platform_family,
106
+ desc: "A platform family string in Ohai form. Defaults to the current platform_family.",
107
+ type: :string
108
+ method_option :platform,
109
+ desc: "A platform string in Ohai form. Defaults to the current platform.",
110
+ type: :string
111
+ method_option :platform_version,
112
+ desc: "A platform version string in Ohai form. Defaults to the current platform.",
113
+ type: :string
114
+ method_option :architecture,
115
+ desc: "The target architecture: x86, x64, powerpc. Defaults to the current architecture."
102
116
  desc 'manifest PROJECT', 'Print a manifest for the given Omnibus project'
103
117
  def manifest(name)
118
+ # Override ohai information
119
+ Ohai['os'] = @options[:os] if @options[:os]
120
+ Ohai['platform_family'] = @options[:platform_family] if @options[:platform_family]
121
+ Ohai['platform'] = @options[:platform] if @options[:platform]
122
+ Ohai['platform_version'] = @options[:platform_version] if @options[:platform_version]
123
+ Ohai['kernel']['machine'] = @options[:architecture] if @options[:architecture]
104
124
  puts JSON.pretty_generate(Project.load(name).built_manifest.to_hash)
105
125
  end
106
126
 
@@ -0,0 +1,137 @@
1
+ #
2
+ # Copyright 2015 Chef Software, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'open-uri'
18
+ require 'ruby-progressbar'
19
+
20
+ module Omnibus
21
+ module DownloadHelpers
22
+ def self.included(base)
23
+ base.send(:include, InstanceMethods)
24
+ end
25
+
26
+ module InstanceMethods
27
+ private
28
+ #
29
+ # Downloads a from a given url to a given path using Ruby's
30
+ # +OpenURI+ implementation.
31
+ #
32
+ # @param [String] from_url
33
+ # @param [String] to_path
34
+ # @param [Hash] options
35
+ # +options+ compatible with Ruby's +OpenURI+ implementation.
36
+ # You can also use special option +enable_progress_bar+ which will
37
+ # display a progress bar during download.
38
+ #
39
+ # @raise [SocketError]
40
+ # @raise [Errno::ECONNREFUSED]
41
+ # @raise [Errno::ECONNRESET]
42
+ # @raise [Errno::ENETUNREACH]
43
+ # @raise [Timeout::Error]
44
+ # @raise [OpenURI::HTTPError]
45
+ #
46
+ # @return [void]
47
+ #
48
+ def download_file!(from_url, to_path, download_options = {})
49
+ options = download_options.dup
50
+
51
+ # :enable_progress_bar is a special option we handle.
52
+ # by default we enable the progress bar.
53
+ enable_progress_bar = options.delete(:enable_progress_bar)
54
+ enable_progress_bar = true if enable_progress_bar.nil?
55
+
56
+ options.merge!(download_headers)
57
+ options[:read_timeout] = Omnibus::Config.fetcher_read_timeout
58
+
59
+ fetcher_retries ||= Omnibus::Config.fetcher_retries
60
+
61
+ reported_total = 0
62
+ if enable_progress_bar
63
+ progress_bar = ProgressBar.create(
64
+ output: $stdout,
65
+ format: '%e %B %p%% (%r KB/sec)',
66
+ rate_scale: ->(rate) { rate / 1024 },
67
+ )
68
+
69
+ options[:content_length_proc] = ->(total) {
70
+ reported_total = total
71
+ progress_bar.total = total
72
+ }
73
+ options[:progress_proc] = ->(step) {
74
+ downloaded_amount = [step, reported_total].min
75
+ progress_bar.progress = downloaded_amount
76
+ }
77
+ end
78
+
79
+ file = open(from_url, options)
80
+ # This is a temporary file. Close and flush it before attempting to copy
81
+ # it over.
82
+ file.close
83
+ FileUtils.cp(file.path, to_path)
84
+ file.unlink
85
+ rescue SocketError,
86
+ Errno::ECONNREFUSED,
87
+ Errno::ECONNRESET,
88
+ Errno::ENETUNREACH,
89
+ Timeout::Error,
90
+ OpenURI::HTTPError => e
91
+ if fetcher_retries != 0
92
+ log.info(log_key) { "Retrying failed download due to #{e} (#{fetcher_retries} retries left)..." }
93
+ fetcher_retries -= 1
94
+ retry
95
+ else
96
+ log.error(log_key) { "Download failed - #{e.class}!" }
97
+ raise
98
+ end
99
+ end
100
+
101
+ #
102
+ # The list of headers to pass to the download.
103
+ #
104
+ # @return [Hash]
105
+ #
106
+ def download_headers
107
+ {}.tap do |h|
108
+ # Alright kids, sit down while grandpa tells you a story. Back when the
109
+ # Internet was just a series of tubes, and you had to "dial in" using
110
+ # this thing called a "modem", ancient astronaunt theorists (computer
111
+ # scientists) invented gzip to compress requests sent over said tubes
112
+ # and make the Internet faster.
113
+ #
114
+ # Fast forward to the year of broadband - ungzipping these files was
115
+ # tedious and hard, so Ruby and other client libraries decided to do it
116
+ # for you:
117
+ #
118
+ # https://github.com/ruby/ruby/blob/c49ae7/lib/net/http.rb#L1031-L1033
119
+ #
120
+ # Meanwhile, software manufacturers began automatically compressing
121
+ # their software for distribution as a +.tar.gz+, publishing the
122
+ # appropriate checksums accordingly.
123
+ #
124
+ # But consider... If a software manufacturer is publishing the checksum
125
+ # for a gzipped tarball, and the client is automatically ungzipping its
126
+ # responses, then checksums can (read: should) never match! Herein lies
127
+ # the bug that took many hours away from the lives of a once-happy
128
+ # developer.
129
+ #
130
+ # TL;DR - Do not let Ruby ungzip our file
131
+ #
132
+ h['Accept-Encoding'] = 'identity'
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end