Skip to content

Instantly share code, notes, and snippets.

@goldmann
Created December 16, 2010 19:11
Show Gist options
  • Save goldmann/743820 to your computer and use it in GitHub Desktop.
Save goldmann/743820 to your computer and use it in GitHub Desktop.
config_opts['root'] = 'fedora-rawhide-x86_64'
config_opts['target_arch'] = 'x86_64'
config_opts['chroot_setup_cmd'] = 'groupinstall buildsys-build'
config_opts['dist'] = 'fc13' # only useful for --resultdir variable subst
#config_opts['createrepo_on_rpms'] = True
config_opts['yum.conf'] = """
[main]
cachedir=/var/cache/yum
debuglevel=1
reposdir=/dev/null
logfile=/var/log/yum.log
retries=20
obsoletes=1
gpgcheck=0
assumeyes=1
syslog_ident=mock
syslog_device=
# grub/syslinux on x86_64 need glibc-devel.i386 which pulls in glibc.i386, need to exclude all
# .i?86 packages except these.
#exclude=[0-9A-Za-fh-z]*.i?86 g[0-9A-Za-km-z]*.i?86 gl[0-9A-Za-hj-z]*.i?86 gli[0-9A-Zac-z]*.i?86 glib[0-9A-Za-bd-z]*.i?86
# The above is not needed anymore with yum multilib policy of "best" which is the default in Fedora.
# repos
[fedora]
name=fedora
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64
failovermethod=priority
[boxgrinder]
name=boxgrinder
baseurl=file:///home/goldmann/git/mock/RPMS # CHANGE THIS
cost=10
[local]
name=local
baseurl=http://kojipkgs.fedoraproject.org/repos/dist-rawhide/latest/x86_64/
cost=2000
enabled=0
"""
require 'rbconfig'
require 'fileutils'
specs = [
"boxgrinder-core/rubygem-boxgrinder-core.spec",
"boxgrinder-build/rubygem-boxgrinder-build.spec",
"boxgrinder-build-plugins/os/rpm-based/rubygem-boxgrinder-build-rpm-based-os-plugin.spec",
"boxgrinder-build-plugins/os/rhel/rubygem-boxgrinder-build-rhel-os-plugin.spec",
"boxgrinder-build-plugins/os/centos/rubygem-boxgrinder-build-centos-os-plugin.spec",
"boxgrinder-build-plugins/os/fedora/rubygem-boxgrinder-build-fedora-os-plugin.spec",
"boxgrinder-build-plugins/platform/vmware/rubygem-boxgrinder-build-vmware-platform-plugin.spec",
"boxgrinder-build-plugins/platform/ec2/rubygem-boxgrinder-build-ec2-platform-plugin.spec",
"boxgrinder-build-plugins/delivery/s3/rubygem-boxgrinder-build-s3-delivery-plugin.spec",
"boxgrinder-build-plugins/delivery/ebs/rubygem-boxgrinder-build-ebs-delivery-plugin.spec",
"boxgrinder-build-plugins/delivery/local/rubygem-boxgrinder-build-local-delivery-plugin.spec",
"boxgrinder-build-plugins/delivery/sftp/rubygem-boxgrinder-build-sftp-delivery-plugin.spec"
]
configdir = "#{ENV['HOME']}/mock"
resultdir = "#{configdir}/output"
rpmsdir = "#{resultdir}/RPMS"
srpmsdir = "#{resultdir}/SRPMS"
target = 'fedora'
version = 'rawhide'
arch = RbConfig::CONFIG['host_cpu']
specs.each do |spec|
rubygem = File.basename(spec, ".spec")
rpm_version = `rpm --specfile #{spec} -q --qf '%{Version}\\n' 2> /dev/null`.split("\n").first
desc "Build Gem for #{rubygem}"
task "gem:#{rubygem}" do
Dir.chdir(File.dirname(spec)) do
system "rake clean manifest gem"
exit 1 unless $? == 0
end
end
desc "Build SRPM for #{rubygem}"
task "srpm:#{rubygem}" => ["gem:#{rubygem}"] do
# Remove previous SRPM's for this version
FileUtils.rm_rf Dir.glob("#{srpmsdir}/#{rubygem}-#{rpm_version}-*.rpm"), :verbose => true
cmd = "mock -r #{target}-#{version}-#{arch} --buildsrpm --sources #{File.dirname(spec)}/pkg/ --spec #{spec} --resultdir #{srpmsdir}"
puts "BUILDING SRPM #{File.basename(spec, ".spec")} with '#{cmd}'"
system cmd
exit 1 unless $? == 0
puts "UPDATING local SRPM boxgrinder repository..."
system "createrepo #{srpmsdir}"
exit 1 unless $? == 0
end
desc "Build RPM for #{rubygem}"
task "rpm:#{rubygem}" => ["srpm:#{rubygem}"] do
# Remove previous RPM's for this version
FileUtils.rm_rf Dir.glob("#{rpmsdir}/#{rubygem}-#{rpm_version}-*.rpm"), :verbose => true
cmd = "mock --configdir=#{configdir} -r #{target}-#{version}-#{arch} --rebuild #{srpmsdir}/#{rubygem}-#{rpm_version}-*.rpm --resultdir #{rpmsdir}"
puts "BUILDING RPM #{rubygem}: '#{cmd}'"
system cmd
exit 1 unless $? == 0
# Remove SRPMs from RPMs directory
FileUtils.rm_rf Dir.glob("#{rpmsdir}/*.src.rpm"), :verbose => true
puts "UPDATING local RPM boxgrinder repository..."
system "createrepo #{rpmsdir}"
exit 1 unless $? == 0
end
end
task "srpm:clean" do
FileUtils.rm_rf(srpmsdir, :verbose => true)
end
task "rpm:clean" do
FileUtils.rm_rf(rpmsdir, :verbose => true)
end
task "rpm:init_repo" do
FileUtils.mkdir_p rpmsdir, :verbose => true
system "createrepo #{rpmsdir}"
exit 1 unless $? == 0
end
desc "Build all SRPMs"
task "srpm:all" => (["srpm:clean"] << specs.collect { |spec| "srpm:#{File.basename(spec, ".spec")}" }).flatten
desc "Build all RPMs"
task "rpm:all" => (["rpm:clean", "rpm:init_repo"] << specs.collect { |spec| "rpm:#{File.basename(spec, ".spec")}" }).flatten
rake srpm:all rpm:all
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment