corundum 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/doc/Specifications +1 -1
- data/doc/coverage/index.html +1437 -1571
- data/lib/corundum.rb +53 -63
- data/lib/corundum/configurable.rb +54 -0
- data/lib/corundum/email.rb +17 -30
- data/lib/corundum/gem_building.rb +7 -12
- data/lib/corundum/gemcutter.rb +25 -28
- data/lib/corundum/gemspec_sanity.rb +3 -8
- data/lib/corundum/rspec.rb +23 -23
- data/lib/corundum/rubyforge.rb +8 -42
- data/lib/corundum/simplecov.rb +29 -37
- data/lib/corundum/tasklib.rb +17 -17
- data/lib/corundum/version_control.rb +5 -10
- data/lib/corundum/version_control/monotone.rb +11 -9
- data/lib/corundum/yardoc.rb +11 -11
- metadata +5 -4
data/lib/corundum.rb
CHANGED
@@ -7,64 +7,69 @@ module Corundum
|
|
7
7
|
extend Rake::DSL
|
8
8
|
|
9
9
|
class Toolkit < TaskLib
|
10
|
-
def default_configuration
|
11
|
-
|
12
|
-
:namespace => namespace,
|
10
|
+
def default_configuration
|
11
|
+
settings(
|
13
12
|
:finished_dir => "corundum",
|
14
|
-
:finished_files =>
|
13
|
+
:finished_files => nested(
|
14
|
+
:build => nil,
|
15
|
+
:qa => nil,
|
16
|
+
:package => nil,
|
17
|
+
:release => nil,
|
18
|
+
:press => nil),
|
15
19
|
|
16
20
|
:browser => "chromium",
|
17
21
|
:gemspec => nil,
|
18
22
|
:gemspec_path => nil,
|
19
|
-
:email =>
|
20
|
-
:servers => [
|
23
|
+
:email => nested(
|
24
|
+
:servers => [ nested({ :server => "ruby-lang.org", :helo => "gmail.com" }) ],
|
21
25
|
:announce_to_email => "ruby-talk@ruby-lang.org"
|
22
26
|
),
|
23
27
|
:package_dir => "pkg",
|
24
|
-
:files =>
|
25
|
-
:file_lists =>
|
26
|
-
:rubyforge =>
|
28
|
+
:files => nested(:code => nil, :test => nil, :docs => nil),
|
29
|
+
:file_lists => nested(:code => nil, :test => nil, :docs => nil, :all => nil),
|
30
|
+
:rubyforge => nested().nil_fields(:group_id, :package_id,
|
31
|
+
:release_name, :home_page, :project_page),
|
27
32
|
:doc_dir => "rubydoc"
|
28
33
|
)
|
29
34
|
end
|
30
35
|
|
31
36
|
def load_gemspec
|
32
|
-
@
|
33
|
-
@
|
34
|
-
return
|
37
|
+
@gemspec_path ||= guess_gemspec
|
38
|
+
@gemspec ||= Gem::Specification::load(gemspec_path)
|
39
|
+
return gemspec
|
35
40
|
end
|
36
41
|
|
37
42
|
def resolve_configuration
|
38
43
|
load_gemspec
|
39
44
|
|
40
|
-
@
|
41
|
-
|
42
|
-
@
|
43
|
-
|
44
|
-
@
|
45
|
-
|
46
|
-
@
|
47
|
-
|
48
|
-
@
|
49
|
-
|
50
|
-
|
51
|
-
@
|
52
|
-
@
|
53
|
-
@
|
54
|
-
|
55
|
-
@
|
56
|
-
@
|
57
|
-
@
|
58
|
-
@
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
@
|
64
|
-
@
|
65
|
-
@
|
66
|
-
@
|
67
|
-
@
|
45
|
+
@finished_files.build ||= File::join(
|
46
|
+
finished_dir, "build_#{gemspec.version}")
|
47
|
+
@finished_files.qa ||= File::join(
|
48
|
+
finished_dir, "qa_#{gemspec.version}")
|
49
|
+
@finished_files.package ||= File::join(
|
50
|
+
finished_dir, "package_#{gemspec.version}")
|
51
|
+
@finished_files.release ||= File::join(
|
52
|
+
finished_dir, "release_#{gemspec.version}")
|
53
|
+
@finished_files.press ||= File::join(
|
54
|
+
finished_dir, "press_#{gemspec.version}")
|
55
|
+
|
56
|
+
@files.code ||= gemspec.files.grep(%r{^lib/})
|
57
|
+
@files.test ||= gemspec.files.grep(%r{^spec/})
|
58
|
+
@files.docs ||= gemspec.files.grep(%r{^doc/})
|
59
|
+
|
60
|
+
@file_lists.code ||= FileList['lib/**/*.rb']
|
61
|
+
@file_lists.test ||= FileList['test/**/*.rb','spec/**/*.rb','features/**/*.rb']
|
62
|
+
@file_lists.docs ||= FileList['doc/**/*.rb']
|
63
|
+
@file_lists.all ||=
|
64
|
+
file_lists.code +
|
65
|
+
file_lists.test +
|
66
|
+
file_lists.docs
|
67
|
+
|
68
|
+
@rubyforge.group_id ||= gemspec.rubyforge_project
|
69
|
+
@rubyforge.package_id ||= gemspec.name.downcase
|
70
|
+
@rubyforge.release_name ||= gemspec.full_name
|
71
|
+
@rubyforge.home_page ||= gemspec.homepage
|
72
|
+
@rubyforge.project_page ||= "http://rubyforge.org/project/#{gemspec.rubyforge_project}/"
|
68
73
|
end
|
69
74
|
|
70
75
|
def guess_gemspec
|
@@ -81,50 +86,35 @@ module Corundum
|
|
81
86
|
|
82
87
|
def define
|
83
88
|
in_namespace do
|
84
|
-
directory
|
89
|
+
directory finished_dir
|
85
90
|
|
86
91
|
desc "Run preflight checks"
|
87
92
|
task :preflight
|
88
93
|
|
89
94
|
desc "Run quality assurance tasks"
|
90
95
|
task :qa => :preflight
|
91
|
-
file
|
96
|
+
file finished_files.qa => [:qa, finished_dir] do |task|
|
92
97
|
touch task.name
|
93
98
|
end
|
94
99
|
|
95
100
|
desc "Build the package"
|
96
|
-
task :build =>
|
97
|
-
file
|
101
|
+
task :build => finished_files.qa
|
102
|
+
file finished_files.build => [:build, finished_dir] do |task|
|
98
103
|
touch task.name
|
99
104
|
end
|
100
105
|
|
101
106
|
desc "Push package out to the world"
|
102
|
-
task :release =>
|
103
|
-
file
|
107
|
+
task :release => finished_files.build
|
108
|
+
file finished_files.release => [:release, finished_dir] do |task|
|
104
109
|
touch task.name
|
105
110
|
end
|
106
111
|
|
107
112
|
desc "Announce publication"
|
108
|
-
task :press =>
|
109
|
-
file
|
113
|
+
task :press => finished_files.release
|
114
|
+
file finished_files.press => [:press, finished_dir] do |task|
|
110
115
|
touch task.name
|
111
116
|
end
|
112
117
|
end
|
113
118
|
end
|
114
|
-
|
115
|
-
def old_define
|
116
|
-
|
117
|
-
task @publishing.namespace => "#{@gem_building.namespace}:push"
|
118
|
-
task "#{@publishing.namespace}:docs" => "#{@documentation.namespace}:docs"
|
119
|
-
task "#{@publishing.namespace}:rubyforge" => ["#{@quality_assurance.namespace}:sign_off", "#{@gem_building.namespace}:package"]
|
120
|
-
|
121
|
-
require 'corundum/press'
|
122
|
-
Press.new(@press.namespace) do |press|
|
123
|
-
press.rubyforge = @rubyforge
|
124
|
-
press.gemspec = @configuration.gemspec
|
125
|
-
press.announce_to_email = @email.announce_to_email
|
126
|
-
press.email_servers = @email.servers
|
127
|
-
end
|
128
|
-
end
|
129
119
|
end
|
130
120
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module Corundum
|
4
|
+
module Configurable
|
5
|
+
def local_attrs
|
6
|
+
@local_attrs ||=
|
7
|
+
begin
|
8
|
+
mod = Module.new
|
9
|
+
extend mod
|
10
|
+
mod
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def local_attrs=(mod)
|
15
|
+
extend mod
|
16
|
+
@local_attrs = mod
|
17
|
+
end
|
18
|
+
|
19
|
+
def setting(name, default_value = nil)
|
20
|
+
local_attrs.instance_eval do
|
21
|
+
attr_accessor(name)
|
22
|
+
end
|
23
|
+
instance_variable_set("@#{name}", default_value)
|
24
|
+
end
|
25
|
+
|
26
|
+
def dup
|
27
|
+
result = super
|
28
|
+
result.extend Configurable
|
29
|
+
result.local_attrs = @local_attrs
|
30
|
+
result
|
31
|
+
end
|
32
|
+
|
33
|
+
def settings(hash)
|
34
|
+
hash.each_pair do |name, value|
|
35
|
+
setting(name, value)
|
36
|
+
end
|
37
|
+
return self
|
38
|
+
end
|
39
|
+
|
40
|
+
def nested(hash=nil)
|
41
|
+
obj = Object.new
|
42
|
+
obj.extend Configurable
|
43
|
+
obj.settings(hash || {})
|
44
|
+
return obj
|
45
|
+
end
|
46
|
+
|
47
|
+
def nil_fields(*names)
|
48
|
+
names.each do |name|
|
49
|
+
setting(name, nil)
|
50
|
+
end
|
51
|
+
return self
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/corundum/email.rb
CHANGED
@@ -6,26 +6,13 @@ module Corundum
|
|
6
6
|
:email
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@configuration.email_servers = []
|
17
|
-
@configuration.gemspec = toolkit_config.gemspec
|
18
|
-
@configuration.announce_to_email = nil
|
19
|
-
@configuration.urls = OpenStruct.new
|
20
|
-
end
|
21
|
-
|
22
|
-
def resolve_configuration
|
23
|
-
@configuration.urls.home_page ||=
|
24
|
-
@configuration.gemspec.homepage
|
25
|
-
|
26
|
-
@configuration.urls.project_page ||=
|
27
|
-
@configuration.rubyforge.project_page
|
28
|
-
|
9
|
+
def default_configuration(toolkit)
|
10
|
+
setting(:rubyforge, toolkit.rubyforge)
|
11
|
+
setting(:email_servers, [])
|
12
|
+
setting(:gemspec, toolkit.gemspec)
|
13
|
+
setting(:announce_to_email, nil)
|
14
|
+
setting(:urls, nested(:home_page => toolkit.gemspec.homepage,
|
15
|
+
:project_page => toolkit.rubyforge.project_page))
|
29
16
|
end
|
30
17
|
|
31
18
|
def announcement
|
@@ -38,28 +25,28 @@ module Corundum
|
|
38
25
|
rescue Exception
|
39
26
|
end
|
40
27
|
|
41
|
-
urls = "Project: #{
|
42
|
-
"Homepage: #{
|
28
|
+
urls = "Project: #{urls.project_page}\n" +
|
29
|
+
"Homepage: #{urls.home_page}"
|
43
30
|
|
44
|
-
subject = "#{
|
45
|
-
title = "#{
|
46
|
-
body = "#{
|
31
|
+
subject = "#{gemspec.name} #{gemspec.version} Released"
|
32
|
+
title = "#{gemspec.name} version #{gemspec.version} has been released!"
|
33
|
+
body = "#{gemspec.description}\n\n#{changes}\n\n#{urls}"
|
47
34
|
|
48
35
|
return subject, title, body
|
49
36
|
end
|
50
37
|
|
51
38
|
def define
|
52
39
|
desc 'Announce release on email'
|
53
|
-
task
|
54
|
-
|
40
|
+
task root_task => in_namespace("rubyforge", "email")
|
41
|
+
in_namespace do
|
55
42
|
file "email.txt" do |t|
|
56
43
|
require 'mailfactory'
|
57
44
|
|
58
45
|
subject, title, body= announcement
|
59
46
|
|
60
47
|
mail = MailFactory.new
|
61
|
-
mail.To =
|
62
|
-
mail.From =
|
48
|
+
mail.To = announce_to_email
|
49
|
+
mail.From = gemspec.email
|
63
50
|
mail.Subject = "[ANN] " + subject
|
64
51
|
mail.text = [title, body].join("\n\n")
|
65
52
|
|
@@ -71,7 +58,7 @@ module Corundum
|
|
71
58
|
task :email => "email.txt" do
|
72
59
|
require 'net/smtp'
|
73
60
|
|
74
|
-
|
61
|
+
email_servers.each do |server_config|
|
75
62
|
begin
|
76
63
|
File::open("email.txt", "r") do |email|
|
77
64
|
Net::SMTP.start(server_config[:server], 25, server_config[:helo], server_config[:username], server_config[:password]) do |smtp|
|
@@ -2,29 +2,24 @@ require 'corundum/tasklib'
|
|
2
2
|
|
3
3
|
module Corundum
|
4
4
|
class GemBuilding < TaskLib
|
5
|
-
def
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def default_configuration(namespace, toolkit_config)
|
10
|
-
@configuration.namespace = namespace || :package
|
11
|
-
@configuration.gemspec = toolkit_config.gemspec
|
12
|
-
@configuration.qa_finished_file = toolkit_config.finished_files.qa
|
13
|
-
@configuration.package_dir = "pkg"
|
5
|
+
def default_configuration(toolkit)
|
6
|
+
setting(:gemspec, toolkit.gemspec)
|
7
|
+
setting(:qa_finished_file, toolkit.finished_files.qa)
|
8
|
+
setting(:package_dir, "pkg")
|
14
9
|
end
|
15
10
|
|
16
11
|
def define
|
17
12
|
require 'rubygems/package_task'
|
18
13
|
|
19
14
|
in_namespace do
|
20
|
-
package = Gem::PackageTask.new(
|
15
|
+
package = Gem::PackageTask.new(gemspec) do |t|
|
21
16
|
t.need_tar_gz = true
|
22
17
|
t.need_tar_bz2 = true
|
23
|
-
t.package_dir =
|
18
|
+
t.package_dir = package_dir
|
24
19
|
end
|
25
20
|
|
26
21
|
task(:package).prerequisites.each do |package_type|
|
27
|
-
file package_type =>
|
22
|
+
file package_type => qa_finished_file
|
28
23
|
end
|
29
24
|
end
|
30
25
|
|
data/lib/corundum/gemcutter.rb
CHANGED
@@ -2,25 +2,21 @@ require 'corundum/tasklib'
|
|
2
2
|
|
3
3
|
module Corundum
|
4
4
|
class GemCutter < TaskLib
|
5
|
-
def
|
6
|
-
|
7
|
-
@build = build
|
5
|
+
def default_namespace
|
6
|
+
:gemcutter
|
8
7
|
end
|
9
8
|
|
10
|
-
def default_configuration(
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
def default_configuration(toolkit, build)
|
10
|
+
setting(:build, build)
|
11
|
+
setting(:gemspec, toolkit.gemspec)
|
12
|
+
setting(:build_finished_path, toolkit.finished_files.build)
|
13
|
+
setting(:gem_path, nil)
|
14
|
+
setting(:gem_name, toolkit.gemspec.full_name)
|
15
|
+
setting(:package_dir, build.package_dir)
|
17
16
|
end
|
18
17
|
|
19
18
|
def resolve_configuration
|
20
|
-
@
|
21
|
-
File::join(@configuration.package_dir, @configuration.gemspec.file_name)
|
22
|
-
|
23
|
-
@configuration.gem_name ||= @configuration.gemspec.full_name
|
19
|
+
@gem_path ||= File::join(package_dir, gemspec.file_name)
|
24
20
|
end
|
25
21
|
|
26
22
|
module CommandTweaks
|
@@ -30,16 +26,16 @@ module Corundum
|
|
30
26
|
end
|
31
27
|
|
32
28
|
def gem_list=(list)
|
33
|
-
|
29
|
+
gems = list
|
34
30
|
end
|
35
31
|
|
36
32
|
def get_all_gem_names
|
37
|
-
return
|
33
|
+
return gems if defined?(gems)
|
38
34
|
super
|
39
35
|
end
|
40
36
|
|
41
37
|
def get_one_gem_name
|
42
|
-
return
|
38
|
+
return gems.first if defined?(gems)
|
43
39
|
super
|
44
40
|
end
|
45
41
|
end
|
@@ -54,19 +50,19 @@ module Corundum
|
|
54
50
|
def define
|
55
51
|
in_namespace do
|
56
52
|
task :uninstall do |t|
|
57
|
-
when_writing("Uninstalling #{
|
53
|
+
when_writing("Uninstalling #{gem_name}") do
|
58
54
|
require "rubygems/commands/uninstall_command"
|
59
55
|
uninstall = get_command Gem::Commands::UninstallCommand
|
60
|
-
uninstall.options[:args] = [
|
56
|
+
uninstall.options[:args] = [gem_path]
|
61
57
|
uninstall.execute
|
62
58
|
end
|
63
59
|
end
|
64
60
|
|
65
|
-
task :install => [
|
66
|
-
when_writing("Installing #{
|
61
|
+
task :install => [gem_path] do |t|
|
62
|
+
when_writing("Installing #{gem_path}") do
|
67
63
|
require "rubygems/commands/install_command"
|
68
64
|
install = get_command Gem::Commands::InstallCommand
|
69
|
-
install.options[:args] = [
|
65
|
+
install.options[:args] = [gem_path]
|
70
66
|
install.execute
|
71
67
|
end
|
72
68
|
end
|
@@ -75,7 +71,7 @@ module Corundum
|
|
75
71
|
|
76
72
|
task :dependencies_available do
|
77
73
|
checker = Gem::SpecFetcher.new
|
78
|
-
|
74
|
+
gemspec.runtime_dependencies.each do |dep|
|
79
75
|
fulfilling = checker.find_matching(dep,false,false,false)
|
80
76
|
if fulfilling.empty?
|
81
77
|
fail "Dependency #{dep} is unfulfilled remotely"
|
@@ -87,10 +83,11 @@ module Corundum
|
|
87
83
|
|
88
84
|
task :is_unpushed do
|
89
85
|
checker = Gem::SpecFetcher.new
|
90
|
-
dep = Gem::Dependency.new(
|
91
|
-
fulfilling = checker.find_matching(dep,false,false,
|
86
|
+
dep = Gem::Dependency.new(gemspec.name, "= #{gemspec.version}")
|
87
|
+
fulfilling = checker.find_matching(dep,false,false,false)
|
92
88
|
unless fulfilling.empty?
|
93
|
-
|
89
|
+
p fulfilling
|
90
|
+
fail "Gem #{gemspec.full_name} is already pushed"
|
94
91
|
end
|
95
92
|
end
|
96
93
|
|
@@ -98,10 +95,10 @@ module Corundum
|
|
98
95
|
task :push => [:dependencies_available, :is_unpushed] do
|
99
96
|
require "rubygems/commands/push_command"
|
100
97
|
push = get_command(Gem::Commands::PushCommand)
|
101
|
-
push.options[:args] = [
|
98
|
+
push.options[:args] = [gem_path]
|
102
99
|
push.execute
|
103
100
|
end
|
104
|
-
task :push =>
|
101
|
+
task :push => build_finished_path
|
105
102
|
end
|
106
103
|
task :release => in_namespace(:push)
|
107
104
|
task :preflight => in_namespace(:dependencies_available, :is_unpushed)
|