Skip to content

Commit 5ae2c12

Browse files
committedJan 3, 2015
Added rake task to package pact-mock-service as a standalone executable using Travelling Ruby.
1 parent b238f2a commit 5ae2c12

7 files changed

+108
-3
lines changed
 

‎.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@ spec/pacts
2727
log
2828
.idea
2929
reports
30-
Gemfile.lock
30+
Gemfile.lock
31+
packaging/vendor

‎Rakefile

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
require "bundler/gem_tasks"
22

3+
$: << File.join(File.dirname(__FILE__), "lib")
4+
35
Dir.glob('./lib/tasks/**/*.rake').each { |task| load task }
46
Dir.glob('./tasks/**/*.rake').each { |task| load task }
57

‎packaging/bundler-config

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
BUNDLE_PATH: .
2+
BUNDLE_WITHOUT: development
3+
BUNDLE_DISABLE_SHARED_GEMS: '1'

‎packaging/pact-mock-service.rb

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
require 'pact/mock_service/cli'
2+
Pact::MockService::CLI.start

‎packaging/wrapper.sh

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Figure out where this script is located.
5+
SELFDIR="`dirname \"$0\"`"
6+
SELFDIR="`cd \"$SELFDIR\" && pwd`"
7+
8+
# Tell Bundler where the Gemfile and gems are.
9+
export BUNDLE_GEMFILE="$SELFDIR/lib/vendor/Gemfile"
10+
unset BUNDLE_IGNORE_CONFIG
11+
12+
# Run the actual app using the bundled Ruby interpreter, with Bundler activated.
13+
exec "$SELFDIR/lib/ruby/bin/ruby" -rbundler/setup -I$SELFDIR/lib/app/lib "$SELFDIR/lib/app/pact-mock-service.rb" $@

‎pact-mock-service.gemspec

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ Gem::Specification.new do |gem|
1111
gem.summary = %q{Provides a mock service for use with Pact}
1212
gem.homepage = "https://github.com/bethesque/pact-mock_service"
1313

14-
gem.files = `git ls-files`.split($/)
14+
gem.files = Dir.glob("{bin,lib}/**/*") + Dir.glob(%w(Gemfile LICENSE.txt README.md CHANGELOG.md))
15+
1516
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
1617
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
1718
gem.require_paths = ["lib"]
@@ -26,7 +27,6 @@ Gem::Specification.new do |gem|
2627
gem.add_runtime_dependency 'json' #Not locking down a version because buncher gem requires 1.6, while other projects use 1.7.
2728
gem.add_runtime_dependency 'webrick'
2829
gem.add_runtime_dependency 'term-ansicolor', '~> 1.0'
29-
3030
gem.add_runtime_dependency 'pact-support', '~> 0.1.1'
3131

3232
gem.add_development_dependency 'rake', '~> 10.0.3'

‎tasks/package.rake

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# For Bundler.with_clean_env
2+
require 'bundler/setup'
3+
require 'pact/mock_service/version'
4+
5+
PACKAGE_NAME = "pact-mock-service"
6+
VERSION = "#{Pact::MockService::VERSION}-1"
7+
TRAVELING_RUBY_VERSION = "20141215-2.1.5"
8+
9+
desc "Package the mock service as a standalone executable"
10+
task :package => ['package:linux:x86', 'package:linux:x86_64', 'package:osx']
11+
12+
namespace :package do
13+
namespace :linux do
14+
desc "Package your app for Linux x86"
15+
task :x86 => [:bundle_install, "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86.tar.gz"] do
16+
create_package("linux-x86")
17+
end
18+
19+
desc "Package your app for Linux x86_64"
20+
task :x86_64 => [:bundle_install, "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86_64.tar.gz"] do
21+
create_package("linux-x86_64")
22+
end
23+
end
24+
25+
desc "Package your app for OS X"
26+
task :osx => [:bundle_install, "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx.tar.gz"] do
27+
create_package("osx")
28+
end
29+
30+
desc "Install gems to local directory"
31+
task :bundle_install do
32+
if RUBY_VERSION !~ /^2\.1\./
33+
abort "You can only 'bundle install' using Ruby 2.1, because that's what Traveling Ruby uses."
34+
end
35+
sh "rm -rf packaging/tmp"
36+
sh "mkdir packaging/tmp"
37+
sh "cp pact-mock-service.gemspec Gemfile Gemfile.lock packaging/tmp/"
38+
sh "mkdir -p packaging/tmp/lib/pact/mock_service"
39+
sh "cp lib/pact/mock_service/version.rb packaging/tmp/lib/pact/mock_service/version.rb"
40+
Bundler.with_clean_env do
41+
sh "cd packaging/tmp && env BUNDLE_IGNORE_CONFIG=1 bundle install --path ../vendor --without development"
42+
end
43+
sh "rm -rf packaging/tmp"
44+
sh "rm -f packaging/vendor/*/*/cache/*"
45+
end
46+
end
47+
48+
file "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86.tar.gz" do
49+
download_runtime("linux-x86")
50+
end
51+
52+
file "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86_64.tar.gz" do
53+
download_runtime("linux-x86_64")
54+
end
55+
56+
file "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx.tar.gz" do
57+
download_runtime("osx")
58+
end
59+
60+
def create_package(target)
61+
package_dir = "#{PACKAGE_NAME}-#{VERSION}-#{target}"
62+
sh "rm -rf #{package_dir}"
63+
sh "mkdir #{package_dir}"
64+
sh "mkdir -p #{package_dir}/lib/app"
65+
sh "cp packaging/pact-mock-service.rb #{package_dir}/lib/app/pact-mock-service.rb"
66+
sh "cp -pR lib #{package_dir}/lib/app"
67+
sh "mkdir #{package_dir}/lib/ruby"
68+
sh "tar -xzf packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-#{target}.tar.gz -C #{package_dir}/lib/ruby"
69+
sh "cp packaging/wrapper.sh #{package_dir}/pact-mock-service"
70+
sh "cp -pR packaging/vendor #{package_dir}/lib/"
71+
sh "cp pact-mock-service.gemspec Gemfile Gemfile.lock #{package_dir}/lib/vendor/"
72+
sh "mkdir #{package_dir}/lib/vendor/.bundle"
73+
sh "cp packaging/bundler-config #{package_dir}/lib/vendor/.bundle/config"
74+
if !ENV['DIR_ONLY']
75+
sh "mkdir -p pkg"
76+
sh "tar -czf pkg/#{package_dir}.tar.gz #{package_dir}"
77+
sh "rm -rf #{package_dir}"
78+
end
79+
end
80+
81+
def download_runtime(target)
82+
sh "cd packaging && curl -L -O --fail " +
83+
"http://d6r77u77i8pq3.cloudfront.net/releases/traveling-ruby-#{TRAVELING_RUBY_VERSION}-#{target}.tar.gz"
84+
end

0 commit comments

Comments
 (0)
Please sign in to comment.