hudson 0.2.7 → 0.3.0.beta.1

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.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,65 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ hudson (0.3.0.beta.1)
5
+ activesupport (~> 3.0.0)
6
+ builder (~> 2.1.2)
7
+ hpricot
8
+ httparty (~> 0.5.2)
9
+ term-ansicolor (>= 1.0.4)
10
+ thor (= 0.14.2)
11
+ yajl-ruby (>= 0.7.6)
12
+
13
+ GEM
14
+ remote: http://rubygems.org/
15
+ specs:
16
+ activesupport (3.0.0)
17
+ awesome_print (0.2.1)
18
+ builder (2.1.2)
19
+ crack (0.1.6)
20
+ cucumber (0.9.0)
21
+ builder (~> 2.1.2)
22
+ diff-lcs (~> 1.1.2)
23
+ gherkin (~> 2.2.2)
24
+ json (~> 1.4.6)
25
+ term-ansicolor (~> 1.0.5)
26
+ diff-lcs (1.1.2)
27
+ gherkin (2.2.8)
28
+ json (~> 1.4.6)
29
+ term-ansicolor (~> 1.0.5)
30
+ hpricot (0.8.2)
31
+ httparty (0.5.2)
32
+ crack (= 0.1.6)
33
+ json (1.4.6)
34
+ rake (0.8.7)
35
+ rspec (2.0.0.rc)
36
+ rspec-core (= 2.0.0.rc)
37
+ rspec-expectations (= 2.0.0.rc)
38
+ rspec-mocks (= 2.0.0.rc)
39
+ rspec-core (2.0.0.rc)
40
+ rspec-expectations (2.0.0.rc)
41
+ diff-lcs (>= 1.1.2)
42
+ rspec-mocks (2.0.0.rc)
43
+ rspec-core (= 2.0.0.rc)
44
+ rspec-expectations (= 2.0.0.rc)
45
+ term-ansicolor (1.0.5)
46
+ thor (0.14.2)
47
+ yajl-ruby (0.7.8)
48
+
49
+ PLATFORMS
50
+ ruby
51
+
52
+ DEPENDENCIES
53
+ activesupport (~> 3.0.0)
54
+ awesome_print
55
+ builder (~> 2.1.2)
56
+ cucumber (~> 0.9.0)
57
+ hpricot
58
+ httparty (~> 0.5.2)
59
+ hudson!
60
+ json (~> 1.4.0)
61
+ rake (~> 0.8.7)
62
+ rspec (~> 2.0.0.beta)
63
+ term-ansicolor (>= 1.0.4)
64
+ thor (= 0.14.2)
65
+ yajl-ruby (>= 0.7.6)
data/README.md CHANGED
@@ -1,10 +1,12 @@
1
1
  Hudson
2
2
  ======
3
3
 
4
- Hudson is a sweet CI server. Hudson.rb makes it easy
5
- to run ruby builds by bundling all the ruby-centric plugins
6
- (ruby, rake, git, github) and wrapping them in a super simple
7
- executeable.
4
+ Hudson is a sweet continuous integration platform. Hudson.rb makes it easy
5
+ to bundles all the things you need to easily run a hudson server from Ruby,
6
+ as well as talk to a running hudson servers from Ruby and the command line.
7
+
8
+ * Email: [http://groups.google.com/group/hudsonrb](http://groups.google.com/group/hudsonrb)
9
+ * IRC: [irc://irc.freenode.net/hudson.rb](irc://irc.freenode.net/hudson.rb)
8
10
 
9
11
  Install
10
12
  =======
@@ -58,6 +60,27 @@ To add Project (create a Job) on a Hudson server:
58
60
 
59
61
  For all commands, if flags for `host:port` are not provided, it will use `$HUDSON_HOST` and `$HUDSON_PORT` if available.
60
62
 
63
+ Developer Instructions
64
+ ======================
65
+
66
+ The dependencies for the gem and for developing the gem are managed by bundler.
67
+
68
+ gem install bundler
69
+ git clone http://github.com/cowboyd/hudson.rb.git
70
+ bundle install
71
+
72
+ The test suite is run with:
73
+
74
+ rake
75
+
76
+ This launches a Hudson server, runs cucumber features, and kills the Hudson server.
77
+
78
+ Alternately, manually launch the Hudson server, run features and close the Hudson server:
79
+
80
+ rake hudson:server:test
81
+ rake cucumber:ok
82
+ rake hudson:server:killtest
83
+
61
84
  License
62
85
  =======
63
86
 
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
1
4
  $:.unshift('lib')
2
5
  require 'hudson'
3
- require 'rubygems'
4
6
 
5
7
  Gem::Specification.new do |s|
6
8
  $gemspec = s
@@ -20,11 +22,14 @@ Gem::Specification.new do |s|
20
22
  s.add_dependency("yajl-ruby", [">= 0.7.6"])
21
23
  s.add_dependency("httparty", ["~> 0.5.2"])
22
24
  s.add_dependency("builder", ["~> 2.1.2"])
23
- s.add_dependency("thor", ["= 0.13.6"])
25
+ s.add_dependency("thor", ["= 0.14.2"])
26
+ s.add_dependency("activesupport", ["~> 3.0.0"])
24
27
  s.add_dependency("hpricot")
25
- s.add_development_dependency("cucumber", ["~> 0.7.3"])
26
- s.add_development_dependency("rspec", ["~> 1.3.0"])
28
+ s.add_development_dependency("rake", ["~> 0.8.7"])
29
+ s.add_development_dependency("cucumber", ["~> 0.9.0"])
30
+ s.add_development_dependency("rspec", ["~> 2.0.0.beta"])
27
31
  s.add_development_dependency("json", ["~>1.4.0"])
32
+ s.add_development_dependency("awesome_print")
28
33
  end
29
34
 
30
35
  desc "Build gem"
@@ -44,6 +49,9 @@ task :clean do
44
49
  sh "rm -rf *.gem"
45
50
  end
46
51
 
52
+ require "rspec/core/rake_task"
53
+ RSpec::Core::RakeTask.new(:spec)
54
+
47
55
  namespace :cucumber do
48
56
  require 'cucumber/rake/task'
49
57
  Cucumber::Rake::Task.new(:wip, 'Run features that are being worked on') do |t|
@@ -16,6 +16,17 @@ Feature: Create jobs
16
16
  When I run local executable "hudson" with arguments "list --host localhost --port 3010"
17
17
  Then I should see "ruby"
18
18
 
19
+ Scenario: Create job via $HUDSON_HOST and $HUDSON_PORT
20
+ Given I am in the "ruby" project folder
21
+ And the project uses "git" scm
22
+ And env variable $HUDSON_HOST set to "localhost"
23
+ And env variable $HUDSON_PORT set to "3010"
24
+ When I run local executable "hudson" with arguments "create ."
25
+ Then I should see "Added project 'ruby' to Hudson."
26
+ Then I should see "http://localhost:3010/job/ruby/build"
27
+ When I run local executable "hudson" with arguments "list"
28
+ Then I should see "ruby"
29
+
19
30
  Scenario: Attempt to create project without scm
20
31
  Given I am in the "ruby" project folder
21
32
  When I run local executable "hudson" with arguments "create . --host localhost --port 3010"
@@ -0,0 +1,29 @@
1
+ Feature: Listing jobs
2
+ I want to see the status of jobs on servers I'm interested in
3
+
4
+ Scenario: List jobs on a non-existent server
5
+ When I run local executable "hudson" with arguments "list test --host localhost --port 9999"
6
+ Then I should see "localhost:9999 - no connection"
7
+
8
+ Scenario: List jobs on a server with no jobs
9
+ Given I have a Hudson server running
10
+ And the Hudson server has no current jobs
11
+ When I run local executable "hudson" with arguments "list test --host localhost --port 3010"
12
+ Then I should see "localhost:3010 - no jobs"
13
+
14
+ Scenario: List jobs on a server with jobs
15
+ Given I have a Hudson server running
16
+ And the Hudson server has no current jobs
17
+ And I am in the "ruby" project folder
18
+ And the project uses "git" scm
19
+ When I run local executable "hudson" with arguments "create . --host localhost --port 3010"
20
+ When I run local executable "hudson" with arguments "list"
21
+ Then I should see "localhost:3010 -"
22
+ Then I should see "ruby"
23
+ When I run local executable "hudson" with arguments "list --host localhost --port 3010"
24
+ Then I should see "localhost:3010 -"
25
+ Then I should see "ruby"
26
+
27
+
28
+
29
+
@@ -13,19 +13,24 @@ Feature: Managing remote servers
13
13
  Then I should see "Either use --host or add remote servers."
14
14
 
15
15
  Scenario: Add a remote server
16
- When I run local executable "hudson" with arguments "remotes add --host localhost --port 3010"
17
- And I run local executable "hudson" with arguments "remotes add --host localhost --port 3011"
16
+ When I run local executable "hudson" with arguments "add_remote test --host localhost --port 3010"
18
17
  And I run local executable "hudson" with arguments "list"
19
18
  Then I should not see "Either use --host or add remote servers."
20
- And I should see "localhost:3010 -"
21
- And I should see "No jobs"
22
- And I should see "localhost:3011 - no connection"
19
+ And I should see "test [localhost:3010] - no jobs"
20
+
21
+ Scenario: Add a few remote servers
22
+ When I run local executable "hudson" with arguments "add_remote test --host localhost --port 3010"
23
+ And I run local executable "hudson" with arguments "add_remote another --host localhost --port 4000"
24
+ And I run local executable "hudson" with arguments "list"
25
+ Then I should not see "Either use --host or add remote servers."
26
+ And I should see "test [localhost:3010] - no jobs"
27
+ And I should see "another [localhost:3011] - no connection"
23
28
 
24
29
  Scenario: Add a remote server and access by abbreviation
25
- When I run local executable "hudson" with arguments "remotes add --host localhost --port 3010"
26
- When I run local executable "hudson" with arguments "remotes add --host another.server"
30
+ When I run local executable "hudson" with arguments "add_remote test --host localhost --port 3010"
31
+ And I run local executable "hudson" with arguments "add_remote another --host another.host"
27
32
  And I run local executable "hudson" with arguments "list --server local"
28
- And I should see "localhost:3010 -"
29
- And I should see "No jobs"
30
- And I should not see "another.server"
33
+ Then I should not see "Either use --host or add remote servers."
34
+ And I should see "test [localhost:3010] - no jobs"
35
+ And I should not see "another"
31
36
 
@@ -2,7 +2,7 @@ Given /^this project is active project folder/ do
2
2
  @active_project_folder = File.expand_path(File.dirname(__FILE__) + "/../..")
3
3
  end
4
4
 
5
- Given /^env variable \$([\w_]+) set to( project path |)"(.*)"/ do |env_var, path, value|
5
+ Given /^env variable \$([\w_]+) set to( project path|) "(.*)"/ do |env_var, path, value|
6
6
  in_project_folder {
7
7
  value = File.expand_path(value)
8
8
  } unless path.empty?
@@ -1,5 +1,5 @@
1
1
  Given /^I have a Hudson server running$/ do
2
- unless ENV['HUDSON_PORT']
2
+ unless @hudson_port
3
3
  port = 3010
4
4
  begin
5
5
  res = Net::HTTP.start("localhost", port) { |http| http.get('/api/json') }
@@ -7,22 +7,22 @@ Given /^I have a Hudson server running$/ do
7
7
  puts "\n\n\nERROR: To run tests, launch hudson in test mode: 'rake hudson:server:test'\n\n\n"
8
8
  exit
9
9
  end
10
- ENV['HUDSON_PORT'] = port.to_s
11
- ENV['HUDSON_HOST'] = 'localhost'
10
+ @hudson_port = port.to_s
11
+ @hudson_host = 'localhost'
12
12
  end
13
13
  end
14
14
 
15
15
  Given /^the Hudson server has no current jobs$/ do
16
- if port = ENV['HUDSON_PORT']
16
+ if port = @hudson_port
17
17
  require "open-uri"
18
18
  require "yajl"
19
- hudson_info = Yajl::Parser.new.parse(open("http://localhost:#{ENV['HUDSON_PORT']}/api/json"))
19
+ hudson_info = Yajl::Parser.new.parse(open("http://#{@hudson_host}:#{@hudson_port}/api/json"))
20
20
 
21
21
  hudson_info['jobs'].each do |job|
22
22
  job_url = job['url']
23
23
  res = Net::HTTP.start("localhost", port) { |http| http.post("#{job_url}doDelete/api/json", {}) }
24
24
  end
25
- hudson_info = Yajl::Parser.new.parse(open("http://localhost:#{ENV['HUDSON_PORT']}/api/json"))
25
+ hudson_info = Yajl::Parser.new.parse(open("http://#{@hudson_host}:#{@hudson_port}/api/json"))
26
26
  hudson_info['jobs'].should == []
27
27
  else
28
28
  puts "WARNING: Run 'I have a Hudson server running' step first."
@@ -1,10 +1,7 @@
1
1
  $:.unshift(File.expand_path(File.dirname(File.dirname(__FILE__) + "/../../lib/hudson.rb")))
2
2
  require File.dirname(__FILE__) + "/../../lib/hudson.rb"
3
3
 
4
- gem 'cucumber'
5
- require 'cucumber'
6
- gem 'rspec'
7
- require 'spec'
4
+ require 'bundler/setup'
8
5
 
9
6
  Before do
10
7
  @tmp_root = File.dirname(__FILE__) + "/../../tmp"
@@ -1,10 +1,8 @@
1
1
 
2
2
  module Matchers
3
- def contain(expected)
4
- Spec::Matchers::SimpleMatcher.new("contain #{expected.inspect}") do |given, matcher|
5
- matcher.failure_message = "expected #{given.inspect} to contain #{expected.inspect}"
6
- matcher.negative_failure_message = "expected #{given.inspect} not to contain #{expected.inspect}"
7
- given.index expected
3
+ RSpec::Matchers.define :contain do |expected_text|
4
+ match do |text|
5
+ text.index expected_text
8
6
  end
9
7
  end
10
8
  end
@@ -2,16 +2,16 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{hudson}
5
- s.version = "0.2.7"
5
+ s.version = "0.3.0.beta.1"
6
6
 
7
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
7
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Charles Lowell", "Dr Nic Williams"]
9
- s.date = %q{2010-08-25}
9
+ s.date = %q{2010-10-11}
10
10
  s.default_executable = %q{hudson}
11
11
  s.description = %q{A suite of utilities for bringing continous integration to your projects (not the other way around) with hudson CI}
12
12
  s.email = ["cowboyd@thefrontside.net", "drnicwilliams@gmail.com"]
13
13
  s.executables = ["hudson"]
14
- s.files = ["bin", "bin/hudson", "features", "features/create_jobs.feature", "features/development.feature", "features/fixtures", "features/fixtures/projects", "features/fixtures/projects/ruby", "features/fixtures/projects/ruby/Rakefile", "features/managing_remote_servers.feature", "features/server.feature", "features/step_definitions", "features/step_definitions/common_steps.rb", "features/step_definitions/fixture_project_steps.rb", "features/step_definitions/hudson_steps.rb", "features/step_definitions/scm_steps.rb", "features/support", "features/support/common.rb", "features/support/env.rb", "features/support/hooks.rb", "features/support/matchers.rb", "hudson.gemspec", "lib", "lib/hudson", "lib/hudson/api.rb", "lib/hudson/cli", "lib/hudson/cli/formatting.rb", "lib/hudson/cli.rb", "lib/hudson/hudson.war", "lib/hudson/job_config_builder.rb", "lib/hudson/plugins", "lib/hudson/plugins/git.hpi", "lib/hudson/plugins/github.hpi", "lib/hudson/plugins/greenballs.hpi", "lib/hudson/plugins/rake.hpi", "lib/hudson/plugins/ruby.hpi", "lib/hudson/project_scm.rb", "lib/hudson.rb", "Rakefile", "README.md", "spec", "spec/fixtures", "spec/fixtures/ec2_global.config.xml", "spec/fixtures/rails.multi.config.xml", "spec/fixtures/rails.single.config.xml", "spec/fixtures/rubygem.config.xml", "spec/fixtures/therubyracer.config.xml", "spec/job_config_builder_spec.rb", "spec/spec_helper.rb"]
14
+ s.files = ["bin", "bin/hudson", "features", "features/create_jobs.feature", "features/development.feature", "features/fixtures", "features/fixtures/projects", "features/fixtures/projects/ruby", "features/fixtures/projects/ruby/Rakefile", "features/listing_jobs.feature", "features/managing_remote_servers.feature", "features/server.feature", "features/step_definitions", "features/step_definitions/common_steps.rb", "features/step_definitions/fixture_project_steps.rb", "features/step_definitions/hudson_steps.rb", "features/step_definitions/scm_steps.rb", "features/support", "features/support/common.rb", "features/support/env.rb", "features/support/hooks.rb", "features/support/matchers.rb", "Gemfile", "Gemfile.lock", "hudson.gemspec", "lib", "lib/hudson", "lib/hudson/api.rb", "lib/hudson/cli", "lib/hudson/cli/formatting.rb", "lib/hudson/cli.rb", "lib/hudson/config.rb", "lib/hudson/hudson-cli.jar", "lib/hudson/hudson.war", "lib/hudson/job_config_builder.rb", "lib/hudson/plugins", "lib/hudson/plugins/git.hpi", "lib/hudson/plugins/github.hpi", "lib/hudson/plugins/greenballs.hpi", "lib/hudson/plugins/rake.hpi", "lib/hudson/plugins/ruby.hpi", "lib/hudson/project_scm.rb", "lib/hudson/remote.rb", "lib/hudson.rb", "Rakefile", "README.md", "spec", "spec/fixtures", "spec/fixtures/ec2_global.config.xml", "spec/fixtures/rails.multi.config.xml", "spec/fixtures/rails.single.config.xml", "spec/fixtures/rubygem.config.xml", "spec/fixtures/therubyracer.config.xml", "spec/job_config_builder_spec.rb", "spec/spec_helper.rb"]
15
15
  s.homepage = %q{http://github.com/cowboyd/hudson.rb}
16
16
  s.require_paths = ["lib"]
17
17
  s.rubyforge_project = %q{hudson}
@@ -27,31 +27,40 @@ Gem::Specification.new do |s|
27
27
  s.add_runtime_dependency(%q<yajl-ruby>, [">= 0.7.6"])
28
28
  s.add_runtime_dependency(%q<httparty>, ["~> 0.5.2"])
29
29
  s.add_runtime_dependency(%q<builder>, ["~> 2.1.2"])
30
- s.add_runtime_dependency(%q<thor>, ["= 0.13.6"])
30
+ s.add_runtime_dependency(%q<thor>, ["= 0.14.2"])
31
+ s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.0"])
31
32
  s.add_runtime_dependency(%q<hpricot>, [">= 0"])
32
- s.add_development_dependency(%q<cucumber>, ["~> 0.7.3"])
33
- s.add_development_dependency(%q<rspec>, ["~> 1.3.0"])
33
+ s.add_development_dependency(%q<rake>, ["~> 0.8.7"])
34
+ s.add_development_dependency(%q<cucumber>, ["~> 0.9.0"])
35
+ s.add_development_dependency(%q<rspec>, ["~> 2.0.0.beta"])
34
36
  s.add_development_dependency(%q<json>, ["~> 1.4.0"])
37
+ s.add_development_dependency(%q<awesome_print>, [">= 0"])
35
38
  else
36
39
  s.add_dependency(%q<term-ansicolor>, [">= 1.0.4"])
37
40
  s.add_dependency(%q<yajl-ruby>, [">= 0.7.6"])
38
41
  s.add_dependency(%q<httparty>, ["~> 0.5.2"])
39
42
  s.add_dependency(%q<builder>, ["~> 2.1.2"])
40
- s.add_dependency(%q<thor>, ["= 0.13.6"])
43
+ s.add_dependency(%q<thor>, ["= 0.14.2"])
44
+ s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
41
45
  s.add_dependency(%q<hpricot>, [">= 0"])
42
- s.add_dependency(%q<cucumber>, ["~> 0.7.3"])
43
- s.add_dependency(%q<rspec>, ["~> 1.3.0"])
46
+ s.add_dependency(%q<rake>, ["~> 0.8.7"])
47
+ s.add_dependency(%q<cucumber>, ["~> 0.9.0"])
48
+ s.add_dependency(%q<rspec>, ["~> 2.0.0.beta"])
44
49
  s.add_dependency(%q<json>, ["~> 1.4.0"])
50
+ s.add_dependency(%q<awesome_print>, [">= 0"])
45
51
  end
46
52
  else
47
53
  s.add_dependency(%q<term-ansicolor>, [">= 1.0.4"])
48
54
  s.add_dependency(%q<yajl-ruby>, [">= 0.7.6"])
49
55
  s.add_dependency(%q<httparty>, ["~> 0.5.2"])
50
56
  s.add_dependency(%q<builder>, ["~> 2.1.2"])
51
- s.add_dependency(%q<thor>, ["= 0.13.6"])
57
+ s.add_dependency(%q<thor>, ["= 0.14.2"])
58
+ s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
52
59
  s.add_dependency(%q<hpricot>, [">= 0"])
53
- s.add_dependency(%q<cucumber>, ["~> 0.7.3"])
54
- s.add_dependency(%q<rspec>, ["~> 1.3.0"])
60
+ s.add_dependency(%q<rake>, ["~> 0.8.7"])
61
+ s.add_dependency(%q<cucumber>, ["~> 0.9.0"])
62
+ s.add_dependency(%q<rspec>, ["~> 2.0.0.beta"])
55
63
  s.add_dependency(%q<json>, ["~> 1.4.0"])
64
+ s.add_dependency(%q<awesome_print>, [">= 0"])
56
65
  end
57
66
  end
@@ -1,6 +1,6 @@
1
1
  module Hudson
2
- VERSION = "0.2.7"
3
- HUDSON_VERSION = "1.373"
2
+ VERSION = "0.3.0.beta.1"
3
+ HUDSON_VERSION = "1.380"
4
4
  WAR = File.expand_path(File.dirname(__FILE__) + "/hudson/hudson.war")
5
5
  PLUGINS = File.expand_path(File.dirname(__FILE__) + "/hudson/plugins")
6
6
  end
@@ -1,5 +1,7 @@
1
1
  require 'httparty'
2
2
  require 'cgi'
3
+ require 'uri'
4
+ require 'json'
3
5
 
4
6
  module Hudson
5
7
  class Api
@@ -10,10 +12,14 @@ module Hudson
10
12
  # http_proxy 'localhost', '8888'
11
13
 
12
14
  def self.setup_base_url(options)
13
- server_name, host, port = options[:server], options[:host], options[:port]
14
- return false unless host || server_name
15
- p "http://#{host}:#{port}"
16
- base_uri "http://#{host}:#{port}"
15
+ # Thor's HashWithIndifferentAccess is based on string keys which URI::HTTP.build ignores
16
+ options = options.inject({}) { |mem, (key, val)| mem[key.to_sym] = val; mem }
17
+ options[:host] ||= ENV['HUDSON_HOST']
18
+ options[:port] ||= ENV['HUDSON_PORT']
19
+ return false unless options[:host] || Hudson::Config.config["base_uri"]
20
+ uri = options[:host] ? URI::HTTP.build(options) : Hudson::Config.config["base_uri"]
21
+ base_uri uri.to_s
22
+ uri
17
23
  end
18
24
 
19
25
  # returns true if successfully create a new job on Hudson
@@ -22,6 +28,7 @@ module Hudson
22
28
  :body => job_config.to_xml, :format => :xml, :headers => { 'content-type' => 'application/xml' }
23
29
  }
24
30
  if res.code == 200
31
+ cache_base_uri
25
32
  true
26
33
  else
27
34
  require "hpricot"
@@ -32,12 +39,26 @@ module Hudson
32
39
  end
33
40
 
34
41
  def self.summary
35
- get "/api/json"
42
+ begin
43
+ json = get "/api/json"
44
+ cache_base_uri
45
+ json
46
+ rescue Errno::ECONNREFUSED => e
47
+ false
48
+ end
36
49
  end
37
50
 
38
- # Return hash of job sta
51
+ # Return hash of job statuses
39
52
  def self.job(name)
40
- get "/job/#{name}/api/json"
53
+ json = get "/job/#{name}/api/json"
54
+ cache_base_uri
55
+ json
56
+ end
57
+
58
+ private
59
+ def self.cache_base_uri
60
+ Hudson::Config.config["base_uri"] = base_uri
61
+ Hudson::Config.store!
41
62
  end
42
63
  end
43
64
  end
@@ -1,5 +1,8 @@
1
1
  require 'thor'
2
+ require 'active_support/core_ext/object/blank'
2
3
  require 'hudson/cli/formatting'
4
+ require 'hudson/config'
5
+ require 'hudson/remote'
3
6
 
4
7
  module Hudson
5
8
  class CLI < Thor
@@ -58,7 +61,7 @@ module Hudson
58
61
  end
59
62
  name = options[:name] || File.basename(FileUtils.pwd)
60
63
  if Hudson::Api.create_job(name, job_config)
61
- build_url = "http://#{options[:host]}:#{options[:port]}/job/#{name.gsub(/\s/,'%20')}/build"
64
+ build_url = "#{@uri}/job/#{name.gsub(/\s/,'%20')}/build"
62
65
  puts "Added project '#{name}' to Hudson."
63
66
  puts "Trigger builds via: #{build_url}"
64
67
  else
@@ -67,33 +70,39 @@ module Hudson
67
70
  end
68
71
  end
69
72
 
70
- desc "list [project_path] [options]", "list builds on a hudson server"
73
+ desc "list [server] [options]", "list builds on a hudson server"
71
74
  common_options
72
- def list(project_path = ".")
75
+ def list(server = nil)
73
76
  select_hudson_server(options)
74
- FileUtils.chdir(project_path) do
75
- if summary = Hudson::Api.summary
76
- if summary["jobs"]
77
- summary["jobs"].each do |job|
78
- color = job['color']
79
- color = 'green' if color == 'blue'
80
- shell.say job['name'], color.to_sym, false
81
- shell.say " - #{job['url']}"
82
- end
83
- else
84
- display "No jobs found on #{options[:host]}:#{options[:port]}"
77
+ if summary = Hudson::Api.summary
78
+ unless summary["jobs"].blank?
79
+ shell.say "#{@uri} -"
80
+ summary["jobs"].each do |job|
81
+ color = job['color']
82
+ color = 'red' if color == 'red_anime'
83
+ color = 'green' if color == 'blue'
84
+ color = 'yellow' if color == 'grey'
85
+ shell.say job['name'], color.to_sym, false
85
86
  end
87
+ shell.say ""
86
88
  else
87
- error "Failed connection to #{options[:host]}:#{options[:port]}"
89
+ display "#{@uri} - no jobs"
88
90
  end
89
- end
90
- end
91
-
92
- desc "remote command [options]", "manage remote servers (comming sometime to a theater near you)"
93
- def remote(command)
94
- puts command
91
+ else
92
+ shell.say "#{@uri} - no connection", :red
93
+ end
95
94
  end
96
95
 
96
+ # desc "add_remote name [options]", "manage remote servers (comming sometime to a theater near you)"
97
+ # common_options
98
+ # def add_remote(name)
99
+ # select_hudson_server(options)
100
+ # if Hudson::Remote.add_server(name, @uri)
101
+ # display "Added remote server '#{name}' for #{@uri}"
102
+ # else
103
+ # error "Could not add remote server for '#{@uri}'"
104
+ # end
105
+ # end
97
106
 
98
107
  desc "help [command]", "show help for hudson or for a specific command"
99
108
  def help(*args)
@@ -124,17 +133,18 @@ USEAGE
124
133
  private
125
134
 
126
135
  def select_hudson_server(options)
127
- unless Hudson::Api.setup_base_url(options)
136
+ unless @uri = Hudson::Api.setup_base_url(options)
128
137
  error "Either use --host or add remote servers."
129
138
  end
130
139
  end
140
+
131
141
  def display(text)
132
142
  shell.say text
133
143
  exit
134
144
  end
135
145
 
136
146
  def error(text)
137
- shell.say "ERROR: #{text}"
147
+ shell.say "ERROR: #{text}", :red
138
148
  exit
139
149
  end
140
150
  end
@@ -22,7 +22,7 @@ module Hudson
22
22
  table = options.map do |option|
23
23
  prototype = if option.default
24
24
  " [#{option.default}]"
25
- elsif option.boolean
25
+ elsif option.boolean?
26
26
  ""
27
27
  elsif option.required?
28
28
  " #{option.banner}"
@@ -0,0 +1,27 @@
1
+ module Hudson
2
+ module Config
3
+ extend self
4
+
5
+ def [](key)
6
+ config[key]
7
+ end
8
+
9
+ def config
10
+ @config ||= if File.exist?(config_file)
11
+ JSON.parse(File.read(config_file))
12
+ else
13
+ {}
14
+ end
15
+ end
16
+
17
+ def store!
18
+ @config ||= {}
19
+ FileUtils.mkdir_p(File.dirname(config_file))
20
+ File.open(config_file, "w") { |file| file << @config.to_json }
21
+ end
22
+
23
+ def config_file
24
+ @config_file ||= "#{ENV['HOME']}/.hudson/hudsonrb-config.json"
25
+ end
26
+ end
27
+ end
Binary file
Binary file
@@ -0,0 +1,11 @@
1
+ module Hudson
2
+ class Remote
3
+ def self.add_server(name, uri)
4
+ remotes[name] = uri
5
+ end
6
+
7
+ def self.remotes
8
+ @remotes ||= {}
9
+ end
10
+ end
11
+ end
@@ -1,9 +1,9 @@
1
1
  begin
2
- require 'spec'
2
+ require 'rspec'
3
3
  rescue LoadError
4
4
  require 'rubygems' unless ENV['NO_RUBYGEMS']
5
5
  gem 'rspec'
6
- require 'spec'
6
+ require 'rspec'
7
7
  end
8
8
 
9
9
  $:.unshift(File.dirname(__FILE__) + '/../lib')
metadata CHANGED
@@ -1,13 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hudson
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
4
+ hash: 62196369
5
+ prerelease: true
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 7
10
- version: 0.2.7
8
+ - 3
9
+ - 0
10
+ - beta
11
+ - 1
12
+ version: 0.3.0.beta.1
11
13
  platform: ruby
12
14
  authors:
13
15
  - Charles Lowell
@@ -16,12 +18,10 @@ autorequire:
16
18
  bindir: bin
17
19
  cert_chain: []
18
20
 
19
- date: 2010-08-25 00:00:00 -05:00
21
+ date: 2010-10-11 00:00:00 -07:00
20
22
  default_executable:
21
23
  dependencies:
22
24
  - !ruby/object:Gem::Dependency
23
- name: term-ansicolor
24
- prerelease: false
25
25
  requirement: &id001 !ruby/object:Gem::Requirement
26
26
  none: false
27
27
  requirements:
@@ -34,10 +34,10 @@ dependencies:
34
34
  - 4
35
35
  version: 1.0.4
36
36
  type: :runtime
37
+ prerelease: false
38
+ name: term-ansicolor
37
39
  version_requirements: *id001
38
40
  - !ruby/object:Gem::Dependency
39
- name: yajl-ruby
40
- prerelease: false
41
41
  requirement: &id002 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
@@ -50,10 +50,10 @@ dependencies:
50
50
  - 6
51
51
  version: 0.7.6
52
52
  type: :runtime
53
+ prerelease: false
54
+ name: yajl-ruby
53
55
  version_requirements: *id002
54
56
  - !ruby/object:Gem::Dependency
55
- name: httparty
56
- prerelease: false
57
57
  requirement: &id003 !ruby/object:Gem::Requirement
58
58
  none: false
59
59
  requirements:
@@ -66,10 +66,10 @@ dependencies:
66
66
  - 2
67
67
  version: 0.5.2
68
68
  type: :runtime
69
+ prerelease: false
70
+ name: httparty
69
71
  version_requirements: *id003
70
72
  - !ruby/object:Gem::Dependency
71
- name: builder
72
- prerelease: false
73
73
  requirement: &id004 !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
@@ -82,27 +82,43 @@ dependencies:
82
82
  - 2
83
83
  version: 2.1.2
84
84
  type: :runtime
85
+ prerelease: false
86
+ name: builder
85
87
  version_requirements: *id004
86
88
  - !ruby/object:Gem::Dependency
87
- name: thor
88
- prerelease: false
89
89
  requirement: &id005 !ruby/object:Gem::Requirement
90
90
  none: false
91
91
  requirements:
92
92
  - - "="
93
93
  - !ruby/object:Gem::Version
94
- hash: 39
94
+ hash: 35
95
95
  segments:
96
96
  - 0
97
- - 13
98
- - 6
99
- version: 0.13.6
97
+ - 14
98
+ - 2
99
+ version: 0.14.2
100
100
  type: :runtime
101
+ prerelease: false
102
+ name: thor
101
103
  version_requirements: *id005
102
104
  - !ruby/object:Gem::Dependency
103
- name: hpricot
104
- prerelease: false
105
105
  requirement: &id006 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ hash: 7
111
+ segments:
112
+ - 3
113
+ - 0
114
+ - 0
115
+ version: 3.0.0
116
+ type: :runtime
117
+ prerelease: false
118
+ name: activesupport
119
+ version_requirements: *id006
120
+ - !ruby/object:Gem::Dependency
121
+ requirement: &id007 !ruby/object:Gem::Requirement
106
122
  none: false
107
123
  requirements:
108
124
  - - ">="
@@ -112,43 +128,60 @@ dependencies:
112
128
  - 0
113
129
  version: "0"
114
130
  type: :runtime
115
- version_requirements: *id006
116
- - !ruby/object:Gem::Dependency
117
- name: cucumber
118
131
  prerelease: false
119
- requirement: &id007 !ruby/object:Gem::Requirement
132
+ name: hpricot
133
+ version_requirements: *id007
134
+ - !ruby/object:Gem::Dependency
135
+ requirement: &id008 !ruby/object:Gem::Requirement
120
136
  none: false
121
137
  requirements:
122
138
  - - ~>
123
139
  - !ruby/object:Gem::Version
124
- hash: 5
140
+ hash: 49
125
141
  segments:
126
142
  - 0
143
+ - 8
127
144
  - 7
128
- - 3
129
- version: 0.7.3
145
+ version: 0.8.7
130
146
  type: :development
131
- version_requirements: *id007
132
- - !ruby/object:Gem::Dependency
133
- name: rspec
134
147
  prerelease: false
135
- requirement: &id008 !ruby/object:Gem::Requirement
148
+ name: rake
149
+ version_requirements: *id008
150
+ - !ruby/object:Gem::Dependency
151
+ requirement: &id009 !ruby/object:Gem::Requirement
136
152
  none: false
137
153
  requirements:
138
154
  - - ~>
139
155
  - !ruby/object:Gem::Version
140
- hash: 27
156
+ hash: 59
141
157
  segments:
142
- - 1
143
- - 3
144
158
  - 0
145
- version: 1.3.0
159
+ - 9
160
+ - 0
161
+ version: 0.9.0
146
162
  type: :development
147
- version_requirements: *id008
163
+ prerelease: false
164
+ name: cucumber
165
+ version_requirements: *id009
148
166
  - !ruby/object:Gem::Dependency
149
- name: json
167
+ requirement: &id010 !ruby/object:Gem::Requirement
168
+ none: false
169
+ requirements:
170
+ - - ~>
171
+ - !ruby/object:Gem::Version
172
+ hash: 31098209
173
+ segments:
174
+ - 2
175
+ - 0
176
+ - 0
177
+ - beta
178
+ version: 2.0.0.beta
179
+ type: :development
150
180
  prerelease: false
151
- requirement: &id009 !ruby/object:Gem::Requirement
181
+ name: rspec
182
+ version_requirements: *id010
183
+ - !ruby/object:Gem::Dependency
184
+ requirement: &id011 !ruby/object:Gem::Requirement
152
185
  none: false
153
186
  requirements:
154
187
  - - ~>
@@ -160,7 +193,23 @@ dependencies:
160
193
  - 0
161
194
  version: 1.4.0
162
195
  type: :development
163
- version_requirements: *id009
196
+ prerelease: false
197
+ name: json
198
+ version_requirements: *id011
199
+ - !ruby/object:Gem::Dependency
200
+ requirement: &id012 !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ hash: 3
206
+ segments:
207
+ - 0
208
+ version: "0"
209
+ type: :development
210
+ prerelease: false
211
+ name: awesome_print
212
+ version_requirements: *id012
164
213
  description: A suite of utilities for bringing continous integration to your projects (not the other way around) with hudson CI
165
214
  email:
166
215
  - cowboyd@thefrontside.net
@@ -176,6 +225,7 @@ files:
176
225
  - features/create_jobs.feature
177
226
  - features/development.feature
178
227
  - features/fixtures/projects/ruby/Rakefile
228
+ - features/listing_jobs.feature
179
229
  - features/managing_remote_servers.feature
180
230
  - features/server.feature
181
231
  - features/step_definitions/common_steps.rb
@@ -186,10 +236,14 @@ files:
186
236
  - features/support/env.rb
187
237
  - features/support/hooks.rb
188
238
  - features/support/matchers.rb
239
+ - Gemfile
240
+ - Gemfile.lock
189
241
  - hudson.gemspec
190
242
  - lib/hudson/api.rb
191
243
  - lib/hudson/cli/formatting.rb
192
244
  - lib/hudson/cli.rb
245
+ - lib/hudson/config.rb
246
+ - lib/hudson/hudson-cli.jar
193
247
  - lib/hudson/hudson.war
194
248
  - lib/hudson/job_config_builder.rb
195
249
  - lib/hudson/plugins/git.hpi
@@ -198,6 +252,7 @@ files:
198
252
  - lib/hudson/plugins/rake.hpi
199
253
  - lib/hudson/plugins/ruby.hpi
200
254
  - lib/hudson/project_scm.rb
255
+ - lib/hudson/remote.rb
201
256
  - lib/hudson.rb
202
257
  - Rakefile
203
258
  - README.md
@@ -229,12 +284,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
229
284
  required_rubygems_version: !ruby/object:Gem::Requirement
230
285
  none: false
231
286
  requirements:
232
- - - ">="
287
+ - - ">"
233
288
  - !ruby/object:Gem::Version
234
- hash: 3
289
+ hash: 25
235
290
  segments:
236
- - 0
237
- version: "0"
291
+ - 1
292
+ - 3
293
+ - 1
294
+ version: 1.3.1
238
295
  requirements: []
239
296
 
240
297
  rubyforge_project: hudson