omnibus 9.0.12 → 9.0.22

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
  SHA256:
3
- metadata.gz: f20cc7252db28fd200af4db5bda33950070e7156613c39009f03ca486eb0e20a
4
- data.tar.gz: 9dcd4a140bf26997769e5f125f205411ca2cb99c0baff4d3c5f8a8f5f637e45a
3
+ metadata.gz: 425eba24bbd4c8de03b075dea1255fa5bedd3a8ae2299e277e7353d4b172553a
4
+ data.tar.gz: 61c80839060c2418ee56e831bbfa2c4e712d4c5d5287a005b5af51ada7e81002
5
5
  SHA512:
6
- metadata.gz: aa23dc9ab959bf5d738ac6377b47b96f29a44ac447e0cb22bee1dcb019ca8278907986844c4333f747986dbc77eb916d513df2c22b51b6e2c8adf9a5b70a21e5
7
- data.tar.gz: f89b0e7c0d3bb79b904084de8c1b00fe9e2f4fca318335158c58ac2472de51d945c6ff641bcdf33db38d15928b7e7d30419423505af93380f546f99fc935ac74
6
+ metadata.gz: cb33e1a53677ea828fd163285dd40429792896cb9e1e06f3724225c6eeb99b82a40aacb9b4357ee80022a9fa827093061218dfb620cf3651b7445c74205a9c00
7
+ data.tar.gz: 1ca8cc40f6e4de6158384dda0c22fa43c528bc8c89778118716e4e4876de313636f5216a2a180a930c4f07c90dd49489b40c5bce1f839f92eec037bb17c72696
data/README.md CHANGED
@@ -279,6 +279,10 @@ However there are several caveats to be aware of:
279
279
  1. You will almost certainly want to uncomment the `base_dir` in `omnibus.rb`,
280
280
  or at the very least change `cache_dir` and `build_dir` as otherwise it'll try
281
281
  to use `/var/cache/omnibus` and `/opt/$MY_PROJECT_NAME`, requiring root.
282
+ 1. Update software dependencies listed in the project configuration in `config/projects/$MY_PROJECT_NAME.rb`.
283
+ You can refer the software `.rb` files present in the `config/software` folder.
284
+ 1. The `install_dir` specified in the project file typically requires `root` privilege at build time.
285
+ Change it another location such as `"/tmp/#{name}"` to avoid running as `root`.
282
286
  1. The default configuration created for you references a lot of things
283
287
  that are in the default config that come from the `omnibus-software` gem.
284
288
  So you want to use those you'll need to either uncomment it in the `Gemfile`,
@@ -0,0 +1,129 @@
1
+ #
2
+ # Copyright 2012-2018 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
+ module Omnibus
18
+ # Provides methods for fetching Omnibus project build metadata from Buildkite
19
+ #
20
+ # @note Requires environment variables provided by Buildkite
21
+ #
22
+ class Buildkite
23
+
24
+ class << self
25
+
26
+ #
27
+ # Constants for the buildkite environment variables
28
+ #
29
+ AMI_ID_ENV_KEY = "BUILDKITE_AGENT_META_DATA_AWS_AMI_ID".freeze
30
+ HOSTNAME_ENV_KEY = "BUILDKITE_AGENT_META_DATA_HOSTNAME".freeze
31
+ DOCKER_VERSION_ENV_KEY = "BUILDKITE_AGENT_META_DATA_DOCKER".freeze
32
+ BUILDKITE_COMMAND_ENV_KEY = "BUILDKITE_COMMAND".freeze
33
+
34
+ #
35
+ # The AMI ID of the instance the build is happening on.
36
+ #
37
+ # @note This is only present when the instance is a Windows or Linux instance.
38
+ #
39
+ # @note Relies on presence of ENV["BUILDKITE_AGENT_META_DATA_AWS_AMI_ID"] in Buildkite build job.
40
+ #
41
+ # @return [String]
42
+ # either the AMI ID, or 'unknown'
43
+ #
44
+ def ami_id
45
+ ami_id = "unknown"
46
+ if !ENV[AMI_ID_ENV_KEY].nil? && !ENV[AMI_ID_ENV_KEY].empty?
47
+ ami_id = ENV[AMI_ID_ENV_KEY]
48
+ end
49
+ ami_id
50
+ end
51
+
52
+ #
53
+ # The hostname of the instance the build is happening on.
54
+ #
55
+ # @note This is only present when the instance is a MacOS instance.
56
+ #
57
+ # @note Relies on presence of ENV["BUILDKITE_AGENT_META_DATA_HOSTNAME"] in Buildkite build job.
58
+ #
59
+ # @return [String]
60
+ # either the hostname, or 'unknown'
61
+ #
62
+ def hostname
63
+ hostname = "unknown"
64
+ if !ENV[HOSTNAME_ENV_KEY].nil? && !ENV[HOSTNAME_ENV_KEY].empty? && ami_id == "unknown"
65
+ hostname = ENV[HOSTNAME_ENV_KEY]
66
+ end
67
+ hostname
68
+ end
69
+
70
+ #
71
+ # A boolean representing if the build is using docker or not.
72
+ #
73
+ # @note Relies on presence of ENV["BUILDKITE_AGENT_META_DATA_DOCKER"] in Buildkite build job.
74
+ #
75
+ # @return [Boolean]
76
+ #
77
+ def is_docker_build
78
+ !ENV[DOCKER_VERSION_ENV_KEY].nil? && !ENV[DOCKER_VERSION_ENV_KEY].empty? ? true : false
79
+ end
80
+
81
+ #
82
+ # The version of docker that was used in the build.
83
+ #
84
+ # @note Relies on presence of ENV["BUILDKITE_AGENT_META_DATA_DOCKER"] in Buildkite build job.
85
+ #
86
+ # @return [String]
87
+ #
88
+ def docker_version
89
+ ENV[DOCKER_VERSION_ENV_KEY] if is_docker_build
90
+ end
91
+
92
+ #
93
+ # The OS Image that is being used in the Docker build
94
+ #
95
+ # @note Relies on presence of ENV["BUILDKITE_COMMAND"] in Buildkite build job.
96
+ #
97
+ # @return [String]
98
+ # String with the parameter that was provided in the `docker build` command
99
+ #
100
+ def docker_image
101
+ buildkite_command = ENV[BUILDKITE_COMMAND_ENV_KEY]
102
+ if is_docker_build && buildkite_command && buildkite_command.include?("OS_IMAGE")
103
+ os_image = buildkite_command.match(/OS_IMAGE=(?<image_id>[\S]*)/)
104
+ os_image[:image_id]
105
+ end
106
+ end
107
+
108
+ #
109
+ # The version of Omnibus that is in `version.rb`
110
+ #
111
+ # @return [String]
112
+ #
113
+ def omnibus_version
114
+ Omnibus::VERSION
115
+ end
116
+
117
+ def to_hash
118
+ ret = {}
119
+ ret[:ami_id] = ami_id if ami_id != "unknown"
120
+ ret[:hostname] = hostname if hostname != "unknown"
121
+ ret[:is_docker_build] = is_docker_build if is_docker_build
122
+ ret[:docker_version] = docker_version if docker_version
123
+ ret[:docker_image] = docker_image if docker_image
124
+ ret[:omnibus_version] = omnibus_version
125
+ ret
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,36 @@
1
+ #
2
+ # Copyright 2012-2018 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 "omnibus/build_system_metadata/buildkite"
18
+
19
+ module Omnibus
20
+ # Provides methods for fetching Omnibus project build metadata from Buildkite
21
+ #
22
+ # @note Requires environment variables provided whichever platform metdata is being pulled from
23
+ #
24
+ class BuildSystemMetadata
25
+
26
+ class << self
27
+
28
+ def to_hash
29
+ if !ENV["BUILDKITE"].nil? && !ENV["BUILDKITE"].empty?
30
+ Omnibus::Buildkite.to_hash
31
+ end
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -637,7 +637,7 @@ module Omnibus
637
637
  #
638
638
  def strip(path)
639
639
  regexp_ends = ".*(" + IGNORED_ENDINGS.map { |e| e.gsub(/\./, '\.') }.join("|") + ")$"
640
- regexp_patterns = IGNORED_PATTERNS.map { |e| ".*" + e.gsub(%r{/}, '\/') + ".*" }.join("|")
640
+ regexp_patterns = IGNORED_SUBSTRINGS.map { |e| ".*" + e.gsub(%r{/}, '\/') + ".*" }.join("|")
641
641
  regexp = regexp_ends + "|" + regexp_patterns
642
642
 
643
643
  # Do not actually care if strip runs on non-strippable file, as its a no-op. Hence the `|| true` appended.
@@ -32,6 +32,10 @@ module Omnibus
32
32
 
33
33
  super
34
34
  end
35
+
36
+ def exit_on_failure?
37
+ true
38
+ end
35
39
  end
36
40
 
37
41
  include Logging
data/lib/omnibus/cli.rb CHANGED
@@ -85,7 +85,13 @@ module Omnibus
85
85
  project = Project.load(name, manifest)
86
86
  say("Building #{project.name} #{project.build_version}...")
87
87
  Omnibus::S3Cache.populate if @options[:populate_s3_cache] && !Omnibus::S3Cache.fetch_missing.empty?
88
- project.download
88
+ begin
89
+ project.download
90
+ rescue
91
+ Config.use_s3_caching(false) if Config.use_s3_caching
92
+ project = Project.load(name, nil)
93
+ project.download
94
+ end
89
95
  project.build
90
96
 
91
97
  if @options[:output_manifest]
@@ -69,13 +69,20 @@ module Omnibus
69
69
 
70
70
  def to_hash
71
71
  software_hash = @data.inject({}) do |memo, (k, v)|
72
- memo[k] = v.to_hash
72
+ h = v.to_hash
73
+ h[:locked_source].delete(:authorization) if h[:locked_source]
74
+
75
+ memo[k] = h
73
76
  memo
74
77
  end
78
+
79
+ build_system_metadata = Omnibus::BuildSystemMetadata.to_hash
80
+
75
81
  ret = {
76
82
  manifest_format: LATEST_MANIFEST_FORMAT,
77
83
  software: software_hash,
78
84
  }
85
+ ret[:build_system_metadata] = build_system_metadata if build_system_metadata
79
86
  ret[:build_version] = build_version if build_version
80
87
  ret[:build_git_revision] = build_git_revision if build_git_revision
81
88
  ret[:license] = license
@@ -115,7 +122,9 @@ module Omnibus
115
122
  end
116
123
 
117
124
  def self.from_hash_v2(manifest_data)
118
- m = Omnibus::Manifest.new(manifest_data[:build_version], manifest_data[:build_git_revision], manifest_data[:license])
125
+ m = Omnibus::Manifest.new(manifest_data[:build_version],
126
+ manifest_data[:build_git_revision],
127
+ manifest_data[:license])
119
128
  manifest_data[:software].each do |name, entry_data|
120
129
  m.add(name, Omnibus::ManifestEntry.new(name, keys_to_syms(entry_data)))
121
130
  end
@@ -145,7 +145,11 @@ module Omnibus
145
145
  #
146
146
  def platform_shortname
147
147
  if rhel?
148
- "el"
148
+ if "rocky" == Ohai["platform"]
149
+ "rocky"
150
+ else
151
+ "el"
152
+ end
149
153
  elsif suse?
150
154
  "sles"
151
155
  else
@@ -170,7 +174,7 @@ module Omnibus
170
174
  # rubocop:disable Lint/DuplicateCaseCondition
171
175
  def truncate_platform_version(platform_version, platform)
172
176
  case platform
173
- when "centos", "cumulus", "debian", "el", "fedora", "freebsd", "omnios", "pidora", "raspbian", "rhel", "sles", "suse", "smartos"
177
+ when "centos", "cumulus", "debian", "el", "fedora", "freebsd", "omnios", "pidora", "raspbian", "rhel", "rocky", "sles", "suse", "smartos"
174
178
  # Only want MAJOR (e.g. Debian 7, OmniOS r151006, SmartOS 20120809T221258Z)
175
179
  platform_version.split(".").first
176
180
  when "aix", "alpine", "openbsd", "slackware", "solaris2", "opensuse", "opensuseleap", "ubuntu", "amazon"
@@ -44,6 +44,7 @@ module Omnibus
44
44
  "rhel" => RPM,
45
45
  "wrlinux" => RPM,
46
46
  "amazon" => RPM,
47
+ "rocky" => RPM,
47
48
  "aix" => BFF,
48
49
  "solaris" => Solaris,
49
50
  "omnios" => IPS,
@@ -307,6 +307,30 @@ module Omnibus
307
307
  end
308
308
  expose :gem_path
309
309
 
310
+ #
311
+ # Provide a custom zip name
312
+ #
313
+ # @example
314
+ # zip_name 'chef'
315
+ #
316
+ # @param [TrueClass, FalseClass] value
317
+ # whether we're building a zip-based MSI or not
318
+ #
319
+ # @return [TrueClass, FalseClass]
320
+ # whether we're building a zip-based MSI or not
321
+ def zip_name(val = NULL)
322
+ if null?(val)
323
+ @zip_name || project.name
324
+ else
325
+ unless val.is_a?(String)
326
+ raise InvalidValue.new(:zip_name, "be an String")
327
+ end
328
+
329
+ @zip_name = val
330
+ end
331
+ end
332
+ expose :zip_name
333
+
310
334
  #
311
335
  # @!endgroup
312
336
  # --------------------------------------------------
@@ -443,7 +467,7 @@ module Omnibus
443
467
  def zip_command
444
468
  <<-EOH.split.join(" ").squeeze(" ").strip
445
469
  7z a -r
446
- #{windows_safe_path(staging_dir)}\\#{project.name}.zip
470
+ #{windows_safe_path(staging_dir)}\\#{zip_name}.zip
447
471
  #{windows_safe_path(project.install_dir)}\\*
448
472
  EOH
449
473
  end
@@ -457,7 +481,7 @@ module Omnibus
457
481
  def heat_command
458
482
  if fast_msi
459
483
  <<-EOH.split.join(" ").squeeze(" ").strip
460
- heat.exe file "#{project.name}.zip"
484
+ heat.exe file "#{zip_name}.zip"
461
485
  -cg ProjectDir
462
486
  -dr INSTALLLOCATION
463
487
  -nologo -sfrag -srd -sreg -gg
@@ -437,7 +437,7 @@ module Omnibus
437
437
  render_template(resource_path("rpmmacros.erb"),
438
438
  destination: "#{home}/.rpmmacros",
439
439
  variables: {
440
- gpg_name: project.maintainer,
440
+ gpg_name: "Opscode Packages",
441
441
  gpg_path: "#{ENV["HOME"]}/.gnupg", # TODO: Make this configurable
442
442
  })
443
443
  end
@@ -448,7 +448,7 @@ module Omnibus
448
448
 
449
449
  # RHEL 8 has gpg-agent running so we can skip the expect script since the agent
450
450
  # takes care of the passphrase entering on the signing
451
- if dist_tag != ".el8"
451
+ if dist_tag != ".el8" && dist_tag != ".el9"
452
452
  sign_cmd.prepend("#{signing_script} \"").concat("\"")
453
453
  end
454
454
 
@@ -1062,7 +1062,10 @@ module Omnibus
1062
1062
  end
1063
1063
 
1064
1064
  def download
1065
- ThreadPool.new(Config.workers) do |pool|
1065
+ # Setting abort_on_exception to false because it was causing
1066
+ # errors by shutting down the main thread when encountering a cache miss
1067
+ # in S3 and falling back to the internal source repo
1068
+ ThreadPool.new(Config.workers, false) do |pool|
1066
1069
  softwares.each do |software|
1067
1070
  pool.schedule { software.fetch }
1068
1071
  end
@@ -36,8 +36,7 @@ module Omnibus
36
36
  # the list of variables to pass to the template
37
37
  #
38
38
  def render_template_content(source, variables = {})
39
- template = ERB.new(File.read(source), nil, "-")
40
-
39
+ template = ERB.new(File.read(source), trim_mode: "-")
41
40
  struct =
42
41
  if variables.empty?
43
42
  Struct.new("Empty")
@@ -46,14 +46,16 @@ module Omnibus
46
46
  #
47
47
  # @param [Integer] size
48
48
  # the number of items to put in the thread pool
49
+ # @param [Boolean] abort_on_exception
50
+ # if the thread should abort the main thread also on a failure
49
51
  #
50
- def initialize(size)
52
+ def initialize(size, abort_on_exception = true)
51
53
  @size = size
52
54
  @jobs = Queue.new
53
55
 
54
56
  @pool = Array.new(@size) do |i|
55
57
  Thread.new do
56
- Thread.abort_on_exception = true
58
+ Thread.abort_on_exception = abort_on_exception
57
59
  Thread.current[:id] = i
58
60
 
59
61
  catch(:exit) do
@@ -15,5 +15,5 @@
15
15
  #
16
16
 
17
17
  module Omnibus
18
- VERSION = "9.0.12".freeze
18
+ VERSION = "9.0.22".freeze
19
19
  end
@@ -62,6 +62,7 @@ AIX_WHITELIST_LIBS = [
62
62
  /librtl\.a/,
63
63
  /libsrc\.a/,
64
64
  /unix$/,
65
+ /libcrypto\.so/,
65
66
  ].freeze
66
67
 
67
68
  OMNIOS_WHITELIST_LIBS = [
data/lib/omnibus.rb CHANGED
@@ -34,34 +34,36 @@ module Omnibus
34
34
  #
35
35
  DEFAULT_CONFIG = "omnibus.rb".freeze
36
36
 
37
- autoload :Builder, "omnibus/builder"
38
- autoload :BuildVersion, "omnibus/build_version"
39
- autoload :BuildVersionDSL, "omnibus/build_version_dsl"
40
- autoload :Cleaner, "omnibus/cleaner"
41
- autoload :Compressor, "omnibus/compressor"
42
- autoload :Config, "omnibus/config"
43
- autoload :Error, "omnibus/exceptions"
44
- autoload :FileSyncer, "omnibus/file_syncer"
45
- autoload :Generator, "omnibus/generator"
46
- autoload :GitCache, "omnibus/git_cache"
47
- autoload :HealthCheck, "omnibus/health_check"
48
- autoload :Instrumentation, "omnibus/instrumentation"
49
- autoload :Library, "omnibus/library"
50
- autoload :Logger, "omnibus/logger"
51
- autoload :Logging, "omnibus/logging"
52
- autoload :Metadata, "omnibus/metadata"
53
- autoload :NullArgumentable, "omnibus/null_argumentable"
54
- autoload :Ohai, "omnibus/ohai"
55
- autoload :Package, "omnibus/package"
56
- autoload :Packager, "omnibus/packager"
57
- autoload :Project, "omnibus/project"
58
- autoload :Publisher, "omnibus/publisher"
59
- autoload :Reports, "omnibus/reports"
60
- autoload :S3Cache, "omnibus/s3_cache"
61
- autoload :Software, "omnibus/software"
62
- autoload :Templating, "omnibus/templating"
63
- autoload :ThreadPool, "omnibus/thread_pool"
64
- autoload :Licensing, "omnibus/licensing"
37
+ autoload :Builder, "omnibus/builder"
38
+ autoload :BuildVersion, "omnibus/build_version"
39
+ autoload :BuildVersionDSL, "omnibus/build_version_dsl"
40
+ autoload :BuildSystemMetadata, "omnibus/build_system_metadata"
41
+ autoload :Buildkite, "omnibus/build_system_metadata/buildkite"
42
+ autoload :Cleaner, "omnibus/cleaner"
43
+ autoload :Compressor, "omnibus/compressor"
44
+ autoload :Config, "omnibus/config"
45
+ autoload :Error, "omnibus/exceptions"
46
+ autoload :FileSyncer, "omnibus/file_syncer"
47
+ autoload :Generator, "omnibus/generator"
48
+ autoload :GitCache, "omnibus/git_cache"
49
+ autoload :HealthCheck, "omnibus/health_check"
50
+ autoload :Instrumentation, "omnibus/instrumentation"
51
+ autoload :Library, "omnibus/library"
52
+ autoload :Logger, "omnibus/logger"
53
+ autoload :Logging, "omnibus/logging"
54
+ autoload :Metadata, "omnibus/metadata"
55
+ autoload :NullArgumentable, "omnibus/null_argumentable"
56
+ autoload :Ohai, "omnibus/ohai"
57
+ autoload :Package, "omnibus/package"
58
+ autoload :Packager, "omnibus/packager"
59
+ autoload :Project, "omnibus/project"
60
+ autoload :Publisher, "omnibus/publisher"
61
+ autoload :Reports, "omnibus/reports"
62
+ autoload :S3Cache, "omnibus/s3_cache"
63
+ autoload :Software, "omnibus/software"
64
+ autoload :Templating, "omnibus/templating"
65
+ autoload :ThreadPool, "omnibus/thread_pool"
66
+ autoload :Licensing, "omnibus/licensing"
65
67
 
66
68
  autoload :GitFetcher, "omnibus/fetchers/git_fetcher"
67
69
  autoload :NetFetcher, "omnibus/fetchers/net_fetcher"
@@ -77,16 +79,16 @@ module Omnibus
77
79
  autoload :ManifestEntry, "omnibus/manifest_entry"
78
80
  autoload :ManifestDiff, "omnibus/manifest_diff"
79
81
 
80
- autoload :ChangeLog, "omnibus/changelog"
81
- autoload :GitRepository, "omnibus/git_repository"
82
+ autoload :ChangeLog, "omnibus/changelog"
83
+ autoload :GitRepository, "omnibus/git_repository"
82
84
 
83
85
  autoload :SemanticVersion, "omnibus/semantic_version"
84
86
 
85
87
  module Command
86
- autoload :Base, "omnibus/cli/base"
87
- autoload :Cache, "omnibus/cli/cache"
88
- autoload :Publish, "omnibus/cli/publish"
89
- autoload :ChangeLog, "omnibus/cli/changelog"
88
+ autoload :Base, "omnibus/cli/base"
89
+ autoload :Cache, "omnibus/cli/cache"
90
+ autoload :Publish, "omnibus/cli/publish"
91
+ autoload :ChangeLog, "omnibus/cli/changelog"
90
92
  end
91
93
 
92
94
  class << self
@@ -0,0 +1,82 @@
1
+ require "spec_helper"
2
+
3
+ module Omnibus
4
+ describe BuildSystemMetadata do
5
+
6
+ let(:ami_id) { "ami-1234ab5678cd9ef01" }
7
+ let(:hostname) { "CHF-V-ABC-DE000.local" }
8
+ let(:docker_version) { "20.0.0" }
9
+ let(:docker_image) { "artifactory-url.com/release-type/base-platform" }
10
+ let(:docker_command) { "docker build . -f images/omnibus_toolchain_containers/platform/Dockerfile -t artifactory-url.com/release-type/omnibus-toolchain-platform -t chefes/omnibus-toolchain-platform --build-arg OS_IMAGE=#{docker_image}" }
11
+
12
+ subject(:buildkite_metadata) { Omnibus::Buildkite }
13
+
14
+ describe "#to_hash" do
15
+ context "builds occur on buildkite" do
16
+
17
+ before(:each) do
18
+ clear_defaults
19
+ end
20
+
21
+ it "returns an ami_id if one is found" do
22
+ with_ami_id
23
+ expect(buildkite_metadata.to_hash[:ami_id]).to eq(ami_id)
24
+ end
25
+
26
+ it "returns an hostname if one is found" do
27
+ with_hostname
28
+ expect(buildkite_metadata.to_hash[:hostname]).to eq(hostname)
29
+ end
30
+
31
+ it "returns is_docker_build if one is found" do
32
+ with_docker
33
+ expect(buildkite_metadata.to_hash[:is_docker_build]).to eq(true)
34
+ end
35
+
36
+ it "returns a docker_version if one is found" do
37
+ with_docker
38
+ expect(buildkite_metadata.to_hash[:docker_version]).to eq(docker_version)
39
+ end
40
+
41
+ it "returns a docker_image if one is found" do
42
+ with_docker
43
+ expect(buildkite_metadata.to_hash[:docker_image]).to eq(docker_image)
44
+ end
45
+
46
+ it "returns an omnibus_version if one is found" do
47
+ expect(buildkite_metadata.to_hash[:omnibus_version]).to eq(Omnibus::VERSION)
48
+ end
49
+
50
+ end
51
+ end
52
+
53
+ def with_ami_id
54
+ stub_env("BUILDKITE_AGENT_META_DATA_AWS_AMI_ID", ami_id)
55
+ end
56
+
57
+ def with_hostname
58
+ stub_env("BUILDKITE_AGENT_META_DATA_HOSTNAME", hostname)
59
+ end
60
+
61
+ def with_docker
62
+ stub_env("BUILDKITE_AGENT_META_DATA_DOCKER", docker_version)
63
+ stub_env("BUILDKITE_COMMAND", docker_command)
64
+ end
65
+
66
+ def clear_defaults
67
+ without_ami_id_and_hostname
68
+ without_docker
69
+ end
70
+
71
+ def without_ami_id_and_hostname
72
+ stub_env("BUILDKITE_AGENT_META_DATA_AWS_AMI_ID", nil)
73
+ stub_env("BUILDKITE_AGENT_META_DATA_HOSTNAME", nil)
74
+ end
75
+
76
+ def without_docker
77
+ stub_env("BUILDKITE_AGENT_META_DATA_DOCKER", nil)
78
+ stub_env("BUILDKITE_COMMAND", nil)
79
+ end
80
+
81
+ end
82
+ end
@@ -0,0 +1,207 @@
1
+ require "spec_helper"
2
+
3
+ module Omnibus
4
+ describe Buildkite do
5
+
6
+ let(:ami_id) { "ami-1234ab5678cd9ef01" }
7
+ let(:hostname) { "CHF-V-ABC-DE000.local" }
8
+ let(:docker_version) { "20.0.0" }
9
+ let(:docker_image) { "artifactory-url.com/release-type/base-platform" }
10
+ let(:docker_command) { "docker build . -f images/omnibus_toolchain_containers/platform/Dockerfile -t artifactory-url.com/release-type/omnibus-toolchain-platform -t chefes/omnibus-toolchain-platform --build-arg OS_IMAGE=#{docker_image}" }
11
+
12
+ subject(:buildkite_metadata) { described_class }
13
+
14
+ before(:each) do
15
+ clear_defaults
16
+ end
17
+
18
+ describe "#ami_id" do
19
+ it "returns the ami_id if one is found" do
20
+ with_ami_id
21
+ expect(buildkite_metadata.ami_id).to eq(ami_id)
22
+ end
23
+
24
+ it "returns the unknown if nothing present" do
25
+ expect(buildkite_metadata.ami_id).to eq("unknown")
26
+ end
27
+ end
28
+
29
+ describe "#hostname" do
30
+ it "returns the hostname if one is found" do
31
+ with_hostname
32
+ expect(buildkite_metadata.hostname).to eq(hostname)
33
+ end
34
+
35
+ it "returns the unknown if nothing present" do
36
+ expect(buildkite_metadata.hostname).to eq("unknown")
37
+ end
38
+ end
39
+
40
+ describe "#is_docker_build" do
41
+ it "returns true if docker metadata is present" do
42
+ with_docker
43
+ expect(buildkite_metadata.is_docker_build).to eq(true)
44
+ end
45
+
46
+ it "returns false if docker metadata is missing" do
47
+ expect(buildkite_metadata.is_docker_build).to eq(false)
48
+ end
49
+ end
50
+
51
+ describe "#docker_version" do
52
+ it "returns the docker version if one is found" do
53
+ with_docker
54
+ expect(buildkite_metadata.docker_version).to eq(docker_version)
55
+ end
56
+
57
+ it "returns nothing if docker version is missing" do
58
+ expect(buildkite_metadata.docker_version).to be_nil
59
+ end
60
+ end
61
+
62
+ describe "#docker_image" do
63
+ it "returns the docker image id if one is found" do
64
+ with_docker
65
+ expect(buildkite_metadata.docker_image).to eq(docker_image)
66
+ end
67
+
68
+ it "returns nothing if docker image id is missing" do
69
+ expect(buildkite_metadata.docker_image).to be_nil
70
+ end
71
+ end
72
+
73
+ describe "#omnibus_version" do
74
+ it "returns the omnibus_version if one is found" do
75
+ expect(buildkite_metadata.omnibus_version).to eq(Omnibus::VERSION)
76
+ end
77
+ end
78
+
79
+ describe "#to_hash" do
80
+ it "returns an ami_id if one is found" do
81
+ with_ami_id
82
+ expect(buildkite_metadata.to_hash[:ami_id]).to eq(ami_id)
83
+ end
84
+
85
+ it "returns an hostname if one is found" do
86
+ with_hostname
87
+ expect(buildkite_metadata.to_hash[:hostname]).to eq(hostname)
88
+ end
89
+
90
+ it "returns is_docker_build if one is found" do
91
+ with_docker
92
+ expect(buildkite_metadata.to_hash[:is_docker_build]).to eq(true)
93
+ end
94
+
95
+ it "returns a docker_version if one is found" do
96
+ with_docker
97
+ expect(buildkite_metadata.to_hash[:docker_version]).to eq(docker_version)
98
+ end
99
+
100
+ it "returns a docker_image if one is found" do
101
+ with_docker
102
+ expect(buildkite_metadata.to_hash[:docker_image]).to eq(docker_image)
103
+ end
104
+
105
+ it "returns an omnibus_version if one is found" do
106
+ expect(buildkite_metadata.to_hash[:omnibus_version]).to eq(Omnibus::VERSION)
107
+ end
108
+ end
109
+
110
+ context "platform builds on linux" do
111
+ it "uses docker" do
112
+ with_ami_id
113
+ with_docker
114
+
115
+ expect(buildkite_metadata.ami_id).to eq(ami_id)
116
+ expect(buildkite_metadata.is_docker_build).to eq(true)
117
+ expect(buildkite_metadata.docker_version).to eq(docker_version)
118
+ expect(buildkite_metadata.docker_image).to eq(docker_image)
119
+ expect(buildkite_metadata.omnibus_version).to eq(Omnibus::VERSION)
120
+ end
121
+
122
+ it "does not use docker" do
123
+ with_ami_id
124
+
125
+ expect(buildkite_metadata.ami_id).to eq(ami_id)
126
+ expect(buildkite_metadata.is_docker_build).to eq(false)
127
+ expect(buildkite_metadata.docker_version).to be_nil
128
+ expect(buildkite_metadata.docker_image).to be_nil
129
+ expect(buildkite_metadata.omnibus_version).to eq(Omnibus::VERSION)
130
+ end
131
+ end
132
+
133
+ context "platform builds on windows" do
134
+ it "uses docker" do
135
+ with_ami_id
136
+ with_docker
137
+
138
+ expect(buildkite_metadata.ami_id).to eq(ami_id)
139
+ expect(buildkite_metadata.is_docker_build).to eq(true)
140
+ expect(buildkite_metadata.docker_version).to eq(docker_version)
141
+ expect(buildkite_metadata.docker_image).to eq(docker_image)
142
+ expect(buildkite_metadata.omnibus_version).to eq(Omnibus::VERSION)
143
+ end
144
+
145
+ it "does not use docker" do
146
+ with_ami_id
147
+
148
+ expect(buildkite_metadata.ami_id).to eq(ami_id)
149
+ expect(buildkite_metadata.is_docker_build).to eq(false)
150
+ expect(buildkite_metadata.docker_version).to be_nil
151
+ expect(buildkite_metadata.docker_image).to be_nil
152
+ expect(buildkite_metadata.omnibus_version).to eq(Omnibus::VERSION)
153
+ end
154
+ end
155
+
156
+ describe "platform builds on macOS" do
157
+ it "uses docker" do
158
+ with_hostname
159
+ with_docker
160
+
161
+ expect(buildkite_metadata.hostname).to eq(hostname)
162
+ expect(buildkite_metadata.is_docker_build).to eq(true)
163
+ expect(buildkite_metadata.docker_version).to eq(docker_version)
164
+ expect(buildkite_metadata.docker_image).to eq(docker_image)
165
+ expect(buildkite_metadata.omnibus_version).to eq(Omnibus::VERSION)
166
+ end
167
+
168
+ it "does not use docker" do
169
+ with_hostname
170
+
171
+ expect(buildkite_metadata.hostname).to eq(hostname)
172
+ expect(buildkite_metadata.is_docker_build).to eq(false)
173
+ expect(buildkite_metadata.docker_version).to be_nil
174
+ expect(buildkite_metadata.docker_image).to be_nil
175
+ expect(buildkite_metadata.omnibus_version).to eq(Omnibus::VERSION)
176
+ end
177
+ end
178
+
179
+ def with_ami_id
180
+ stub_env("BUILDKITE_AGENT_META_DATA_AWS_AMI_ID", ami_id)
181
+ end
182
+
183
+ def with_hostname
184
+ stub_env("BUILDKITE_AGENT_META_DATA_HOSTNAME", hostname)
185
+ end
186
+
187
+ def with_docker
188
+ stub_env("BUILDKITE_AGENT_META_DATA_DOCKER", docker_version)
189
+ stub_env("BUILDKITE_COMMAND", docker_command)
190
+ end
191
+
192
+ def clear_defaults
193
+ without_ami_id_and_hostname
194
+ without_docker
195
+ end
196
+
197
+ def without_ami_id_and_hostname
198
+ stub_env("BUILDKITE_AGENT_META_DATA_AWS_AMI_ID", nil)
199
+ stub_env("BUILDKITE_AGENT_META_DATA_HOSTNAME", nil)
200
+ end
201
+
202
+ def without_docker
203
+ stub_env("BUILDKITE_AGENT_META_DATA_DOCKER", nil)
204
+ stub_env("BUILDKITE_COMMAND", nil)
205
+ end
206
+ end
207
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnibus
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.0.12
4
+ version: 9.0.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef Software, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-17 00:00:00.000000000 Z
11
+ date: 2023-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-s3
@@ -372,6 +372,8 @@ files:
372
372
  - lib/omnibus.rb
373
373
  - lib/omnibus/assets/README-logo.png
374
374
  - lib/omnibus/assets/logo.psd
375
+ - lib/omnibus/build_system_metadata.rb
376
+ - lib/omnibus/build_system_metadata/buildkite.rb
375
377
  - lib/omnibus/build_version.rb
376
378
  - lib/omnibus/build_version_dsl.rb
377
379
  - lib/omnibus/builder.rb
@@ -522,9 +524,11 @@ files:
522
524
  - spec/support/output_helpers.rb
523
525
  - spec/support/path_helpers.rb
524
526
  - spec/support/shell_helpers.rb
527
+ - spec/unit/build_system_metadata_spec.rb
525
528
  - spec/unit/build_version_dsl_spec.rb
526
529
  - spec/unit/build_version_spec.rb
527
530
  - spec/unit/builder_spec.rb
531
+ - spec/unit/buildkite_spec.rb
528
532
  - spec/unit/changelog_spec.rb
529
533
  - spec/unit/changelogprinter_spec.rb
530
534
  - spec/unit/cleanroom_spec.rb
@@ -626,9 +630,11 @@ test_files:
626
630
  - spec/support/output_helpers.rb
627
631
  - spec/support/path_helpers.rb
628
632
  - spec/support/shell_helpers.rb
633
+ - spec/unit/build_system_metadata_spec.rb
629
634
  - spec/unit/build_version_dsl_spec.rb
630
635
  - spec/unit/build_version_spec.rb
631
636
  - spec/unit/builder_spec.rb
637
+ - spec/unit/buildkite_spec.rb
632
638
  - spec/unit/changelog_spec.rb
633
639
  - spec/unit/changelogprinter_spec.rb
634
640
  - spec/unit/cleanroom_spec.rb