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.
 
 
 
 

125 lines
3.0 KiB

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