You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
3.0 KiB

4 years ago
require "benchmark" unless defined?(Benchmark)
require "fileutils" unless defined?(FileUtils)
require "json" unless defined?(JSON)
require "tempfile" unless defined?(Tempfile)
require "yaml"
require "mixlib/shellout" unless defined?(Mixlib::ShellOut)
MEGABYTE = 1024.0 * 1024.0
module Common
def banner(msg)
puts "==> #{msg}"
end
def info(msg)
puts " #{msg}"
end
def shellout(cmd)
info "Shelling out to run #{cmd}"
sout = Mixlib::ShellOut.new(cmd)
sout.live_stream = STDOUT
sout.run_command
sout.error! # fail hard if the cmd fails
end
def warn(msg)
puts ">>> #{msg}"
end
#
# Shellout to vagrant CLI to see if we're logged into the cloud
#
# @return [Boolean]
#
def logged_in?
shellout = Mixlib::ShellOut.new("vagrant cloud auth whoami").run_command
if shellout.error?
error_output = !shellout.stderr.empty? ? shellout.stderr : shellout.stdout
warn("Failed to shellout to vagrant to check the login status. Error: #{error_output}")
return false
end
return true if shellout.stdout.match?(/Currently logged in/)
false
end
def duration(total)
total = 0 if total.nil?
minutes = (total / 60).to_i
seconds = (total - (minutes * 60))
format("%dm%.2fs", minutes, seconds)
end
def box_metadata(metadata_file)
metadata = {}
file = File.read(metadata_file)
json = JSON.parse(file)
# metadata needed for upload: boxname, version, provider, box filename
metadata["name"] = json["name"]
metadata["version"] = json["version"]
metadata["box_basename"] = json["box_basename"]
metadata["packer"] = json["packer"]
metadata["vagrant"] = json["vagrant"]
metadata["providers"] = {}
json["providers"].each do |provider|
metadata["providers"][provider["name"]] = provider.reject { |k, _| k == "name" }
end
metadata
end
def metadata_files
@metadata_files ||= Dir.glob("builds/*.json")
end
def builds_yml
YAML.load(File.read("builds.yml"))
end
def build_list
bit32 = []
bit64 = []
builds_yml["public"].each do |platform, versions|
versions.each do |version, archs|
archs.each do |arch|
folder = case platform
when "opensuse-leap"
"opensuse"
when "oracle"
"oraclelinux"
else
platform
end
case arch
when "i386"
bit32 << "#{folder}/#{platform}-#{version}-#{arch}"
else
bit64 << "#{folder}/#{platform}-#{version}-#{arch}"
end
end
end
end
bit64 + bit32
end
def private_box?(boxname)
proprietary_os_list = %w{macos windows sles solaris rhel}
proprietary_os_list.any? { |p| boxname.include?(p) }
end
def macos?
!!(RUBY_PLATFORM =~ /darwin/)
end
def unix?
!windows?
end
def windows?
!!(RUBY_PLATFORM =~ /mswin|mingw|windows/)
end
end