bozo-scripts 0.1.10 → 0.1.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.
@@ -1,92 +1,92 @@
1
- module Bozo::Hooks
2
-
3
- class Teamcity
4
-
5
- include Bozo::ClassNameHelpers
6
-
7
- def pre_compile
8
- return unless Teamcity.hosted_in_teamcity?
9
- log_pre_step :compile
10
-
11
- puts "##teamcity[buildNumber '#{version}']"
12
- # currently a general compiler which wraps everything. Once a compiler hook is added can distinguish
13
- # each specific compiler
14
- puts "##teamcity[compilationStarted compiler='Bozo']"
15
- end
16
-
17
- def post_compile
18
- return unless Teamcity.hosted_in_teamcity?
19
- puts "##teamcity[compilationFinished compiler='Bozo']"
20
- log_post_step :compile
21
- end
22
-
23
- def post_test
24
- return unless Teamcity.hosted_in_teamcity?
25
-
26
- report
27
- report_dotnetcoverage
28
-
29
- log_post_step :test
30
- end
31
-
32
- def method_missing(method, *args)
33
- if method.to_s =~ /^(pre|post)_(.+)/
34
- send "log_#{$1}_step".to_sym, $2
35
- else
36
- super
37
- end
38
- end
39
-
40
- def respond_to?(method)
41
- method.to_s =~ /^(pre|post)_(.+)/ or super
42
- end
43
-
44
- # Returns whether teamcity is hosting bozo
45
- def self.hosted_in_teamcity?
46
- not ENV['TEAMCITY_VERSION'].nil?
47
- end
48
-
49
- private
50
-
51
- # Notifies teamcity of general reports such as test runner results
52
- def report
53
- report_types = [:nunit, :fxcop]
54
- report_types.each do |type|
55
- reports = report_files(File.join(Dir.pwd, "/temp"), type)
56
-
57
- reports.each do |report|
58
- puts "##teamcity[importData type='#{type}' path='#{report}']"
59
- end
60
- end
61
- end
62
-
63
- # Notifies teamcity of dotNetCoverage results
64
- def report_dotnetcoverage
65
- tool_types = [:dot_cover]
66
-
67
- tool_types.each do |type|
68
- reports = report_files(File.join(Dir.pwd, "/temp"), type)
69
-
70
- reports.each do |report|
71
- tool_name = to_class_name(type).downcase
72
- puts "##teamcity[importData type='dotNetCoverage' tool='#{tool_name}' path='#{report}']"
73
- end
74
- end
75
- end
76
-
77
- def log_pre_step(step)
78
- puts "##teamcity[progressStart 'Pre #{step}']" if Teamcity.hosted_in_teamcity?
79
- end
80
-
81
- def log_post_step(step)
82
- puts "##teamcity[progressEnd 'Post #{step}']" if Teamcity.hosted_in_teamcity?
83
- end
84
-
85
- def report_files(path, type)
86
- files = File.expand_path(File.join(path, "/**/*-#{to_class_name(type)}-report.xml"))
87
- Dir[files]
88
- end
89
-
90
- end
91
-
1
+ module Bozo::Hooks
2
+
3
+ class Teamcity
4
+
5
+ include Bozo::ClassNameHelpers
6
+
7
+ def pre_compile
8
+ return unless Teamcity.hosted_in_teamcity?
9
+ log_pre_step :compile
10
+
11
+ puts "##teamcity[buildNumber '#{version}']"
12
+ # currently a general compiler which wraps everything. Once a compiler hook is added can distinguish
13
+ # each specific compiler
14
+ puts "##teamcity[compilationStarted compiler='Bozo']"
15
+ end
16
+
17
+ def post_compile
18
+ return unless Teamcity.hosted_in_teamcity?
19
+ puts "##teamcity[compilationFinished compiler='Bozo']"
20
+ log_post_step :compile
21
+ end
22
+
23
+ def post_test
24
+ return unless Teamcity.hosted_in_teamcity?
25
+
26
+ report
27
+ report_dotnetcoverage
28
+
29
+ log_post_step :test
30
+ end
31
+
32
+ def method_missing(method, *args)
33
+ if method.to_s =~ /^(pre|post)_(.+)/
34
+ send "log_#{$1}_step".to_sym, $2
35
+ else
36
+ super
37
+ end
38
+ end
39
+
40
+ def respond_to?(method)
41
+ method.to_s =~ /^(pre|post)_(.+)/ or super
42
+ end
43
+
44
+ # Returns whether teamcity is hosting bozo
45
+ def self.hosted_in_teamcity?
46
+ not ENV['TEAMCITY_VERSION'].nil?
47
+ end
48
+
49
+ private
50
+
51
+ # Notifies teamcity of general reports such as test runner results
52
+ def report
53
+ report_types = [:nunit, :fxcop]
54
+ report_types.each do |type|
55
+ reports = report_files(File.join(Dir.pwd, "/temp"), type)
56
+
57
+ reports.each do |report|
58
+ puts "##teamcity[importData type='#{type}' path='#{report}']"
59
+ end
60
+ end
61
+ end
62
+
63
+ # Notifies teamcity of dotNetCoverage results
64
+ def report_dotnetcoverage
65
+ tool_types = [:dot_cover]
66
+
67
+ tool_types.each do |type|
68
+ reports = report_files(File.join(Dir.pwd, "/temp"), type)
69
+
70
+ reports.each do |report|
71
+ tool_name = to_class_name(type).downcase
72
+ puts "##teamcity[importData type='dotNetCoverage' tool='#{tool_name}' path='#{report}']"
73
+ end
74
+ end
75
+ end
76
+
77
+ def log_pre_step(step)
78
+ puts "##teamcity[progressStart 'Pre #{step}']" if Teamcity.hosted_in_teamcity?
79
+ end
80
+
81
+ def log_post_step(step)
82
+ puts "##teamcity[progressEnd 'Post #{step}']" if Teamcity.hosted_in_teamcity?
83
+ end
84
+
85
+ def report_files(path, type)
86
+ files = File.expand_path(File.join(path, "/**/*-#{to_class_name(type)}-report.xml"))
87
+ Dir[files]
88
+ end
89
+
90
+ end
91
+
92
92
  end
@@ -1,41 +1,41 @@
1
- module Bozo::Hooks
2
-
3
- class Timing
4
-
5
- def initialize
6
- @timings = {}
7
- end
8
-
9
- def print_timings
10
- puts ''
11
- @timings.each do |stage, times|
12
- puts format_timing(stage, times).bright.color(stage == :build ? :cyan : :black)
13
- end
14
- end
15
-
16
- def format_timing(stage, args)
17
- time_taken = (args[:post] - args[:pre]).round(1)
18
- "#{stage.to_s.capitalize.ljust(14)} #{time_taken.to_s.rjust(5)}s"
19
- end
20
-
21
- def record(stage, point)
22
- @timings[stage] ||= {}
23
- @timings[stage][point] = Time.now
24
- end
25
-
26
- def method_missing(method, *args)
27
- if method.to_s =~ /^(pre|post)_(.+)/
28
- record $2.to_sym, $1.to_sym
29
- print_timings if $1 == 'post' and $2 == 'build'
30
- else
31
- super
32
- end
33
- end
34
-
35
- def respond_to?(method)
36
- method.to_s =~ /^(pre|post)_(.+)/ or super
37
- end
38
-
39
- end
40
-
1
+ module Bozo::Hooks
2
+
3
+ class Timing
4
+
5
+ def initialize
6
+ @timings = {}
7
+ end
8
+
9
+ def print_timings
10
+ puts ''
11
+ @timings.each do |stage, times|
12
+ puts format_timing(stage, times).bright.color(stage == :build ? :cyan : :black)
13
+ end
14
+ end
15
+
16
+ def format_timing(stage, args)
17
+ time_taken = (args[:post] - args[:pre]).round(1)
18
+ "#{stage.to_s.capitalize.ljust(14)} #{time_taken.to_s.rjust(5)}s"
19
+ end
20
+
21
+ def record(stage, point)
22
+ @timings[stage] ||= {}
23
+ @timings[stage][point] = Time.now
24
+ end
25
+
26
+ def method_missing(method, *args)
27
+ if method.to_s =~ /^(pre|post)_(.+)/
28
+ record $2.to_sym, $1.to_sym
29
+ print_timings if $1 == 'post' and $2 == 'build'
30
+ else
31
+ super
32
+ end
33
+ end
34
+
35
+ def respond_to?(method)
36
+ method.to_s =~ /^(pre|post)_(.+)/ or super
37
+ end
38
+
39
+ end
40
+
41
41
  end
@@ -1,226 +1,226 @@
1
- require 'nokogiri'
2
-
3
- module Bozo::Packagers
4
-
5
- class Nuget
6
-
7
- def initialize
8
- @libraries = []
9
- @executables = []
10
- @websites = []
11
- end
12
-
13
- def destination(destination)
14
- @destination = destination
15
- end
16
-
17
- def library(project)
18
- @libraries << LibraryPackage.new(project, self)
19
- end
20
-
21
- def executable(project)
22
- @executables << ExecutablePackage.new(project)
23
- end
24
-
25
- def website(project)
26
- @websites << WebsitePackage.new(project)
27
- end
28
-
29
- def required_tools
30
- :nuget
31
- end
32
-
33
- def project_url(url)
34
- @project_url = url
35
- end
36
-
37
- def license_url(url)
38
- @license_url = url
39
- end
40
-
41
- def author(author)
42
- @author = author
43
- end
44
-
45
- def to_s
46
- "Publish projects with nuget #{@libraries | @executables | @websites} to #{@destination}"
47
- end
48
-
49
- def execute
50
- @libraries.each {|project| package project}
51
- @executables.each {|project| package project}
52
- @websites.each {|project| package project}
53
- end
54
-
55
- # Returns the version that the package should be given.
56
- def package_version
57
- # If running on a build server then it is a real release, otherwise it is
58
- # a preview release and the version should reflect that.
59
- if build_server?
60
- version
61
- else
62
- "#{version}-pre#{env['GIT_HASH']}"
63
- end
64
- end
65
-
66
- private
67
-
68
- def package(project)
69
- spec_path = generate_specification(project)
70
- create_package(project.name, spec_path, true)
71
- end
72
-
73
- def generate_specification(project)
74
- log_debug "Generating specification for #{project.name}"
75
- builder = Nokogiri::XML::Builder.new do |doc|
76
- doc.package(:xmlns => "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd") do
77
- doc.metadata do
78
- doc.id project.name
79
- doc.version_ package_version
80
- doc.authors @author
81
- doc.description project.name
82
- doc.projectUrl @project_url
83
- doc.licenseUrl @license_url
84
- doc.dependencies do
85
- project.dependencies.each do |dep|
86
- doc.dependency(dep)
87
- end
88
- end
89
- end
90
- doc.files do
91
- project.files.each do |file|
92
- doc.file(file)
93
- end
94
- end
95
- end
96
- end
97
- spec_path = File.expand_path(File.join('temp', 'nuget', "#{project.name}.nuspec"))
98
- FileUtils.mkdir_p File.dirname(spec_path)
99
- File.open(spec_path, 'w+') {|f| f.write(builder.to_xml)}
100
- spec_path
101
- end
102
-
103
- def create_package(project, spec_path, omit_analysis = false)
104
- args = []
105
-
106
- dist_dir = File.expand_path(File.join('dist', 'nuget'))
107
-
108
- args << File.expand_path(File.join('build', 'tools', 'nuget', 'NuGet.exe'))
109
- args << 'pack'
110
- args << "\"#{spec_path}\""
111
- args << '-OutputDirectory'
112
- args << "\"#{dist_dir}\""
113
- args << '-NoPackageAnalysis' if omit_analysis
114
-
115
- # Ensure the directory is there because Nuget won't make it
116
- FileUtils.mkdir_p dist_dir
117
-
118
- log_debug "Creating nuget package for #{project}"
119
-
120
- execute_command :nuget, args
121
- end
122
-
123
- end
124
-
125
- private
126
-
127
- class ExecutablePackage
128
-
129
- def initialize(project)
130
- @name = project
131
- end
132
-
133
- def name
134
- @name
135
- end
136
-
137
- def dependencies
138
- []
139
- end
140
-
141
- def files
142
- [{:src => File.expand_path(File.join('temp', 'msbuild', @name, '**', '*.*')).gsub(/\//, '\\'), :target => 'exe'}]
143
- end
144
-
145
- end
146
-
147
- class LibraryPackage
148
-
149
- def initialize(project, nuget)
150
- @name = project
151
- @nuget = nuget
152
- end
153
-
154
- def name
155
- @name
156
- end
157
-
158
- def dependencies
159
- project_reference_dependencies + nuget_dependencies
160
- end
161
-
162
- def files
163
- %w{dll pdb xml}.map do |extension|
164
- {:src => File.expand_path(File.join('temp', 'msbuild', @name, '**', "#{@name}.#{extension}")).gsub(/\//, '\\'), :target => 'lib'}
165
- end
166
- end
167
-
168
- private
169
-
170
- def project_reference_dependencies
171
- doc = Nokogiri::XML(File.open(project_file))
172
-
173
- doc.xpath('//proj:Project/proj:ItemGroup/proj:ProjectReference/proj:Name', {"proj" => "http://schemas.microsoft.com/developer/msbuild/2003"}).map do |node|
174
- {:id => node.text, :version => "[#{@nuget.package_version}]"}
175
- end
176
- end
177
-
178
- # get dependencies from packages.config
179
- def nuget_dependencies
180
- package_file = packages_file
181
- return [] unless File.exist? package_file
182
-
183
- doc = Nokogiri::XML(File.open(package_file))
184
-
185
- doc.xpath('//packages/package').map do |node|
186
- {:id => node[:id], :version => "[#{node[:version]}]"}
187
- end
188
- end
189
-
190
- def packages_file
191
- find_file_in_project 'packages.config'
192
- end
193
-
194
- def project_file
195
- find_file_in_project "#{@name}.csproj"
196
- end
197
-
198
- def find_file_in_project(file_name)
199
- file = File.expand_path(File.join('src', 'csharp', @name, file_name))
200
- file = File.expand_path(File.join('test', 'csharp', @name, file_name)) unless File.exist? file
201
- file
202
- end
203
-
204
- end
205
-
206
- class WebsitePackage
207
-
208
- def initialize(project)
209
- @name = project
210
- end
211
-
212
- def name
213
- @name
214
- end
215
-
216
- def dependencies
217
- []
218
- end
219
-
220
- def files
221
- [{:src => File.expand_path(File.join('temp', 'msbuild', @name, '**', '*.*')).gsub(/\//, '\\'), :target => 'website'}]
222
- end
223
-
224
- end
225
-
226
- end
1
+ require 'nokogiri'
2
+
3
+ module Bozo::Packagers
4
+
5
+ class Nuget
6
+
7
+ def initialize
8
+ @libraries = []
9
+ @executables = []
10
+ @websites = []
11
+ end
12
+
13
+ def destination(destination)
14
+ @destination = destination
15
+ end
16
+
17
+ def library(project)
18
+ @libraries << LibraryPackage.new(project, self)
19
+ end
20
+
21
+ def executable(project)
22
+ @executables << ExecutablePackage.new(project)
23
+ end
24
+
25
+ def website(project)
26
+ @websites << WebsitePackage.new(project)
27
+ end
28
+
29
+ def required_tools
30
+ :nuget
31
+ end
32
+
33
+ def project_url(url)
34
+ @project_url = url
35
+ end
36
+
37
+ def license_url(url)
38
+ @license_url = url
39
+ end
40
+
41
+ def author(author)
42
+ @author = author
43
+ end
44
+
45
+ def to_s
46
+ "Publish projects with nuget #{@libraries | @executables | @websites} to #{@destination}"
47
+ end
48
+
49
+ def execute
50
+ @libraries.each {|project| package project}
51
+ @executables.each {|project| package project}
52
+ @websites.each {|project| package project}
53
+ end
54
+
55
+ # Returns the version that the package should be given.
56
+ def package_version
57
+ # If running on a build server then it is a real release, otherwise it is
58
+ # a preview release and the version should reflect that.
59
+ if build_server?
60
+ version
61
+ else
62
+ "#{version}-pre#{env['GIT_HASH']}"
63
+ end
64
+ end
65
+
66
+ private
67
+
68
+ def package(project)
69
+ spec_path = generate_specification(project)
70
+ create_package(project.name, spec_path, true)
71
+ end
72
+
73
+ def generate_specification(project)
74
+ log_debug "Generating specification for #{project.name}"
75
+ builder = Nokogiri::XML::Builder.new do |doc|
76
+ doc.package(:xmlns => "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd") do
77
+ doc.metadata do
78
+ doc.id project.name
79
+ doc.version_ package_version
80
+ doc.authors @author
81
+ doc.description project.name
82
+ doc.projectUrl @project_url
83
+ doc.licenseUrl @license_url
84
+ doc.dependencies do
85
+ project.dependencies.each do |dep|
86
+ doc.dependency(dep)
87
+ end
88
+ end
89
+ end
90
+ doc.files do
91
+ project.files.each do |file|
92
+ doc.file(file)
93
+ end
94
+ end
95
+ end
96
+ end
97
+ spec_path = File.expand_path(File.join('temp', 'nuget', "#{project.name}.nuspec"))
98
+ FileUtils.mkdir_p File.dirname(spec_path)
99
+ File.open(spec_path, 'w+') {|f| f.write(builder.to_xml)}
100
+ spec_path
101
+ end
102
+
103
+ def create_package(project, spec_path, omit_analysis = false)
104
+ args = []
105
+
106
+ dist_dir = File.expand_path(File.join('dist', 'nuget'))
107
+
108
+ args << File.expand_path(File.join('build', 'tools', 'nuget', 'NuGet.exe'))
109
+ args << 'pack'
110
+ args << "\"#{spec_path}\""
111
+ args << '-OutputDirectory'
112
+ args << "\"#{dist_dir}\""
113
+ args << '-NoPackageAnalysis' if omit_analysis
114
+
115
+ # Ensure the directory is there because Nuget won't make it
116
+ FileUtils.mkdir_p dist_dir
117
+
118
+ log_debug "Creating nuget package for #{project}"
119
+
120
+ execute_command :nuget, args
121
+ end
122
+
123
+ end
124
+
125
+ private
126
+
127
+ class ExecutablePackage
128
+
129
+ def initialize(project)
130
+ @name = project
131
+ end
132
+
133
+ def name
134
+ @name
135
+ end
136
+
137
+ def dependencies
138
+ []
139
+ end
140
+
141
+ def files
142
+ [{:src => File.expand_path(File.join('temp', 'msbuild', @name, '**', '*.*')).gsub(/\//, '\\'), :target => 'exe'}]
143
+ end
144
+
145
+ end
146
+
147
+ class LibraryPackage
148
+
149
+ def initialize(project, nuget)
150
+ @name = project
151
+ @nuget = nuget
152
+ end
153
+
154
+ def name
155
+ @name
156
+ end
157
+
158
+ def dependencies
159
+ project_reference_dependencies + nuget_dependencies
160
+ end
161
+
162
+ def files
163
+ %w{dll pdb xml}.map do |extension|
164
+ {:src => File.expand_path(File.join('temp', 'msbuild', @name, '**', "#{@name}.#{extension}")).gsub(/\//, '\\'), :target => 'lib'}
165
+ end
166
+ end
167
+
168
+ private
169
+
170
+ def project_reference_dependencies
171
+ doc = Nokogiri::XML(File.open(project_file))
172
+
173
+ doc.xpath('//proj:Project/proj:ItemGroup/proj:ProjectReference/proj:Name', {"proj" => "http://schemas.microsoft.com/developer/msbuild/2003"}).map do |node|
174
+ {:id => node.text, :version => "[#{@nuget.package_version}]"}
175
+ end
176
+ end
177
+
178
+ # get dependencies from packages.config
179
+ def nuget_dependencies
180
+ package_file = packages_file
181
+ return [] unless File.exist? package_file
182
+
183
+ doc = Nokogiri::XML(File.open(package_file))
184
+
185
+ doc.xpath('//packages/package').map do |node|
186
+ {:id => node[:id], :version => "[#{node[:version]}]"}
187
+ end
188
+ end
189
+
190
+ def packages_file
191
+ find_file_in_project 'packages.config'
192
+ end
193
+
194
+ def project_file
195
+ find_file_in_project "#{@name}.csproj"
196
+ end
197
+
198
+ def find_file_in_project(file_name)
199
+ file = File.expand_path(File.join('src', 'csharp', @name, file_name))
200
+ file = File.expand_path(File.join('test', 'csharp', @name, file_name)) unless File.exist? file
201
+ file
202
+ end
203
+
204
+ end
205
+
206
+ class WebsitePackage
207
+
208
+ def initialize(project)
209
+ @name = project
210
+ end
211
+
212
+ def name
213
+ @name
214
+ end
215
+
216
+ def dependencies
217
+ []
218
+ end
219
+
220
+ def files
221
+ [{:src => File.expand_path(File.join('temp', 'msbuild', @name, '**', '*.*')).gsub(/\//, '\\'), :target => 'website'}]
222
+ end
223
+
224
+ end
225
+
226
+ end