Skip to content

Instantly share code, notes, and snippets.

@TheEvilDev
Created November 27, 2012 00:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TheEvilDev/4151627 to your computer and use it in GitHub Desktop.
Save TheEvilDev/4151627 to your computer and use it in GitHub Desktop.
Albacore improved nuspec generating, auto-dependency discovery
class Dependency
attr_accessor :Name, :Version
def initialize(name, version)
@Name = name
@Version = version
end
end
desc "Generates a package specification for a project"
nuspec :spec, [:project, :working_dir, :beta] do |nuspec, args|
project = args.project
nuspec.id = project.Name
nuspec.description = project.Description
nuspec.version = project.Version
nuspec.authors = project.Author
nuspec.owners = project.Author
nuspec.language = "en-US"
project.Dependencies.each do |dep|
nuspec.dependency dep.Name, dep.Version
end
nuspec.licenseUrl = "http://www.gnu.org/licenses/lgpl.txt"
nuspec.working_directory = args.working_dir
nuspec.output_file = "#{project.Name}.#{project.Version}#{args.beta}.nuspec"
nuspec.tags = ""
end
class Project
attr_accessor :Name, :Description, :Author, :Version, :FilePath, :Platforms, :Dependencies
def initialize(path, version, description, author)
@FilePath = path
@Version = version
@Name = @FilePath.split(/\//).last.split(/.csproj/).first
@Description = description
@Author = author
@Platforms = ["NET40"]
@Dependencies = Array.new
LoadPackageDependencies()
LoadProjectDependencies()
end
def LoadPackageDependencies()
path = "#{File::dirname @FilePath}/packages.config"
if File.exists? path
packageConfigXml = File.read("#{File::dirname project.FilePath}/packages.config")
doc = REXML::Document.new(packageConfigXml)
doc.elements.each("packages/package") do |package|
@Dependencies << Dependency.new(package.attributes["id"], package.attributes["version"])
end
end
end
def LoadProjectDependencies()
if File.exists? @FilePath
projectFileXml = File.read(@FilePath)
doc = REXML::Document.new(projectFileXml)
doc.elements.each("Project/ItemGroup/ProjectReference/Name") do |proj|
@Dependencies << Dependency.new(proj.text, @Version)
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment