class Akabei::Builder
Attributes
signer[RW]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/akabei/builder.rb, line 14 def initialize(opts = {}) self.srcdest = opts[:srcdest] self.pkgdest = opts[:pkgdest] self.logdest = opts[:logdest] self.signer = opts[:signer] end
Public Instance Methods
build_package(dir, chroot_tree)
click to toggle source
# File lib/akabei/builder.rb, line 21 def build_package(dir, chroot_tree) Dir.mktmpdir do |tmp_pkgdest| wrap_dir(:srcdest) do wrap_dir(:logdest) do tmp_pkgdest = Pathname.new(tmp_pkgdest) env = { SRCDEST: srcdest.realpath, PKGDEST: tmp_pkgdest.realpath, LOGDEST: logdest.realpath, } chroot_tree.makechrootpkg(dir, env) gather_packages(tmp_pkgdest) end end end end
copy_and_sign_package(package_path, dest)
click to toggle source
# File lib/akabei/builder.rb, line 47 def copy_and_sign_package(package_path, dest) FileUtils.cp(package_path, dest) if signer signer.detach_sign(dest) end rescue => e begin dest.unlink rescue Errno::ENOENT end raise e end
find_source_package(srcpkgdest)
click to toggle source
# File lib/akabei/builder.rb, line 105 def find_source_package(srcpkgdest) children = srcpkgdest.each_child.to_a if children.empty? raise Error.new("makepkg --source generated nothing") elsif children.size > 1 raise Error.new("makepkg --source generated multiple files???: #{children.map(&:to_s)}") else children.first end end
gather_packages(tmp_pkgdest)
click to toggle source
# File lib/akabei/builder.rb, line 38 def gather_packages(tmp_pkgdest) pkgdest.mkpath tmp_pkgdest.each_child.map do |package_path| dest = pkgdest.join(package_path.basename) copy_and_sign_package(package_path, dest) Package.new(dest) end end
makepkg_source(dir, srcdest, srcpkgdest, builddir)
click to toggle source
# File lib/akabei/builder.rb, line 96 def makepkg_source(dir, srcdest, srcpkgdest, builddir) env = { SRCDEST: srcdest.realpath, SRCPKGDEST: srcpkgdest.realpath, BUILDDIR: builddir.realpath, } System.system(%w[makepkg --source], chdir: dir, env: env) end
with_source_package(dir, &block)
click to toggle source
# File lib/akabei/builder.rb, line 78 def with_source_package(dir, &block) dir = Pathname.new(dir) Dir.mktmpdir do |tmp_srcpkgdest| tmp_srcpkgdest = Pathname.new(tmp_srcpkgdest) Dir.mktmpdir do |builddir| builddir = Pathname.new(builddir) wrap_dir(:srcdest) do makepkg_source(dir, srcdest, tmp_srcpkgdest, builddir) end end srcpkg = find_source_package(tmp_srcpkgdest) # Remove symlink created by makepkg dir.join(srcpkg.basename).unlink block.call(srcpkg) end end
wrap_dir(attr, &block)
click to toggle source
# File lib/akabei/builder.rb, line 60 def wrap_dir(attr, &block) old_dir = instance_variable_get("@#{attr}") if old_dir.nil? Dir.mktmpdir do |tmp| dir = Pathname.new(tmp) instance_variable_set("@#{attr}", dir) # Must be world-executable because it is referred from inside chroot. dir.chmod(0755) block.call end else old_dir.mkpath block.call end ensure instance_variable_set("@#{attr}", old_dir) end