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.
73 lines
1.6 KiB
73 lines
1.6 KiB
4 years ago
|
require "bento/common"
|
||
|
require "mixlib/shellout" unless defined?(Mixlib::ShellOut)
|
||
|
|
||
|
class BuildMetadata
|
||
|
include Common
|
||
|
|
||
|
def initialize(template, build_timestamp, override_version)
|
||
|
@template = template
|
||
|
@build_timestamp = build_timestamp
|
||
|
@override_version = override_version
|
||
|
end
|
||
|
|
||
|
def read
|
||
|
{
|
||
|
name: name,
|
||
|
version: version,
|
||
|
build_timestamp: build_timestamp,
|
||
|
git_revision: git_revision,
|
||
|
git_status: git_clean? ? "clean" : "dirty",
|
||
|
box_basename: box_basename,
|
||
|
template: template_vars.fetch("template", UNKNOWN),
|
||
|
packer: packer_ver,
|
||
|
}
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
UNKNOWN = "__unknown__".freeze
|
||
|
|
||
|
attr_reader :template, :build_timestamp, :override_version
|
||
|
|
||
|
def box_basename
|
||
|
"#{name.gsub("/", "__")}-#{version}"
|
||
|
end
|
||
|
|
||
|
def git_revision
|
||
|
`git rev-parse HEAD`.strip
|
||
|
end
|
||
|
|
||
|
def git_clean?
|
||
|
`git status --porcelain`.strip.empty?
|
||
|
end
|
||
|
|
||
|
def merged_vars
|
||
|
@merged_vars ||= begin
|
||
|
if File.exist?("#{template}.variables.json")
|
||
|
template_vars.merge(JSON.load(IO.read("#{template}.variables.json")))
|
||
|
else
|
||
|
template_vars
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def name
|
||
|
merged_vars.fetch("name", template)
|
||
|
end
|
||
|
|
||
|
def template_vars
|
||
|
@template_vars ||= JSON.load(IO.read("#{template}.json")).fetch("variables")
|
||
|
end
|
||
|
|
||
|
def version
|
||
|
override_version || merged_vars.fetch("version", "#{UNKNOWN}.TIMESTAMP")
|
||
|
.rpartition(".").first.concat(build_timestamp.to_s)
|
||
|
end
|
||
|
|
||
|
def packer_ver
|
||
|
cmd = Mixlib::ShellOut.new("packer --version")
|
||
|
cmd.run_command
|
||
|
cmd.stdout.split("\n")[0]
|
||
|
end
|
||
|
end
|