set up distribution mechanisms
This commit is contained in:
1 parent
1cbb295b0d
commit
f358d897fa
9 files changed
+239
-8
No files matched your search
@@ -1,3 +1,14 @@
|
|||||||
source "http://rubygems.org"
|
source "http://rubygems.org"
|
||||||
|
|
||||||
gemspec
|
gemspec
|
||||||
|
|
||||||
|
group :development do
|
||||||
|
gem 'parka'
|
||||||
|
gem 'rake'
|
||||||
|
gem 'ronn'
|
||||||
|
gem 'fakefs', '~> 0.2.1'
|
||||||
|
gem 'rcov', '~> 0.9.8'
|
||||||
|
gem 'rr', '~> 1.0.2'
|
||||||
|
gem 'rspec', '~> 2.6.0'
|
||||||
|
gem "rubyzip"
|
||||||
|
end
|
||||||
@@ -36,6 +36,7 @@ GEM
|
|||||||
rspec-expectations (2.6.0)
|
rspec-expectations (2.6.0)
|
||||||
diff-lcs (~> 1.1.2)
|
diff-lcs (~> 1.1.2)
|
||||||
rspec-mocks (2.6.0)
|
rspec-mocks (2.6.0)
|
||||||
|
rubyzip (0.9.4)
|
||||||
term-ansicolor (1.0.6)
|
term-ansicolor (1.0.6)
|
||||||
thor (0.14.6)
|
thor (0.14.6)
|
||||||
|
|
||||||
@@ -51,3 +52,4 @@ DEPENDENCIES
|
|||||||
ronn
|
ronn
|
||||||
rr (~> 1.0.2)
|
rr (~> 1.0.2)
|
||||||
rspec (~> 2.6.0)
|
rspec (~> 2.6.0)
|
||||||
|
rubyzip
|
||||||
@@ -54,3 +54,115 @@ task :pages => "man:commit" do
|
|||||||
git checkout master
|
git checkout master
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
## dist
|
||||||
|
|
||||||
|
require "erb"
|
||||||
|
require "fileutils"
|
||||||
|
require "tmpdir"
|
||||||
|
|
||||||
|
def assemble(source, target, perms=0644)
|
||||||
|
FileUtils.mkdir_p(File.dirname(target))
|
||||||
|
File.open(target, "w") do |f|
|
||||||
|
f.puts ERB.new(File.read(source)).result(binding)
|
||||||
|
end
|
||||||
|
File.chmod(perms, target)
|
||||||
|
end
|
||||||
|
|
||||||
|
def assemble_distribution(target_dir=Dir.pwd)
|
||||||
|
distribution_files.each do |source|
|
||||||
|
target = source.gsub(/^#{project_root}/, target_dir)
|
||||||
|
FileUtils.mkdir_p(File.dirname(target))
|
||||||
|
FileUtils.cp(source, target)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
GEM_BLACKLIST = %w( bundler foreman )
|
||||||
|
|
||||||
|
def assemble_gems(target_dir=Dir.pwd)
|
||||||
|
lines = %x{ bundle show }.strip.split("\n")
|
||||||
|
raise "error running bundler" unless $?.success?
|
||||||
|
|
||||||
|
%x{ env BUNDLE_WITHOUT="development:test" bundle show }.split("\n").each do |line|
|
||||||
|
if line =~ /^ \* (.*?) \((.*?)\)/
|
||||||
|
next if GEM_BLACKLIST.include?($1)
|
||||||
|
puts "vendoring: #{$1}-#{$2}"
|
||||||
|
gem_dir = %x{ bundle show #{$1} }.strip
|
||||||
|
FileUtils.mkdir_p "#{target_dir}/vendor/gems"
|
||||||
|
%x{ cp -R "#{gem_dir}" "#{target_dir}/vendor/gems" }
|
||||||
|
end
|
||||||
|
end.compact
|
||||||
|
end
|
||||||
|
|
||||||
|
def beta?
|
||||||
|
Foreman::VERSION.to_s =~ /pre/
|
||||||
|
end
|
||||||
|
|
||||||
|
def clean(file)
|
||||||
|
rm file if File.exists?(file)
|
||||||
|
end
|
||||||
|
|
||||||
|
def distribution_files
|
||||||
|
require "foreman/distribution"
|
||||||
|
Foreman::Distribution.files
|
||||||
|
end
|
||||||
|
|
||||||
|
def mkchdir(dir)
|
||||||
|
FileUtils.mkdir_p(dir)
|
||||||
|
Dir.chdir(dir) do |dir|
|
||||||
|
yield(File.expand_path(dir))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def pkg(filename)
|
||||||
|
File.expand_path("../pkg/#{filename}", __FILE__)
|
||||||
|
end
|
||||||
|
|
||||||
|
def project_root
|
||||||
|
File.dirname(__FILE__)
|
||||||
|
end
|
||||||
|
|
||||||
|
def resource(name)
|
||||||
|
File.expand_path("../dist/resources/#{name}", __FILE__)
|
||||||
|
end
|
||||||
|
|
||||||
|
def s3_connect
|
||||||
|
return if @s3_connected
|
||||||
|
|
||||||
|
require "aws/s3"
|
||||||
|
|
||||||
|
unless ENV["HEROKU_RELEASE_ACCESS"] && ENV["HEROKU_RELEASE_SECRET"]
|
||||||
|
puts "please set HEROKU_RELEASE_ACCESS and HEROKU_RELEASE_SECRET in your environment"
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
|
||||||
|
AWS::S3::Base.establish_connection!(
|
||||||
|
:access_key_id => ENV["HEROKU_RELEASE_ACCESS"],
|
||||||
|
:secret_access_key => ENV["HEROKU_RELEASE_SECRET"]
|
||||||
|
)
|
||||||
|
|
||||||
|
@s3_connected = true
|
||||||
|
end
|
||||||
|
|
||||||
|
def store(package_file, filename, bucket="assets.heroku.com")
|
||||||
|
s3_connect
|
||||||
|
puts "storing: #{filename}"
|
||||||
|
AWS::S3::S3Object.store(filename, File.open(package_file), bucket, :access => :public_read)
|
||||||
|
end
|
||||||
|
|
||||||
|
def tempdir
|
||||||
|
Dir.mktmpdir do |dir|
|
||||||
|
Dir.chdir(dir) do
|
||||||
|
yield(dir)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def version
|
||||||
|
require "foreman/version"
|
||||||
|
Foreman::VERSION
|
||||||
|
end
|
||||||
|
|
||||||
|
Dir[File.expand_path("../dist/**/*.rake", __FILE__)].each do |rake|
|
||||||
|
import rake
|
||||||
|
end
|
||||||
Vendored
+14
@@ -0,0 +1,14 @@
|
|||||||
|
file pkg("foreman-#{version}.gem") => distribution_files do |t|
|
||||||
|
sh "gem build foreman.gemspec"
|
||||||
|
sh "mv foreman-#{version}.gem #{t.name}"
|
||||||
|
end
|
||||||
|
|
||||||
|
task "gem:build" => pkg("foreman-#{version}.gem")
|
||||||
|
|
||||||
|
task "gem:clean" do
|
||||||
|
clean pkg("foreman-#{version}.gem")
|
||||||
|
end
|
||||||
|
|
||||||
|
task "gem:release" => "gem:build" do |t|
|
||||||
|
sh "parka push -f #{pkg("foreman-#{version}.gem")}"
|
||||||
|
end
|
||||||
Vendored
+52
@@ -0,0 +1,52 @@
|
|||||||
|
require "erb"
|
||||||
|
|
||||||
|
file pkg("foreman-#{version}.pkg") => distribution_files do |t|
|
||||||
|
tempdir do |dir|
|
||||||
|
mkchdir("foreman") do
|
||||||
|
assemble_distribution
|
||||||
|
assemble_gems
|
||||||
|
assemble resource("pkg/foreman"), "bin/foreman", 0755
|
||||||
|
end
|
||||||
|
|
||||||
|
kbytes = %x{ du -ks foreman | cut -f 1 }
|
||||||
|
num_files = %x{ find foreman | wc -l }
|
||||||
|
|
||||||
|
mkdir_p "pkg"
|
||||||
|
mkdir_p "pkg/Resources"
|
||||||
|
mkdir_p "pkg/foreman-#{version}.pkg"
|
||||||
|
|
||||||
|
dist = File.read(resource("pkg/Distribution.erb"))
|
||||||
|
dist = ERB.new(dist).result(binding)
|
||||||
|
File.open("pkg/Distribution", "w") { |f| f.puts dist }
|
||||||
|
|
||||||
|
dist = File.read(resource("pkg/PackageInfo.erb"))
|
||||||
|
dist = ERB.new(dist).result(binding)
|
||||||
|
File.open("pkg/foreman-#{version}.pkg/PackageInfo", "w") { |f| f.puts dist }
|
||||||
|
|
||||||
|
mkdir_p "pkg/foreman-#{version}.pkg/Scripts"
|
||||||
|
cp resource("pkg/postinstall"), "pkg/foreman-#{version}.pkg/Scripts/postinstall"
|
||||||
|
chmod 0755, "pkg/foreman-#{version}.pkg/Scripts/postinstall"
|
||||||
|
|
||||||
|
sh %{ mkbom -s foreman pkg/foreman-#{version}.pkg/Bom }
|
||||||
|
|
||||||
|
Dir.chdir("foreman") do
|
||||||
|
sh %{ pax -wz -x cpio . > ../pkg/foreman-#{version}.pkg/Payload }
|
||||||
|
end
|
||||||
|
|
||||||
|
sh %{ pkgutil --flatten pkg foreman-#{version}.pkg }
|
||||||
|
|
||||||
|
cp_r "foreman-#{version}.pkg", t.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
task "pkg:build" => pkg("foreman-#{version}.pkg")
|
||||||
|
|
||||||
|
task "pkg:clean" do
|
||||||
|
clean pkg("foreman-#{version}.pkg")
|
||||||
|
end
|
||||||
|
|
||||||
|
task "pkg:release" => "pkg:build" do |t|
|
||||||
|
store pkg("foreman-#{version}.pkg"), "foreman/foreman-#{version}.pkg"
|
||||||
|
store pkg("foreman-#{version}.pkg"), "foreman/foreman-beta.pkg" if beta?
|
||||||
|
store pkg("foreman-#{version}.pkg"), "foreman/foreman.pkg" unless beta?
|
||||||
|
end
|
||||||
Vendored
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require "pathname"
|
||||||
|
bin_file = Pathname.new(__FILE__).realpath
|
||||||
|
|
||||||
|
gem_dir = File.expand_path("../vendor/gems", bin_file)
|
||||||
|
Dir["#{gem_dir}/**/lib"].each do |libdir|
|
||||||
|
$:.unshift libdir
|
||||||
|
end
|
||||||
|
|
||||||
|
$:.unshift File.expand_path("../lib", bin_file)
|
||||||
|
|
||||||
|
require "foreman/cli"
|
||||||
|
|
||||||
|
Foreman::CLI.start
|
||||||
Vendored
+24
@@ -0,0 +1,24 @@
|
|||||||
|
file pkg("foreman-#{version}.tgz") => distribution_files do |t|
|
||||||
|
tempdir do |dir|
|
||||||
|
mkchdir("foreman") do
|
||||||
|
assemble_distribution
|
||||||
|
assemble_gems
|
||||||
|
rm_rf "bin"
|
||||||
|
assemble resource("tgz/foreman"), "foreman", 0755
|
||||||
|
end
|
||||||
|
|
||||||
|
sh "tar czvf #{t.name} foreman"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
task "tgz:build" => pkg("foreman-#{version}.tgz")
|
||||||
|
|
||||||
|
task "tgz:clean" do
|
||||||
|
clean pkg("foreman-#{version}.tgz")
|
||||||
|
end
|
||||||
|
|
||||||
|
task "tgz:release" => "tgz:build" do |t|
|
||||||
|
store pkg("foreman-#{version}.tgz"), "foreman/foreman-#{version}.tgz"
|
||||||
|
store pkg("foreman-#{version}.tgz"), "foreman/foreman-beta.tgz" if beta?
|
||||||
|
store pkg("foreman-#{version}.tgz"), "foreman/foreman.tgz" unless beta?
|
||||||
|
end
|
||||||
@@ -18,12 +18,4 @@ Gem::Specification.new do |gem|
|
|||||||
|
|
||||||
gem.add_dependency 'term-ansicolor', '~> 1.0.5'
|
gem.add_dependency 'term-ansicolor', '~> 1.0.5'
|
||||||
gem.add_dependency 'thor', '>= 0.13.6'
|
gem.add_dependency 'thor', '>= 0.13.6'
|
||||||
|
|
||||||
gem.add_development_dependency 'parka'
|
|
||||||
gem.add_development_dependency 'rake'
|
|
||||||
gem.add_development_dependency 'ronn'
|
|
||||||
gem.add_development_dependency 'fakefs', '~> 0.2.1'
|
|
||||||
gem.add_development_dependency 'rcov', '~> 0.9.8'
|
|
||||||
gem.add_development_dependency 'rr', '~> 1.0.2'
|
|
||||||
gem.add_development_dependency 'rspec', '~> 2.6.0'
|
|
||||||
end
|
end
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
module Foreman
|
||||||
|
module Distribution
|
||||||
|
def self.files
|
||||||
|
Dir[File.expand_path("../../../{bin,data,lib}/**/*", __FILE__)].select do |file|
|
||||||
|
File.file?(file)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in new issue
Block a user