corundum 0.0.1 → 0.0.2
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/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)
|