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
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
|