Skip to content

Commit 9fe8988

Browse files
committed
Added nuget package generation to build
1 parent 2c635cd commit 9fe8988

File tree

3 files changed

+136
-1
lines changed

3 files changed

+136
-1
lines changed

RakeFile

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require 'fileutils'
22
gem 'albacore', '=0.2.4'
33
require 'albacore'
4+
require 'tools/albacore/nuspec_patch'
45

56
def get_version
67
ENV['BUILD_NUMBER'] || '1.2.0.0'
@@ -159,7 +160,32 @@ namespace :package do
159160
zip.output_path = 'dist'
160161
end
161162

162-
task :all => [:source, :binaries, :docs]
163+
nuspec do |nu|
164+
nu.id = 'FluentNHibernate'
165+
nu.version = get_version()
166+
nu.authors = 'James Gregory and contributors'
167+
nu.description = 'Fluent, XML-less, compile safe, automated, convention-based mappings for NHibernate.'
168+
nu.title = 'Fluent NHibernate'
169+
nu.language = 'en-US'
170+
nu.licenseUrl = 'http://github.com/jagregory/fluent-nhibernate/raw/master/LICENSE.txt'
171+
nu.projectUrl = 'http://fluentnhibernate.org'
172+
nu.dependency 'NHibernate', '3.1.0.4000'
173+
nu.working_directory = 'build'
174+
nu.output_file = 'fluentnhibernate.nuspec'
175+
nu.file 'FluentNHibernate.dll'
176+
nu.tags = 'orm dal nhibernate conventions'
177+
end
178+
179+
nugetpack do |nu|
180+
nu.command = 'tools/nuget/NuGet.exe'
181+
nu.nuspec = 'build/fluentnhibernate.nuspec'
182+
nu.base_folder = 'build'
183+
nu.output = 'dist'
184+
end
185+
186+
task :nuget => [:nuspec, :nugetpack]
187+
188+
task :all => [:source, :binaries, :docs, :nuget]
163189
end
164190

165191
task :sln do

tools/albacore/nuspec_patch.rb

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
require 'albacore/albacoretask'
2+
require 'rexml/document'
3+
4+
class NuspecFile
5+
def initialize(src, target)
6+
@src = src
7+
@target = target
8+
end
9+
10+
def render(xml)
11+
depend = xml.add_element 'file', { 'src' => @src }
12+
13+
depend.add_attribute( 'target', @target ) unless @target.nil?
14+
end
15+
end
16+
17+
class NuspecDependency
18+
19+
attr_accessor :id, :version
20+
21+
def initialize(id, version)
22+
@id = id
23+
@version = version
24+
end
25+
26+
def render( xml )
27+
depend = xml.add_element 'dependency', {'id' => @id, 'version' => @version}
28+
end
29+
end
30+
31+
class Nuspec
32+
include Albacore::Task
33+
34+
attr_accessor :id, :version, :title, :authors, :description, :language, :licenseUrl, :projectUrl, :output_file,
35+
:owners, :summary, :iconUrl, :requireLicenseAcceptance, :tags, :working_directory
36+
37+
def initialize()
38+
@dependencies = Array.new
39+
@files = Array.new
40+
super()
41+
end
42+
43+
def dependency(id, version)
44+
@dependencies.push NuspecDependency.new(id, version)
45+
end
46+
47+
def file(src, target=nil)
48+
@files.push NuspecFile.new(src, target)
49+
end
50+
51+
def execute
52+
check_required_field @output_file, "output_file"
53+
check_required_field @id, "id"
54+
check_required_field @version, "version"
55+
check_required_field @authors, "authors"
56+
check_required_field @description, "description"
57+
58+
if(! @working_directory.nil?)
59+
@working_output_file = File.join(@working_directory, @output_file)
60+
else
61+
@working_output_file = @output_file
62+
end
63+
64+
builder = REXML::Document.new
65+
build(builder)
66+
output=""
67+
builder.write(output)
68+
69+
File.open(@working_output_file, 'w') {|f| f.write(output) }
70+
end
71+
72+
def build(document)
73+
document << REXML::XMLDecl.new
74+
75+
package = document.add_element('package')
76+
package.add_attribute("xmlns", "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd")
77+
78+
metadata = package.add_element('metadata')
79+
80+
metadata.add_element('id').add_text(@id)
81+
metadata.add_element('version').add_text(@version)
82+
metadata.add_element('title').add_text(@title)
83+
metadata.add_element('authors').add_text(@authors)
84+
metadata.add_element('description').add_text(@description)
85+
metadata.add_element('language').add_text(@language) if !@language.nil?
86+
metadata.add_element('licenseUrl').add_text(@licenseUrl) if !@licenseUrl.nil?
87+
metadata.add_element('projectUrl').add_text(@projectUrl) if !@projectUrl.nil?
88+
metadata.add_element('owners').add_text(@owners) if !@owners.nil?
89+
metadata.add_element('summary').add_text(@summary) if !@summary.nil?
90+
metadata.add_element('iconUrl').add_text(@iconUrl) if !@iconUrl.nil?
91+
metadata.add_element('requireLicenseAcceptance').add_text(@requireLicenseAcceptance) if !@requireLicenseAcceptance.nil?
92+
metadata.add_element('tags').add_text(@tags) if !@tags.nil?
93+
94+
if @dependencies.length > 0
95+
depend = metadata.add_element('dependencies')
96+
@dependencies.each {|x| x.render(depend)}
97+
end
98+
99+
if @files.length > 0
100+
files = package.add_element('files')
101+
@files.each {|x| x.render(files)}
102+
end
103+
end
104+
105+
def check_required_field(field, fieldname)
106+
return true if !field.nil?
107+
raise "Nuget: required field '#{fieldname}' is not defined"
108+
end
109+
end

tools/nuget/NuGet.exe

330 KB
Binary file not shown.

0 commit comments

Comments
 (0)