hudson 0.3.0.beta.10 → 0.3.0.beta.11
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.lock +1 -1
- data/Rakefile +3 -6
- data/features/manage_jobs.feature +6 -2
- data/features/step_definitions/fixture_project_steps.rb +1 -1
- data/features/support/env.rb +2 -3
- data/{features/fixtures/projects/ruby → fixtures/projects/non-bundler}/Rakefile +0 -0
- data/fixtures/projects/rails-3/Gemfile +30 -0
- data/fixtures/projects/rails-3/Gemfile.lock +74 -0
- data/fixtures/projects/rails-3/README +256 -0
- data/fixtures/projects/rails-3/Rakefile +7 -0
- data/fixtures/projects/rails-3/app/controllers/application_controller.rb +3 -0
- data/fixtures/projects/rails-3/app/helpers/application_helper.rb +2 -0
- data/fixtures/projects/rails-3/app/views/layouts/application.html.erb +14 -0
- data/fixtures/projects/rails-3/config.ru +4 -0
- data/fixtures/projects/rails-3/config/application.rb +42 -0
- data/fixtures/projects/rails-3/config/boot.rb +13 -0
- data/fixtures/projects/rails-3/config/database.yml +22 -0
- data/fixtures/projects/rails-3/config/environment.rb +5 -0
- data/fixtures/projects/rails-3/config/environments/development.rb +26 -0
- data/fixtures/projects/rails-3/config/environments/production.rb +49 -0
- data/fixtures/projects/rails-3/config/environments/test.rb +35 -0
- data/fixtures/projects/rails-3/config/initializers/backtrace_silencers.rb +7 -0
- data/fixtures/projects/rails-3/config/initializers/inflections.rb +10 -0
- data/fixtures/projects/rails-3/config/initializers/mime_types.rb +5 -0
- data/fixtures/projects/rails-3/config/initializers/secret_token.rb +7 -0
- data/fixtures/projects/rails-3/config/initializers/session_store.rb +8 -0
- data/fixtures/projects/rails-3/config/locales/en.yml +5 -0
- data/fixtures/projects/rails-3/config/routes.rb +58 -0
- data/fixtures/projects/rails-3/db/seeds.rb +7 -0
- data/fixtures/projects/rails-3/doc/README_FOR_APP +2 -0
- data/fixtures/projects/rails-3/log/development.log +0 -0
- data/fixtures/projects/rails-3/log/production.log +0 -0
- data/fixtures/projects/rails-3/log/server.log +0 -0
- data/fixtures/projects/rails-3/log/test.log +0 -0
- data/fixtures/projects/rails-3/public/404.html +26 -0
- data/fixtures/projects/rails-3/public/422.html +26 -0
- data/fixtures/projects/rails-3/public/500.html +26 -0
- data/fixtures/projects/rails-3/public/favicon.ico +0 -0
- data/fixtures/projects/rails-3/public/images/rails.png +0 -0
- data/fixtures/projects/rails-3/public/index.html +239 -0
- data/fixtures/projects/rails-3/public/javascripts/application.js +2 -0
- data/fixtures/projects/rails-3/public/javascripts/controls.js +965 -0
- data/fixtures/projects/rails-3/public/javascripts/dragdrop.js +974 -0
- data/fixtures/projects/rails-3/public/javascripts/effects.js +1123 -0
- data/fixtures/projects/rails-3/public/javascripts/prototype.js +6001 -0
- data/fixtures/projects/rails-3/public/javascripts/rails.js +175 -0
- data/fixtures/projects/rails-3/public/robots.txt +5 -0
- data/fixtures/projects/rails-3/script/rails +6 -0
- data/fixtures/projects/rails-3/test/performance/browsing_test.rb +9 -0
- data/fixtures/projects/rails-3/test/test_helper.rb +13 -0
- data/fixtures/projects/ruby/Gemfile +3 -0
- data/fixtures/projects/ruby/Gemfile.lock +10 -0
- data/fixtures/projects/ruby/Rakefile +4 -0
- data/hudson.gemspec +3 -3
- data/lib/hudson.rb +2 -2
- data/lib/hudson/cli.rb +3 -0
- data/lib/hudson/hudson.war +0 -0
- data/lib/hudson/hudson_version.rb +4 -0
- data/lib/hudson/job_config_builder.rb +19 -2
- data/lib/hudson/plugins/git.hpi +0 -0
- data/lib/hudson/plugins/greenballs.hpi +0 -0
- data/lib/hudson/plugins/rake.hpi +0 -0
- data/lib/hudson/version.rb +3 -0
- data/spec/fixtures/rails.single.config.xml +10 -2
- data/spec/fixtures/rubygem.config.xml +9 -1
- data/spec/job_config_builder_spec.rb +16 -1
- data/tasks/upgrade.rake +83 -0
- metadata +55 -5
@@ -0,0 +1,175 @@
|
|
1
|
+
(function() {
|
2
|
+
// Technique from Juriy Zaytsev
|
3
|
+
// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
|
4
|
+
function isEventSupported(eventName) {
|
5
|
+
var el = document.createElement('div');
|
6
|
+
eventName = 'on' + eventName;
|
7
|
+
var isSupported = (eventName in el);
|
8
|
+
if (!isSupported) {
|
9
|
+
el.setAttribute(eventName, 'return;');
|
10
|
+
isSupported = typeof el[eventName] == 'function';
|
11
|
+
}
|
12
|
+
el = null;
|
13
|
+
return isSupported;
|
14
|
+
}
|
15
|
+
|
16
|
+
function isForm(element) {
|
17
|
+
return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
|
18
|
+
}
|
19
|
+
|
20
|
+
function isInput(element) {
|
21
|
+
if (Object.isElement(element)) {
|
22
|
+
var name = element.nodeName.toUpperCase()
|
23
|
+
return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
|
24
|
+
}
|
25
|
+
else return false
|
26
|
+
}
|
27
|
+
|
28
|
+
var submitBubbles = isEventSupported('submit'),
|
29
|
+
changeBubbles = isEventSupported('change')
|
30
|
+
|
31
|
+
if (!submitBubbles || !changeBubbles) {
|
32
|
+
// augment the Event.Handler class to observe custom events when needed
|
33
|
+
Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
|
34
|
+
function(init, element, eventName, selector, callback) {
|
35
|
+
init(element, eventName, selector, callback)
|
36
|
+
// is the handler being attached to an element that doesn't support this event?
|
37
|
+
if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
|
38
|
+
(!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
|
39
|
+
// "submit" => "emulated:submit"
|
40
|
+
this.eventName = 'emulated:' + this.eventName
|
41
|
+
}
|
42
|
+
}
|
43
|
+
)
|
44
|
+
}
|
45
|
+
|
46
|
+
if (!submitBubbles) {
|
47
|
+
// discover forms on the page by observing focus events which always bubble
|
48
|
+
document.on('focusin', 'form', function(focusEvent, form) {
|
49
|
+
// special handler for the real "submit" event (one-time operation)
|
50
|
+
if (!form.retrieve('emulated:submit')) {
|
51
|
+
form.on('submit', function(submitEvent) {
|
52
|
+
var emulated = form.fire('emulated:submit', submitEvent, true)
|
53
|
+
// if custom event received preventDefault, cancel the real one too
|
54
|
+
if (emulated.returnValue === false) submitEvent.preventDefault()
|
55
|
+
})
|
56
|
+
form.store('emulated:submit', true)
|
57
|
+
}
|
58
|
+
})
|
59
|
+
}
|
60
|
+
|
61
|
+
if (!changeBubbles) {
|
62
|
+
// discover form inputs on the page
|
63
|
+
document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
|
64
|
+
// special handler for real "change" events
|
65
|
+
if (!input.retrieve('emulated:change')) {
|
66
|
+
input.on('change', function(changeEvent) {
|
67
|
+
input.fire('emulated:change', changeEvent, true)
|
68
|
+
})
|
69
|
+
input.store('emulated:change', true)
|
70
|
+
}
|
71
|
+
})
|
72
|
+
}
|
73
|
+
|
74
|
+
function handleRemote(element) {
|
75
|
+
var method, url, params;
|
76
|
+
|
77
|
+
var event = element.fire("ajax:before");
|
78
|
+
if (event.stopped) return false;
|
79
|
+
|
80
|
+
if (element.tagName.toLowerCase() === 'form') {
|
81
|
+
method = element.readAttribute('method') || 'post';
|
82
|
+
url = element.readAttribute('action');
|
83
|
+
params = element.serialize();
|
84
|
+
} else {
|
85
|
+
method = element.readAttribute('data-method') || 'get';
|
86
|
+
url = element.readAttribute('href');
|
87
|
+
params = {};
|
88
|
+
}
|
89
|
+
|
90
|
+
new Ajax.Request(url, {
|
91
|
+
method: method,
|
92
|
+
parameters: params,
|
93
|
+
evalScripts: true,
|
94
|
+
|
95
|
+
onComplete: function(request) { element.fire("ajax:complete", request); },
|
96
|
+
onSuccess: function(request) { element.fire("ajax:success", request); },
|
97
|
+
onFailure: function(request) { element.fire("ajax:failure", request); }
|
98
|
+
});
|
99
|
+
|
100
|
+
element.fire("ajax:after");
|
101
|
+
}
|
102
|
+
|
103
|
+
function handleMethod(element) {
|
104
|
+
var method = element.readAttribute('data-method'),
|
105
|
+
url = element.readAttribute('href'),
|
106
|
+
csrf_param = $$('meta[name=csrf-param]')[0],
|
107
|
+
csrf_token = $$('meta[name=csrf-token]')[0];
|
108
|
+
|
109
|
+
var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
|
110
|
+
element.parentNode.insert(form);
|
111
|
+
|
112
|
+
if (method !== 'post') {
|
113
|
+
var field = new Element('input', { type: 'hidden', name: '_method', value: method });
|
114
|
+
form.insert(field);
|
115
|
+
}
|
116
|
+
|
117
|
+
if (csrf_param) {
|
118
|
+
var param = csrf_param.readAttribute('content'),
|
119
|
+
token = csrf_token.readAttribute('content'),
|
120
|
+
field = new Element('input', { type: 'hidden', name: param, value: token });
|
121
|
+
form.insert(field);
|
122
|
+
}
|
123
|
+
|
124
|
+
form.submit();
|
125
|
+
}
|
126
|
+
|
127
|
+
|
128
|
+
document.on("click", "*[data-confirm]", function(event, element) {
|
129
|
+
var message = element.readAttribute('data-confirm');
|
130
|
+
if (!confirm(message)) event.stop();
|
131
|
+
});
|
132
|
+
|
133
|
+
document.on("click", "a[data-remote]", function(event, element) {
|
134
|
+
if (event.stopped) return;
|
135
|
+
handleRemote(element);
|
136
|
+
event.stop();
|
137
|
+
});
|
138
|
+
|
139
|
+
document.on("click", "a[data-method]", function(event, element) {
|
140
|
+
if (event.stopped) return;
|
141
|
+
handleMethod(element);
|
142
|
+
event.stop();
|
143
|
+
});
|
144
|
+
|
145
|
+
document.on("submit", function(event) {
|
146
|
+
var element = event.findElement(),
|
147
|
+
message = element.readAttribute('data-confirm');
|
148
|
+
if (message && !confirm(message)) {
|
149
|
+
event.stop();
|
150
|
+
return false;
|
151
|
+
}
|
152
|
+
|
153
|
+
var inputs = element.select("input[type=submit][data-disable-with]");
|
154
|
+
inputs.each(function(input) {
|
155
|
+
input.disabled = true;
|
156
|
+
input.writeAttribute('data-original-value', input.value);
|
157
|
+
input.value = input.readAttribute('data-disable-with');
|
158
|
+
});
|
159
|
+
|
160
|
+
var element = event.findElement("form[data-remote]");
|
161
|
+
if (element) {
|
162
|
+
handleRemote(element);
|
163
|
+
event.stop();
|
164
|
+
}
|
165
|
+
});
|
166
|
+
|
167
|
+
document.on("ajax:after", "form", function(event, element) {
|
168
|
+
var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
|
169
|
+
inputs.each(function(input) {
|
170
|
+
input.value = input.readAttribute('data-original-value');
|
171
|
+
input.removeAttribute('data-original-value');
|
172
|
+
input.disabled = false;
|
173
|
+
});
|
174
|
+
});
|
175
|
+
})();
|
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
+
require File.expand_path('../../config/boot', __FILE__)
|
6
|
+
require 'rails/commands'
|
@@ -0,0 +1,13 @@
|
|
1
|
+
ENV["RAILS_ENV"] = "test"
|
2
|
+
require File.expand_path('../../config/environment', __FILE__)
|
3
|
+
require 'rails/test_help'
|
4
|
+
|
5
|
+
class ActiveSupport::TestCase
|
6
|
+
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
|
7
|
+
#
|
8
|
+
# Note: You'll currently still have to declare fixtures explicitly in integration tests
|
9
|
+
# -- they do not yet inherit this setting
|
10
|
+
fixtures :all
|
11
|
+
|
12
|
+
# Add more helper methods to be used by all tests here...
|
13
|
+
end
|
data/hudson.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{hudson}
|
5
|
-
s.version = "0.3.0.beta.
|
5
|
+
s.version = "0.3.0.beta.11"
|
6
6
|
|
7
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-10-
|
9
|
+
s.date = %q{2010-10-29}
|
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/development.feature", "features/
|
14
|
+
s.files = ["bin", "bin/hudson", "features", "features/development.feature", "features/listing_jobs.feature", "features/manage_jobs.feature", "features/manage_remote_servers.feature", "features/manage_slave_nodes.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", "fixtures", "fixtures/projects", "fixtures/projects/non-bundler", "fixtures/projects/non-bundler/Rakefile", "fixtures/projects/rails-3", "fixtures/projects/rails-3/app", "fixtures/projects/rails-3/app/controllers", "fixtures/projects/rails-3/app/controllers/application_controller.rb", "fixtures/projects/rails-3/app/helpers", "fixtures/projects/rails-3/app/helpers/application_helper.rb", "fixtures/projects/rails-3/app/mailers", "fixtures/projects/rails-3/app/models", "fixtures/projects/rails-3/app/views", "fixtures/projects/rails-3/app/views/layouts", "fixtures/projects/rails-3/app/views/layouts/application.html.erb", "fixtures/projects/rails-3/config", "fixtures/projects/rails-3/config/application.rb", "fixtures/projects/rails-3/config/boot.rb", "fixtures/projects/rails-3/config/database.yml", "fixtures/projects/rails-3/config/environment.rb", "fixtures/projects/rails-3/config/environments", "fixtures/projects/rails-3/config/environments/development.rb", "fixtures/projects/rails-3/config/environments/production.rb", "fixtures/projects/rails-3/config/environments/test.rb", "fixtures/projects/rails-3/config/initializers", "fixtures/projects/rails-3/config/initializers/backtrace_silencers.rb", "fixtures/projects/rails-3/config/initializers/inflections.rb", "fixtures/projects/rails-3/config/initializers/mime_types.rb", "fixtures/projects/rails-3/config/initializers/secret_token.rb", "fixtures/projects/rails-3/config/initializers/session_store.rb", "fixtures/projects/rails-3/config/locales", "fixtures/projects/rails-3/config/locales/en.yml", "fixtures/projects/rails-3/config/routes.rb", "fixtures/projects/rails-3/config.ru", "fixtures/projects/rails-3/db", "fixtures/projects/rails-3/db/seeds.rb", "fixtures/projects/rails-3/doc", "fixtures/projects/rails-3/doc/README_FOR_APP", "fixtures/projects/rails-3/Gemfile", "fixtures/projects/rails-3/Gemfile.lock", "fixtures/projects/rails-3/lib", "fixtures/projects/rails-3/lib/tasks", "fixtures/projects/rails-3/log", "fixtures/projects/rails-3/log/development.log", "fixtures/projects/rails-3/log/production.log", "fixtures/projects/rails-3/log/server.log", "fixtures/projects/rails-3/log/test.log", "fixtures/projects/rails-3/public", "fixtures/projects/rails-3/public/404.html", "fixtures/projects/rails-3/public/422.html", "fixtures/projects/rails-3/public/500.html", "fixtures/projects/rails-3/public/favicon.ico", "fixtures/projects/rails-3/public/images", "fixtures/projects/rails-3/public/images/rails.png", "fixtures/projects/rails-3/public/index.html", "fixtures/projects/rails-3/public/javascripts", "fixtures/projects/rails-3/public/javascripts/application.js", "fixtures/projects/rails-3/public/javascripts/controls.js", "fixtures/projects/rails-3/public/javascripts/dragdrop.js", "fixtures/projects/rails-3/public/javascripts/effects.js", "fixtures/projects/rails-3/public/javascripts/prototype.js", "fixtures/projects/rails-3/public/javascripts/rails.js", "fixtures/projects/rails-3/public/robots.txt", "fixtures/projects/rails-3/public/stylesheets", "fixtures/projects/rails-3/Rakefile", "fixtures/projects/rails-3/README", "fixtures/projects/rails-3/script", "fixtures/projects/rails-3/script/rails", "fixtures/projects/rails-3/test", "fixtures/projects/rails-3/test/fixtures", "fixtures/projects/rails-3/test/functional", "fixtures/projects/rails-3/test/integration", "fixtures/projects/rails-3/test/performance", "fixtures/projects/rails-3/test/performance/browsing_test.rb", "fixtures/projects/rails-3/test/test_helper.rb", "fixtures/projects/rails-3/test/unit", "fixtures/projects/rails-3/vendor", "fixtures/projects/rails-3/vendor/plugins", "fixtures/projects/ruby", "fixtures/projects/ruby/Gemfile", "fixtures/projects/ruby/Gemfile.lock", "fixtures/projects/ruby/Rakefile", "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/core_ext", "lib/hudson/core_ext/object", "lib/hudson/core_ext/object/blank.rb", "lib/hudson/hudson-cli.jar", "lib/hudson/hudson.war", "lib/hudson/hudson_version.rb", "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/version.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.triggers.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", "tasks", "tasks/upgrade.rake"]
|
15
15
|
s.homepage = %q{http://github.com/cowboyd/hudson.rb}
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.rubyforge_project = %q{hudson}
|
data/lib/hudson.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module Hudson
|
2
|
-
VERSION = "0.3.0.beta.10"
|
3
|
-
HUDSON_VERSION = "1.380"
|
4
2
|
WAR = File.expand_path(File.dirname(__FILE__) + "/hudson/hudson.war")
|
5
3
|
PLUGINS = File.expand_path(File.dirname(__FILE__) + "/hudson/plugins")
|
6
4
|
end
|
7
5
|
|
6
|
+
require 'hudson/version'
|
7
|
+
require 'hudson/hudson_version'
|
8
8
|
require 'hudson/api'
|
9
9
|
require 'hudson/job_config_builder'
|
10
10
|
require 'hudson/project_scm'
|
data/lib/hudson/cli.rb
CHANGED
@@ -56,6 +56,9 @@ module Hudson
|
|
56
56
|
unless scm = Hudson::ProjectScm.discover
|
57
57
|
error "Cannot determine project SCM. Currently supported: #{Hudson::ProjectScm.supported}"
|
58
58
|
end
|
59
|
+
unless File.exists?("Gemfile")
|
60
|
+
error "Ruby/Rails projects without a Gemfile are currently unsupported."
|
61
|
+
end
|
59
62
|
job_config = Hudson::JobConfigBuilder.new(:rails) do |c|
|
60
63
|
c.scm = scm.url
|
61
64
|
c.assigned_node = options[:assigned_node] if options[:assigned_node]
|
data/lib/hudson/hudson.war
CHANGED
Binary file
|
@@ -62,7 +62,7 @@ module Hudson
|
|
62
62
|
b.string "uploadpack"
|
63
63
|
b.string "git-upload-pack"
|
64
64
|
b.string "url"
|
65
|
-
b.string scm
|
65
|
+
b.string public_only_git_scm(scm) # FIXME remove when we have deploy keys
|
66
66
|
b.string "tagopt"
|
67
67
|
b.string
|
68
68
|
end
|
@@ -78,11 +78,19 @@ module Hudson
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
+
b.localBranch
|
81
82
|
b.mergeOptions
|
83
|
+
b.recursiveSubmodules false
|
82
84
|
b.doGenerateSubmoduleConfigurations false
|
85
|
+
b.authorOrCommitter false
|
83
86
|
b.clean false
|
84
|
-
b.
|
87
|
+
b.wipeOutWorkspace false
|
88
|
+
b.buildChooser :class => "hudson.plugins.git.util.DefaultBuildChooser"
|
89
|
+
b.gitTool "Default"
|
85
90
|
b.submoduleCfg :class => "list"
|
91
|
+
b.relativeTargetDir
|
92
|
+
b.excludedRegions
|
93
|
+
b.excludedUsers
|
86
94
|
end
|
87
95
|
end
|
88
96
|
end
|
@@ -170,5 +178,14 @@ module Hudson
|
|
170
178
|
b.silent false
|
171
179
|
end
|
172
180
|
end
|
181
|
+
|
182
|
+
# Converts git@github.com:drnic/newgem.git into git://github.com/drnic/newgem.git
|
183
|
+
def public_only_git_scm(scm_url)
|
184
|
+
if scm_url =~ /git@([\w\-_.]+):(.+)\.git/
|
185
|
+
"git://#{$1}/#{$2}.git"
|
186
|
+
else
|
187
|
+
scm_url
|
188
|
+
end
|
189
|
+
end
|
173
190
|
end
|
174
191
|
end
|
data/lib/hudson/plugins/git.hpi
CHANGED
Binary file
|
Binary file
|
data/lib/hudson/plugins/rake.hpi
CHANGED
Binary file
|
@@ -17,7 +17,7 @@
|
|
17
17
|
<string>uploadpack</string>
|
18
18
|
<string>git-upload-pack</string>
|
19
19
|
<string>url</string>
|
20
|
-
<string>git
|
20
|
+
<string>git://codebasehq.com/mocra/misc/mocra-web.git</string>
|
21
21
|
<string>tagopt</string>
|
22
22
|
<string/>
|
23
23
|
</org.spearce.jgit.transport.RemoteConfig>
|
@@ -27,11 +27,19 @@
|
|
27
27
|
<name>master</name>
|
28
28
|
</hudson.plugins.git.BranchSpec>
|
29
29
|
</branches>
|
30
|
+
<localBranch/>
|
30
31
|
<mergeOptions/>
|
32
|
+
<recursiveSubmodules>false</recursiveSubmodules>
|
31
33
|
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
|
34
|
+
<authorOrCommitter>false</authorOrCommitter>
|
32
35
|
<clean>false</clean>
|
33
|
-
<
|
36
|
+
<wipeOutWorkspace>false</wipeOutWorkspace>
|
37
|
+
<buildChooser class="hudson.plugins.git.util.DefaultBuildChooser"/>
|
38
|
+
<gitTool>Default</gitTool>
|
34
39
|
<submoduleCfg class="list"/>
|
40
|
+
<relativeTargetDir/>
|
41
|
+
<excludedRegions/>
|
42
|
+
<excludedUsers/>
|
35
43
|
</scm>
|
36
44
|
<canRoam>true</canRoam>
|
37
45
|
<disabled>false</disabled>
|
@@ -27,11 +27,19 @@
|
|
27
27
|
<name>**</name>
|
28
28
|
</hudson.plugins.git.BranchSpec>
|
29
29
|
</branches>
|
30
|
+
<localBranch/>
|
30
31
|
<mergeOptions/>
|
32
|
+
<recursiveSubmodules>false</recursiveSubmodules>
|
31
33
|
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
|
34
|
+
<authorOrCommitter>false</authorOrCommitter>
|
32
35
|
<clean>false</clean>
|
33
|
-
<
|
36
|
+
<wipeOutWorkspace>false</wipeOutWorkspace>
|
37
|
+
<buildChooser class="hudson.plugins.git.util.DefaultBuildChooser"/>
|
38
|
+
<gitTool>Default</gitTool>
|
34
39
|
<submoduleCfg class="list"/>
|
40
|
+
<relativeTargetDir/>
|
41
|
+
<excludedRegions/>
|
42
|
+
<excludedUsers/>
|
35
43
|
</scm>
|
36
44
|
<canRoam>true</canRoam>
|
37
45
|
<disabled>false</disabled>
|
@@ -6,7 +6,7 @@ describe Hudson::JobConfigBuilder do
|
|
6
6
|
describe "rails job; single axis; block syntax" do
|
7
7
|
before do
|
8
8
|
@config = Hudson::JobConfigBuilder.new(:rails) do |c|
|
9
|
-
c.scm = "git
|
9
|
+
c.scm = "git://codebasehq.com/mocra/misc/mocra-web.git"
|
10
10
|
c.git_branches = %w[master]
|
11
11
|
end
|
12
12
|
end
|
@@ -48,4 +48,19 @@ describe Hudson::JobConfigBuilder do
|
|
48
48
|
Hpricot.XML(@config.to_xml).search("assignedNode").size.should == 0
|
49
49
|
end
|
50
50
|
end
|
51
|
+
|
52
|
+
describe "temporary:" do
|
53
|
+
describe "convert git@ into git:// until we have deploy keys" do
|
54
|
+
before do
|
55
|
+
@config = Hudson::JobConfigBuilder.new(:rails) do |c|
|
56
|
+
c.scm = "git@codebasehq.com:mocra/misc/mocra-web.git"
|
57
|
+
c.git_branches = %w[master]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
it "builds config.xml" do
|
61
|
+
config_xml("rails", "single").should == @config.to_xml
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
51
66
|
end
|
data/tasks/upgrade.rake
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'ostruct'
|
3
|
+
require 'json'
|
4
|
+
require 'hudson'
|
5
|
+
class Hudson::Progress
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@shell = Thor::Shell::Color.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def means(step)
|
12
|
+
begin
|
13
|
+
@shell.say(step + "... ")
|
14
|
+
yield(self).tap do
|
15
|
+
@shell.say("[OK]", :green)
|
16
|
+
end
|
17
|
+
rescue Ok => ok
|
18
|
+
@shell.say("[OK#{ok.message ? " - #{ok.message}" : ''}]", :green)
|
19
|
+
rescue StandardError => e
|
20
|
+
@shell.say("[FAIL - #{e.message}]", :red)
|
21
|
+
false
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def ok(msg = nil)
|
26
|
+
raise Ok.new(msg)
|
27
|
+
end
|
28
|
+
|
29
|
+
class Ok < StandardError
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
class Hudson::FetchPlugin
|
35
|
+
def initialize(progress, latest)
|
36
|
+
@progress, @latest = progress, latest
|
37
|
+
end
|
38
|
+
|
39
|
+
def fetch(plugin)
|
40
|
+
plugin = plugin.to_s
|
41
|
+
metadata = OpenStruct.new(@latest['plugins'][plugin])
|
42
|
+
@progress.means "upgrading #{plugin} plugin" do |step|
|
43
|
+
system("cd lib/hudson/plugins && curl -L --silent #{metadata.url} > #{plugin}.hpi")
|
44
|
+
step.ok(metadata.version)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
namespace :hudson do
|
51
|
+
|
52
|
+
desc "upgrade hudson server version, and bundled plugins to latest version"
|
53
|
+
task :upgrade do
|
54
|
+
progress = Hudson::Progress.new
|
55
|
+
latest = progress.means "grabbing the latest metadata from hudson-ci.org" do |step|
|
56
|
+
JSON.parse(HTTParty.get("http://hudson-ci.org/update-center.json").lines.to_a[1..-2].join("\n"))
|
57
|
+
end
|
58
|
+
progress.means "upgrading hudson server" do |step|
|
59
|
+
latest_version = latest["core"]["version"]
|
60
|
+
current_version = Hudson::HUDSON_VERSION
|
61
|
+
if latest_version > current_version
|
62
|
+
`cd lib/hudson && rm hudson.war && curl -L --silent #{latest["core"]["url"]} > hudson.war`
|
63
|
+
File.open(File.expand_path(File.dirname(__FILE__) + '/../lib/hudson/hudson_version.rb'), "w") do |f|
|
64
|
+
f.write <<-EOF
|
65
|
+
module Hudson
|
66
|
+
HUDSON_VERSION = "#{latest["core"]["version"]}"
|
67
|
+
end
|
68
|
+
|
69
|
+
EOF
|
70
|
+
end
|
71
|
+
step.ok("#{current_version} -> #{latest_version}")
|
72
|
+
else
|
73
|
+
step.ok("Up-to-date at #{current_version}")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
plugins = Hudson::FetchPlugin.new(progress, latest)
|
78
|
+
|
79
|
+
Dir['lib/hudson/plugins/*.hpi'].each do |plugin_file|
|
80
|
+
plugins.fetch File.basename(plugin_file, ".hpi")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|