Module: MakeRubygemDebs

Defined in:
lib/make-rubygem-debs.rb

Constant Summary collapse

FPM =
gem_executable_presence_check 'fpm'
BUNDLE =
gem_executable_presence_check 'bundle', 'bundler'

Class Method Summary collapse

Class Method Details

.gem_executable_presence_check(executable, gem = executable) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/make-rubygem-debs.rb', line 41

def self.gem_executable_presence_check executable, gem = executable
  result = `which #{executable}`
  if result.empty?
    raise RuntimeError, "Please install #{gem}, try `gem install #{gem}`."
  end
  return result
end

.make_rubygem_debs(topdir) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/make-rubygem-debs.rb', line 52

def self.make_rubygem_debs topdir
  depends = []
  gems = Dir.chdir topdir do
    if not File.exists? "Gemfile.lock"
      raise RuntimeError, "There is no Gemfile.lock within #{topdir}."
    end
    `bundle list`.split("\n")[1..-1].map do |line|
      name, version = line.split[1..2]
      [name, version[1..-2]]
    end
  end
  debdir = "#{topdir}/rubygem-debs"
  `mkdir -p "#{debdir}"`
  Dir.chdir debdir do
    gems.each do |name, version|
      puts "Trying to make a .deb for #{name} #{version} ..."
      `fpm -s gem -t deb -v #{version} #{name}`
      deb_name = "rubygem-" + name.gsub("_", "-")
      deb_file = "#{deb_name}_#{version}"
      deb = Dir.entries('.').select {|file| file.match deb_file}
      if not deb.empty?
        puts "Successfully created #{deb[0]}."
      else
        raise RuntimeError, "Failed to a .deb for #{name} #{version}."
      end
      depends << "#{deb_name} (>= #{version})"
    end
    control = File.open 'control', 'w'
    control.write "Depends: #{depends.join ", "}\n"
    control.close
  end
end