jetpack 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. data/.gitignore +4 -0
  2. data/.wrong +1 -0
  3. data/Gemfile +8 -0
  4. data/Gemfile.lock +23 -0
  5. data/README.markdown +35 -0
  6. data/Rakefile +16 -0
  7. data/bin/preflight +175 -0
  8. data/bin_files/.rake_runner.erb +36 -0
  9. data/bin_files/rake.erb +12 -0
  10. data/bin_files/ruby.erb +4 -0
  11. data/gems/bundler-1.0.18.gem +0 -0
  12. data/gems/bundler-1.1.rc.gem +0 -0
  13. data/gems/jruby-openssl-0.7.4.gem +0 -0
  14. data/install_gem.sh +5 -0
  15. data/jetpack.gemspec +19 -0
  16. data/jetty_files/etc/fake.p12 +0 -0
  17. data/jetty_files/etc/jetty.xml.erb +113 -0
  18. data/jetty_files/jetty-init.erb +702 -0
  19. data/jetty_files/run/.gitkeep +0 -0
  20. data/jetty_files/start.ini +69 -0
  21. data/jetty_files/webapps/.gitkeep +0 -0
  22. data/lib/preflight/settings.rb +48 -0
  23. data/script/ci +57 -0
  24. data/spec/basics_spec.rb +84 -0
  25. data/spec/bundler_spec.rb +120 -0
  26. data/spec/ruby_19_spec.rb +34 -0
  27. data/spec/sample_projects/has_gems_via_bundler/Gemfile +4 -0
  28. data/spec/sample_projects/has_gems_via_bundler/Gemfile.lock +13 -0
  29. data/spec/sample_projects/has_gems_via_bundler/Rakefile +18 -0
  30. data/spec/sample_projects/has_gems_via_bundler/config/preflight.yml +1 -0
  31. data/spec/sample_projects/has_gems_via_bundler/true} +0 -0
  32. data/spec/sample_projects/has_gems_via_bundler_19/Gemfile +8 -0
  33. data/spec/sample_projects/has_gems_via_bundler_19/Gemfile.lock +13 -0
  34. data/spec/sample_projects/has_gems_via_bundler_19/Rakefile +18 -0
  35. data/spec/sample_projects/has_gems_via_bundler_19/config/preflight.yml +2 -0
  36. data/spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/Gemfile +4 -0
  37. data/spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/Rakefile +18 -0
  38. data/spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/config/preflight.yml +1 -0
  39. data/spec/sample_projects/no_dependencies/Rakefile +30 -0
  40. data/spec/sample_projects/no_dependencies/config/preflight.yml +1 -0
  41. data/spec/sample_projects/webapp/Gemfile +3 -0
  42. data/spec/sample_projects/webapp/Gemfile.lock +88 -0
  43. data/spec/sample_projects/webapp/app/controllers/application_controller.rb +5 -0
  44. data/spec/sample_projects/webapp/config.ru +4 -0
  45. data/spec/sample_projects/webapp/config/application.rb +46 -0
  46. data/spec/sample_projects/webapp/config/boot.rb +6 -0
  47. data/spec/sample_projects/webapp/config/environment.rb +5 -0
  48. data/spec/sample_projects/webapp/config/environments/development.rb +25 -0
  49. data/spec/sample_projects/webapp/config/environments/test.rb +35 -0
  50. data/spec/sample_projects/webapp/config/initializers/secret_token.rb +7 -0
  51. data/spec/sample_projects/webapp/config/preflight.yml +6 -0
  52. data/spec/sample_projects/webapp/config/preflight_files/vendor/jetty/etc/custom-project-specific-jetty.xml +5 -0
  53. data/spec/sample_projects/webapp/config/preflight_files/vendor/jetty/etc/template-from-project-jetty.xml.erb +9 -0
  54. data/spec/sample_projects/webapp/config/routes.rb +60 -0
  55. data/spec/sample_projects/webapp/public/index.html +239 -0
  56. data/spec/sample_projects/webapp/script/rails +6 -0
  57. data/spec/spec_helper.rb +48 -0
  58. data/spec/suite.rb +1 -0
  59. data/spec/web_spec.rb +67 -0
  60. data/web_inf_files/web.xml.erb +47 -0
  61. metadata +175 -0
File without changes
@@ -0,0 +1,69 @@
1
+ #===========================================================
2
+ # Jetty start.jar arguments
3
+ # Each line of this file is prepended to the command line
4
+ # arguments # of a call to:
5
+ # java -jar start.jar [arg...]
6
+ #===========================================================
7
+
8
+
9
+
10
+ #===========================================================
11
+ # If the arguements in this file include JVM arguments
12
+ # (eg -Xmx512m) or JVM System properties (eg com.sun.???),
13
+ # then these will not take affect unless the --exec
14
+ # parameter is included or if the output from --dry-run
15
+ # is executed like:
16
+ # eval $(java -jar start.jar --dry-run)
17
+ #
18
+ # Below are some recommended options for Sun's JRE
19
+ #-----------------------------------------------------------
20
+ # --exec
21
+ # -Dcom.sun.management.jmxremote
22
+ # -Dorg.eclipse.jetty.util.log.IGNORED=true
23
+ # -Dorg.eclipse.jetty.util.log.stderr.DEBUG=true
24
+ # -Dorg.eclipse.jetty.util.log.stderr.SOURCE=true
25
+ # -Xmx2000m
26
+ # -Xmn512m
27
+ # -verbose:gc
28
+ # -XX:+PrintGCDateStamps
29
+ # -XX:+PrintGCTimeStamps
30
+ # -XX:+PrintGCDetails
31
+ # -XX:+PrintTenuringDistribution
32
+ # -XX:+PrintCommandLineFlags
33
+ # -XX:+DisableExplicitGC
34
+ # -XX:+UseConcMarkSweepGC
35
+ # -XX:ParallelCMSThreads=2
36
+ # -XX:+CMSClassUnloadingEnabled
37
+ # -XX:+UseCMSCompactAtFullCollection
38
+ # -XX:CMSInitiatingOccupancyFraction=80
39
+ #-----------------------------------------------------------
40
+
41
+
42
+ #===========================================================
43
+ # Start classpath OPTIONS.
44
+ # These control what classes are on the classpath
45
+ # for a full listing do
46
+ # java -jar start.jar --list-options
47
+ #-----------------------------------------------------------
48
+ OPTIONS=Server,jsp
49
+ #-----------------------------------------------------------
50
+
51
+
52
+ #===========================================================
53
+ # Configuration files.
54
+ # For a full list of available configuration files do
55
+ # java -jar start.jar --help
56
+ #-----------------------------------------------------------
57
+ # etc/jetty-jmx.xml
58
+ etc/jetty.xml
59
+ # etc/jetty-hightide.xml
60
+ # etc/jetty-ssl.xml
61
+ # etc/jetty-requestlog.xml
62
+ etc/jetty-deploy.xml
63
+ # etc/jetty-plus.xml
64
+ #etc/jetty-overlay.xml
65
+ etc/jetty-webapps.xml
66
+ # etc/jetty-contexts.xml
67
+ etc/jetty-testrealm.xml
68
+ # etc/jetty-jaas.xml
69
+ #===========================================================
File without changes
@@ -0,0 +1,48 @@
1
+ require "ostruct"
2
+ require "yaml"
3
+ require "erb"
4
+
5
+ module Preflight
6
+ class Settings < OpenStruct
7
+ def self.load_from_project(project_dir)
8
+ config_file = File.join(project_dir, "config/preflight.yml")
9
+ raise("#{config_file} not found") unless File.exists?(config_file)
10
+ yaml = YAML.load(ERB.new(File.read(config_file)).result)
11
+ Settings.new(project_dir, yaml)
12
+ end
13
+
14
+ def initialize(project_dir, user_defined_options)
15
+ contents = {}
16
+ contents["app_root"] = user_defined_options["app_root"] || File.expand_path(project_dir)
17
+ contents["app_user"] = user_defined_options["app_user"] || Etc.getpwuid(File.stat(contents["app_root"]).uid).name
18
+ contents["java_options"] = user_defined_options["java_options"] || "-Xmx2048m"
19
+ contents["https_port"] = user_defined_options["https_port"] || "4443"
20
+ contents["http_port"] = user_defined_options["http_port"] || "4080"
21
+ contents["jruby_rack"] = user_defined_options["jruby-rack"] if user_defined_options.key?("jruby-rack")
22
+ contents["jetty"] = user_defined_options["jetty"] if user_defined_options.key?("jetty")
23
+ contents["jruby"] = user_defined_options["jruby"] if user_defined_options.key?("jruby")
24
+ contents["max_concurrent_connections"] = user_defined_options["max_concurrent_connections"] || 20
25
+ contents["ruby_version"] = user_defined_options["ruby_version"] || "1.8"
26
+
27
+ @keys = contents.keys.sort
28
+
29
+ super(contents)
30
+ end
31
+
32
+ def jruby?
33
+ respond_to?(:jruby)
34
+ end
35
+
36
+ def jetty?
37
+ respond_to?(:jetty)
38
+ end
39
+
40
+ def jetty_pid_path
41
+ File.join(app_root, "/vendor/jetty/run/jetty.pid")
42
+ end
43
+
44
+ def inspect
45
+ self.class.name + ":\n" + @keys.map{|k|" #{k.ljust(20)} = #{send(k.to_sym)}"}.join("\n") + "\n"
46
+ end
47
+ end
48
+ end
data/script/ci ADDED
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env bash
2
+
3
+ bundler_version="1.0.18"
4
+ rspec_version="2.6.0"
5
+
6
+ source "$HOME/.rvm/scripts/rvm"
7
+
8
+ function install_ruby_if_needed() {
9
+ echo "Checking for $1..."
10
+ if ! rvm list rubies | grep $1 > /dev/null; then
11
+ rvm install $1
12
+ fi
13
+ }
14
+ function switch_ruby() {
15
+ install_ruby_if_needed $1 && rvm use $1
16
+ }
17
+
18
+ function install_bundler_if_needed() {
19
+ echo "Checking for Bundler $bundler_version..."
20
+ if ! gem list --installed bundler --version "$bundler_version" > /dev/null; then
21
+ gem install bundler --version "$bundler_version" --source http://mirrors.squareup.com/rubygems
22
+ fi
23
+ }
24
+
25
+ function install_rspec_if_needed() {
26
+ echo "Checking for rspec $rspec_version..."
27
+ if ! gem list --installed rspec --version "$rspec_version" > /dev/null; then
28
+ gem install rspec --version "$rspec_version" --source http://mirrors.squareup.com/rubygems
29
+ fi
30
+ }
31
+
32
+ function update_gems_if_needed() {
33
+ echo "Installing gems..."
34
+ bundle check || bundle install
35
+ }
36
+
37
+ function run_tests() {
38
+ bundle exec rake spec:setup
39
+ rspec spec/suite.rb # Cannot be bundle exec'd
40
+ }
41
+
42
+ function prepare_and_run() {
43
+ switch_ruby $1 &&
44
+ install_bundler_if_needed &&
45
+ install_rspec_if_needed &&
46
+ update_gems_if_needed &&
47
+ run_tests
48
+ }
49
+
50
+ function tag_green_build() {
51
+ tag_name="ci-preflight-master/latest"
52
+ git tag -f -m "tagging green build" "$tag_name"
53
+ git push -f origin "$tag_name"
54
+ }
55
+
56
+ prepare_and_run "1.9.3-p0" &&
57
+ tag_green_build
@@ -0,0 +1,84 @@
1
+ require "spec_helper"
2
+ require "tmpdir"
3
+
4
+ describe "preflight - basics" do
5
+ let(:project) { "spec/sample_projects/no_dependencies" }
6
+
7
+ before(:all) do
8
+ reset
9
+ @result = x!("bin/preflight #{project}")
10
+ end
11
+ after(:all) do
12
+ reset
13
+ end
14
+
15
+ it "will put the jruby jar under vendor" do
16
+ @result[:stderr].should == ""
17
+ @result[:exitstatus].should == 0
18
+ File.exists?("#{project}/vendor/jruby.jar").should == true
19
+ end
20
+
21
+ it "creates a rake script" do
22
+ @result[:stdout].should include("#{project}/bin/rake\n")
23
+ File.exists?("#{project}/bin/rake").should == true
24
+ end
25
+
26
+ describe "creates a ruby script that" do
27
+ it "allows you to execute using the jruby jar." do
28
+ rake_result = x(%{#{project}/bin/ruby --version})
29
+ rake_result[:stderr].should == ""
30
+ rake_result[:stdout].should include("ruby")
31
+ rake_result[:exitstatus].should == 0
32
+ end
33
+
34
+ it 'does not spawn a new PID' do
35
+ # This makes writing daemon wrappers around bin/ruby much easier.
36
+ Dir.mktmpdir do |dir|
37
+ tmpfile = File.join(dir, 'test_pid')
38
+ pid = Process.spawn("#{project}/bin/ruby -e 'puts Process.pid'", STDOUT=>tmpfile)
39
+ Process.wait(pid)
40
+ pid.should == File.read(tmpfile).chomp.to_i
41
+ end
42
+ end
43
+ end
44
+
45
+ describe "makes a rake script that" do
46
+ it %{ - runs from any directory (properly cd's)
47
+ - the ruby used is indeed jruby
48
+ - allows you to execute several tasks in a row
49
+ - shows the trace of a rake failure
50
+ - nails the GEM_PATH to within the jar so we don't go 'accidentally' loading gems and such from another ruby env, the result of which is insanity.
51
+
52
+ Asserting all this in one test to optimize for test running time.} do
53
+ absolute_script_path = File.expand_path("#{project}/bin/rake project_info another_task load_path gem_path boom")
54
+ rake_result = x("cd /tmp && #{absolute_script_path} --trace")
55
+
56
+ rake_result[:stdout].should include("PWD=#{File.expand_path(project)}")
57
+ rake_result[:stdout].should include("DOLLAR_ZERO=#{File.expand_path("#{project}/bin/.rake_runner")}")
58
+ rake_result[:stdout].should include("Hi, I'm the no_dependencies project")
59
+ rake_result[:stdout].should include("RUBY_PLATFORM=java")
60
+ rake_result[:stdout].should include("jruby.jar!/META-INF")
61
+ rake_result[:stdout].should include("You ran another task")
62
+
63
+ rake_result[:stderr].should include("BOOM")
64
+ rake_result[:stderr].should include("xxx")
65
+ rake_result[:stderr].should include("yyy")
66
+ rake_result[:stderr].should include("zzz")
67
+ rake_result[:exitstatus].should == 1
68
+
69
+ load_path_elements = rake_result[:stdout].split("\n").select{|line|line =~ /^LP--/}
70
+ load_path_elements.length >= 3
71
+ load_path_elements.each do |element|
72
+ element = element.sub("LP-- ", "")
73
+ (element =~ /META-INF\/jruby\.home/ || element =~ /^\.$/).should >= 0
74
+ end
75
+
76
+ gem_path_elements = rake_result[:stdout].split("\n").select{|line|line =~ /^GP--/}
77
+ gem_path_elements.length >= 2
78
+ gem_path_elements.each do |element|
79
+ element = element.sub("GP-- ", "")
80
+ (element =~ /META-INF\/jruby\.home/ || element =~ /vendor\/bundler_gem/).should >= 0
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,120 @@
1
+ require "spec_helper"
2
+
3
+ describe "preflight - bundler and gems" do
4
+
5
+ before(:all) do
6
+ reset
7
+ rm_rf("spec/sample_projects/has_gems_via_bundler/vendor/bundle")
8
+ rm_rf("spec/sample_projects/has_gems_via_bundler/vendor/bundler_gem")
9
+ x!("bin/preflight spec/sample_projects/has_gems_via_bundler")
10
+ end
11
+
12
+ after(:all) do
13
+ rm_rf("spec/sample_projects/has_gems_via_bundler/vendor/bundle")
14
+ rm_rf("spec/sample_projects/has_gems_via_bundler/vendor/bundler_gem")
15
+ end
16
+
17
+ describe "presence of the library" do
18
+ it "installed bundler into vendor/bundler_gem." do
19
+ files = Dir["spec/sample_projects/has_gems_via_bundler/vendor/bundler_gem/**/*.rb"].to_a.map{|f|File.basename(f)}
20
+ files.should include("bundler.rb")
21
+ files.should include("dsl.rb")
22
+ end
23
+
24
+ it "is not accidentally using bundler from another ruby environment." do
25
+ rake_result = x("spec/sample_projects/has_gems_via_bundler/bin/rake load_path_with_bundler")
26
+ load_path_elements = rake_result[:stdout].split("\n").select{|line|line =~ /^--/}
27
+ load_path_elements.length.should >= 3
28
+ invalid_load_path_elements =
29
+ load_path_elements.reject do |element|
30
+ element = element.sub("-- ", "")
31
+ (element =~ /META-INF\/jruby\.home/ || element =~ /vendor\/bundler_gem/ || element =~ /^\.$/ || element =~ /vendor\/bundle\//)
32
+ end
33
+ invalid_load_path_elements.should == []
34
+ end
35
+
36
+ it "can be used from a script fed to jruby." do
37
+ rake_result = x(%{spec/sample_projects/has_gems_via_bundler/bin/ruby -e 'require \\"rubygems\\"; require \\"bundler\\"; puts Bundler::VERSION'})
38
+ rake_result[:stderr].should == ""
39
+ rake_result[:stdout].should include("1.1.rc")
40
+ rake_result[:exitstatus].should == 0
41
+ end
42
+ end
43
+
44
+ describe "gem installation" do
45
+ it "installs gems into vendor/bundle" do
46
+ files = Dir["spec/sample_projects/has_gems_via_bundler/vendor/bundle/**/*.rb"].to_a.map{|f|File.basename(f)}
47
+ files.should include("bijection.rb")
48
+ files.should include("spruz.rb")
49
+ files.length.should > 20
50
+ end
51
+
52
+ it "installed gems are available via normal require" do
53
+ rake_result = x("cd spec/sample_projects/has_gems_via_bundler && " +
54
+ %{bin/ruby -e 'require \\"rubygems\\"; require \\"bundler/setup\\"; require \\"spruz/bijection\\"; puts Spruz::Bijection.name'})
55
+ rake_result[:stderr].should == ""
56
+ rake_result[:stdout].should == "Spruz::Bijection\n"
57
+ rake_result[:exitstatus].should == 0
58
+ end
59
+
60
+ it "installed gems are available via Bundler.require" do
61
+ rake_result = x("cd spec/sample_projects/has_gems_via_bundler && " +
62
+ %{bin/ruby -e 'require \\"rubygems\\"; require \\"bundler\\"; Bundler.require; puts Spruz::Bijection.name'})
63
+ rake_result[:stderr].should == ""
64
+ rake_result[:stdout].should == "Spruz::Bijection\n"
65
+ rake_result[:exitstatus].should == 0
66
+ end
67
+ end
68
+
69
+ describe "bin/rake" do
70
+ it "uses rake version specified in Gemfile" do
71
+ rake_result = x("spec/sample_projects/has_gems_via_bundler/bin/rake rake_version")
72
+ rake_result[:stdout].lines.to_a.last.chomp.should == "0.9.2.2"
73
+ end
74
+ end
75
+
76
+ describe "Gemfile.lock that does not contain PLATFORM=java" do
77
+ before do
78
+ File.open("spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/Gemfile.lock", "w") do |f|
79
+ f << %{GEM
80
+ remote: http://rubygems.org/
81
+ specs:
82
+ rake (0.9.2.2)
83
+ spruz (0.2.13)
84
+
85
+ PLATFORMS
86
+ ruby
87
+
88
+ DEPENDENCIES
89
+ rake (~> 0.9.2)
90
+ spruz
91
+ }
92
+ end
93
+ end
94
+
95
+ after do
96
+ FileUtils.rm_f("spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/Gemfile.lock")
97
+ end
98
+
99
+ it "regenerates the Gemfile.lock and prints out a warning message" do
100
+ File.read("spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/Gemfile.lock").should_not include("java")
101
+ preflight_result = x("bin/preflight spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock")
102
+ preflight_result[:stderr].gsub("\n", "").squeeze(" ").should include(%{
103
+ WARNING: Your Gemfile.lock does not contain PLATFORM java.
104
+ Automtically regenerating and overwriting Gemfile.lock using jruby
105
+ - because otherwise, jruby-specific gems would not be installed by bundler.
106
+ To make this message go away, you must re-generate your Gemfile.lock using jruby.
107
+ }.gsub("\n", "").squeeze(" "))
108
+ preflight_result[:exitstatus].should == 0
109
+
110
+ File.read("spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/Gemfile.lock").should include("java")
111
+
112
+ rake_result = x("cd spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock && " +
113
+ %{bin/ruby -e 'require \\"rubygems\\"; require \\"bundler\\"; Bundler.require; puts Spruz::Bijection.name'})
114
+ rake_result[:stderr].should == ""
115
+ rake_result[:stdout].should == "Spruz::Bijection\n"
116
+ rake_result[:exitstatus].should == 0
117
+ end
118
+ end
119
+
120
+ end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+
3
+ describe "preflight - bundler and gems in 1.9 mode" do
4
+ let(:project) { 'has_gems_via_bundler_19' }
5
+
6
+ before(:all) do
7
+ reset
8
+ rm_rf("spec/sample_projects/#{project}/vendor/bundle")
9
+ rm_rf("spec/sample_projects/#{project}/vendor/bundler_gem")
10
+ x!("bin/preflight spec/sample_projects/#{project}")
11
+ end
12
+
13
+ after(:all) do
14
+ rm_rf("spec/sample_projects/#{project}/vendor/bundle")
15
+ rm_rf("spec/sample_projects/#{project}/vendor/bundler_gem")
16
+ end
17
+
18
+ describe "gem installation" do
19
+ it "installed gems are available via Bundler.require" do
20
+ rake_result = x("cd spec/sample_projects/#{project} && " +
21
+ %{bin/ruby -e 'require \\"rubygems\\"; require \\"bundler\\"; Bundler.require; puts Spruz::Bijection.name'})
22
+ rake_result[:stderr].should == ""
23
+ rake_result[:stdout].should == "Spruz::Bijection\n"
24
+ rake_result[:exitstatus].should == 0
25
+ end
26
+ end
27
+
28
+ describe "bin/rake" do
29
+ it "uses rake version specified in Gemfile" do
30
+ rake_result = x("spec/sample_projects/#{project}/bin/rake rake_version")
31
+ rake_result[:stdout].lines.to_a.last.chomp.should == "0.9.2.2"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem "rake", "~> 0.9.2"
4
+ gem "spruz"
@@ -0,0 +1,13 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ rake (0.9.2.2)
5
+ spruz (0.2.13)
6
+
7
+ PLATFORMS
8
+ java
9
+ ruby
10
+
11
+ DEPENDENCIES
12
+ rake (~> 0.9.2)
13
+ spruz
@@ -0,0 +1,18 @@
1
+ task :load_path do
2
+ puts $LOAD_PATH.join("\n")
3
+ end
4
+
5
+ task :load_path_with_rubygems do
6
+ require "rubygems"
7
+ puts $LOAD_PATH.join("\n")
8
+ end
9
+
10
+ task :load_path_with_bundler do
11
+ require "rubygems"
12
+ require "bundler"
13
+ $LOAD_PATH.each{|path|puts "-- #{path}"}
14
+ end
15
+
16
+ task :rake_version do
17
+ puts RAKEVERSION
18
+ end