lib/devinstall.rb in devinstall-0.2.2 vs lib/devinstall.rb in devinstall-0.2.3
- old
+ new
@@ -11,126 +11,142 @@
class Pkg
# @param [Symbol] type
def get_version(type)
if type == :deb
- deb_changelog = File.expand_path "#{Settings.local[:folder]}/#{@package}/debian/changelog" # This is the folder that should be checked
- deb_package_version =File.open(deb_changelog, 'r').gets.chomp.sub(/^.*\((.*)\).*$/, '\1')
- @_package_version[:deb]=deb_package_version
+ begin
+ deb_changelog = File.expand_path "#{Settings.local[:folder]}/#{@package}/debian/changelog" # This is the folder that should be checked
+ deb_package_version = File.open(deb_changelog, 'r') { |f| f.gets.chomp.sub(/^.*\((.*)\).*$/, '\1') }
+ @_package_version[:deb] = deb_package_version
+
+ rescue IOError => e
+ puts "IO Error while opening #{deb_changelog}"
+ puts "Aborting \n #{e}"
+ exit! 1
+ end
end
end
# @param [String] package
def initialize (package)
# curently implemented only for .deb packages (for .rpm later :D)
- @package =package.to_sym
- @_package_version =Hash.new # versions for types:
- @package_files =Hash.new
- arch =Settings.build[:arch]
- pname ="#{package}_#{get_version :deb}"
- @package_files[:deb] ={deb: "#{pname}_#{arch}.deb",
- tgz: "#{pname}.tar.gz",
- dsc: "#{pname}.dsc",
- chg: "#{pname}_amd64.changes"}
+ @package = package.to_sym
+ @_package_version = Hash.new # versions for types:
+ @package_files = Hash.new
+ arch = Settings.build[:arch]
+ pname = "#{package}_#{get_version :deb}"
+ @package_files[:deb] = {deb: "#{pname}_#{arch}.deb",
+ tgz: "#{pname}.tar.gz",
+ dsc: "#{pname}.dsc",
+ chg: "#{pname}_amd64.changes"}
end
- def upload (environment)
- scp =Settings.base[:scp]
- repo =Hash.new
- type =Settings.repos[:environments][environment][:type]
+ def upload (env)
+ scp = Settings.base[:scp]
+ repo = {}
+ type = Settings.repos[:environments][env][:type]
[:user, :host, :folder].each do |k|
- fail("Unexistent key repos:#{environment}:#{k}") unless Settings.repos[:environments][environment].has_key?(k)
- repo[k]=Settings.repos[:environments][environment][k]
+ fail("Unexistent key repos:#{environment}:#{k}") unless Settings.repos[:environments][env].has_key?(k)
+ repo[k] = Settings.repos[:environments][env][k]
end
- build(type)
@package_files[type].each do |p|
system("#{scp} #{Settings.local[:temp]}/#{p} #{repo[:user]}@#{repo[:host]}:#{repo[:folder]}")
end
end
# @param [Symbol] type
def build (type)
puts "Building package #{@package} type #{type.to_s}"
- unless Settings.packages[@package].has_key?(type)
- puts("Package '#{@package}' cannot be built for the required environment")
- puts("undefined build configuration for '#{type.to_s}'")
- exit!(1)
+ unless Settings.packages[@package].has_key? type
+ puts "Package '#{@package}' cannot be built for the required environment"
+ puts "undefined build configuration for '#{type.to_s}'"
+ exit! 1
end
- build =Hash.new
+ build = {}
[:user, :host, :folder, :target].each do |k|
- unless Settings.build.has_key?(k)
- puts("Undefined key 'build:#{k.to_s}:'")
- exit!(1)
+ unless Settings.build.has_key? k
+ puts "Undefined key 'build:#{k.to_s}:'"
+ exit! 1
end
- build[k]=Settings.build[k]
+ build[k] = Settings.build[k]
end
- ssh =Settings.base[:ssh]
- build_command=Settings.packages[@package][type][:build_command]
- rsync =Settings.base[:rsync]
- local_folder =File.expand_path Settings.local[:folder]
- local_temp =File.expand_path Settings.local[:temp]
+ ssh = Settings.base[:ssh]
+ build_command = Settings.packages[@package][type][:build_command]
+ rsync = Settings.base[:rsync]
+ local_folder = File.expand_path Settings.local[:folder]
+ local_temp = File.expand_path Settings.local[:temp]
build_command = build_command.gsub('%f', build[:folder]).
gsub('%t', Settings.build[:target]).
gsub('%p', @package.to_s).
gsub('%T', type.to_s)
upload_sources("#{local_folder}/", "#{build[:user]}@#{build[:host]}:#{build[:folder]}")
- system("#{ssh} #{build[:user]}@#{build[:host]} \"#{build_command}\"")
+ res = system("#{ssh} #{build[:user]}@#{build[:host]} \"#{build_command}\"")
+ unless res
+ puts 'Build error'
+ puts 'Aborting!'
+ exit! 1
+ end
@package_files[type].each do |p, t|
puts "Receiving target #{p.to_s} for #{t.to_s}"
- system("#{rsync} -az #{build[:user]}@#{build[:host]}:#{build[:target]}/#{t} #{local_temp}")
+ res = system("#{rsync} -az #{build[:user]}@#{build[:host]}:#{build[:target]}/#{t} #{local_temp}")
+ unless res
+ puts 'File downloading error'
+ puts 'Aborting!'
+ exit! 1
+ end
end
end
- def run_tests(environment)
+ def run_tests(env)
# for tests we will use aprox the same setup as for build
- test =Hash.new
+ test = {}
[:user, :machine, :command, :folder].each do |k|
- unless Settings.tests[environment].has_key?(k)
+ unless Settings.tests[env].has_key? k
puts("Undefined key 'tests:#{environment}:#{k.to_s}:'")
- exit!(1)
+ exit! 1
end
- test[k]=Settings.tests[environment][k]
+ test[k] = Settings.tests[env][k]
end
- ssh =Settings.base[:ssh]
+ ssh = Settings.base[:ssh]
test[:command] = test[:command].gsub('%f', test[:folder]).
gsub('%t', Settings.build[:target]).
gsub('%p', @package.to_s)
- local_folder =File.expand_path Settings.local[:folder] #take the sources from the local folder
+ local_folder = File.expand_path Settings.local[:folder] #take the sources from the local folder
upload_sources("#{local_folder}/", "#{test[:user]}@#{test[:machine]}:#{test[:folder]}") # upload them to the test machine
puts "Running all tests for the #{environment} environment"
puts "This will take some time"
- ret=system("#{ssh} #{test[:user]}@#{test[:machine]} \"#{test[:command]}\"")
+ ret = system("#{ssh} #{test[:user]}@#{test[:machine]} \"#{test[:command]}\"")
if ret
puts "Errors during test. Aborting current procedure"
exit! 1
end
- rescue Exception => ee
+ rescue => ee
puts "Unknown exception during parsing config file"
puts "Aborting (#{ee})"
exit! 1
end
def install (environment)
puts "Installing #{@package} in #{environment} environment."
- sudo =Settings.base[:sudo]
- scp =Settings.base[:scp]
- type=Settings.install[:environments][environment][:type].to_sym
- local_temp =Settings.local[:temp]
- install=Hash.new
+ local_temp = Settings.local[:temp]
+ sudo = Settings.base[:sudo]
+ scp = Settings.base[:scp]
+ type = Settings.install[:environments][environment][:type].to_sym
+ install = {}
[:user, :host, :folder].each do |k|
- unless Settings.install[:environments][environment].has_key?(k)
+ unless Settings.install[:environments][environment].has_key? k
puts "Undefined key 'install:#{environment.to_s}:#{k.to_s}'"
exit! 1
end
- install[k]=Settings.install[:environments][environment][k]
+ install[k] = Settings.install[:environments][environment][k]
end
case type
when :deb
system("#{scp} #{local_temp}/#{@package_files[type][:deb]} #{install[:user]}@#{install[:host]}:#{install[:folder]}")
system("#{sudo} #{Settings.build[:user]}@#{Settings.build[:host]} /usr/bin/dpkg -i '#{install[:folder]}/#{@package_files[type][:deb]}'")
@@ -139,11 +155,17 @@
exit! 1
end
end
def upload_sources (source, dest)
- rsync =Settings.base[:rsync]
- system("#{rsync} -az #{source} #{dest}")
+ rsync = Settings.base[:rsync]
+ res = system("#{rsync} -az #{source} #{dest}")
+ unless res
+ puts "Rsync error"
+ puts "Aborting!"
+ exit! 1
+ end
+ res
end
end
end