Skip to content

Commit

Permalink
Added nuget package generation to build
Browse files Browse the repository at this point in the history
  • Loading branch information
jagregory committed Apr 3, 2011
1 parent 2c635cd commit 9fe8988
Show file tree
Hide file tree
Showing 3 changed files with 136 additions and 1 deletion.
28 changes: 27 additions & 1 deletion RakeFile
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require 'fileutils'
gem 'albacore', '=0.2.4'
require 'albacore'
require 'tools/albacore/nuspec_patch'

def get_version
ENV['BUILD_NUMBER'] || '1.2.0.0'
Expand Down Expand Up @@ -159,7 +160,32 @@ namespace :package do
zip.output_path = 'dist'
end

task :all => [:source, :binaries, :docs]
nuspec do |nu|
nu.id = 'FluentNHibernate'
nu.version = get_version()
nu.authors = 'James Gregory and contributors'
nu.description = 'Fluent, XML-less, compile safe, automated, convention-based mappings for NHibernate.'
nu.title = 'Fluent NHibernate'
nu.language = 'en-US'
nu.licenseUrl = 'http://github.com/jagregory/fluent-nhibernate/raw/master/LICENSE.txt'
nu.projectUrl = 'http://fluentnhibernate.org'
nu.dependency 'NHibernate', '3.1.0.4000'
nu.working_directory = 'build'
nu.output_file = 'fluentnhibernate.nuspec'
nu.file 'FluentNHibernate.dll'
nu.tags = 'orm dal nhibernate conventions'
end

nugetpack do |nu|
nu.command = 'tools/nuget/NuGet.exe'
nu.nuspec = 'build/fluentnhibernate.nuspec'
nu.base_folder = 'build'
nu.output = 'dist'
end

task :nuget => [:nuspec, :nugetpack]

task :all => [:source, :binaries, :docs, :nuget]
end

task :sln do
Expand Down
109 changes: 109 additions & 0 deletions tools/albacore/nuspec_patch.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
require 'albacore/albacoretask'
require 'rexml/document'

class NuspecFile
def initialize(src, target)
@src = src
@target = target
end

def render(xml)
depend = xml.add_element 'file', { 'src' => @src }

depend.add_attribute( 'target', @target ) unless @target.nil?
end
end

class NuspecDependency

attr_accessor :id, :version

def initialize(id, version)
@id = id
@version = version
end

def render( xml )
depend = xml.add_element 'dependency', {'id' => @id, 'version' => @version}
end
end

class Nuspec
include Albacore::Task

attr_accessor :id, :version, :title, :authors, :description, :language, :licenseUrl, :projectUrl, :output_file,
:owners, :summary, :iconUrl, :requireLicenseAcceptance, :tags, :working_directory

def initialize()
@dependencies = Array.new
@files = Array.new
super()
end

def dependency(id, version)
@dependencies.push NuspecDependency.new(id, version)
end

def file(src, target=nil)
@files.push NuspecFile.new(src, target)
end

def execute
check_required_field @output_file, "output_file"
check_required_field @id, "id"
check_required_field @version, "version"
check_required_field @authors, "authors"
check_required_field @description, "description"

if(! @working_directory.nil?)
@working_output_file = File.join(@working_directory, @output_file)
else
@working_output_file = @output_file
end

builder = REXML::Document.new
build(builder)
output=""
builder.write(output)

File.open(@working_output_file, 'w') {|f| f.write(output) }
end

def build(document)
document << REXML::XMLDecl.new

package = document.add_element('package')
package.add_attribute("xmlns", "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd")

metadata = package.add_element('metadata')

metadata.add_element('id').add_text(@id)
metadata.add_element('version').add_text(@version)
metadata.add_element('title').add_text(@title)
metadata.add_element('authors').add_text(@authors)
metadata.add_element('description').add_text(@description)
metadata.add_element('language').add_text(@language) if !@language.nil?
metadata.add_element('licenseUrl').add_text(@licenseUrl) if !@licenseUrl.nil?
metadata.add_element('projectUrl').add_text(@projectUrl) if !@projectUrl.nil?
metadata.add_element('owners').add_text(@owners) if !@owners.nil?
metadata.add_element('summary').add_text(@summary) if !@summary.nil?
metadata.add_element('iconUrl').add_text(@iconUrl) if !@iconUrl.nil?
metadata.add_element('requireLicenseAcceptance').add_text(@requireLicenseAcceptance) if !@requireLicenseAcceptance.nil?
metadata.add_element('tags').add_text(@tags) if !@tags.nil?

if @dependencies.length > 0
depend = metadata.add_element('dependencies')
@dependencies.each {|x| x.render(depend)}
end

if @files.length > 0
files = package.add_element('files')
@files.each {|x| x.render(files)}
end
end

def check_required_field(field, fieldname)
return true if !field.nil?
raise "Nuget: required field '#{fieldname}' is not defined"
end
end
Binary file added tools/nuget/NuGet.exe
Binary file not shown.

0 comments on commit 9fe8988

Please sign in to comment.