class FubuRake::Solution

Attributes

build_number[RW]
compilemode[RW]
options[RW]

Public Class Methods

new(&block) click to toggle source
# File lib/fuburake.rb, line 77
def initialize(&block)
        tasks = SolutionTasks.new
        block.call(tasks)

        @defaultTask = create_task(:default, "**Default**, compiles and runs tests")
        @ciTask = create_task(:ci,   "Target used for the CI server")
        @ciTask.enhance [:default]

        options = tasks.options
        options ||= {}

        tc_build_number = ENV["BUILD_NUMBER"]
        build_revision = tc_build_number || Time.new.strftime('5%H%M')
        asm_version = BUILD_VERSION + ".0"
        @build_number = "#{BUILD_VERSION}.#{build_revision}"

        # SAMPLE: fuburake-options
        @options = {
                :compilemode => ENV['config'].nil? ? "Debug" : ENV['config'],
                :clrversion => 'v4.0.30319',
                :platform => ENV['platform'].nil? ? "" : ENV['platform'],
                :unit_test_list_file => 'TESTS.txt',
                :unit_test_projects => [],
                :build_number => @build_number,
                :asm_version => asm_version,
                :tc_build_number => tc_build_number,
                :build_revision => build_revision,
                :source => 'src',
                :nuget_publish_folder => 'artifacts',
                :nuget_publish_url => nil,
                :nuget_api_key => ENV['api_key']
                }.merge(options)
        # ENDSAMPLE

        @compilemode = @options[:compilemode]

        tasks.clean ||= []
        tasks.defaults ||= []
        tasks.ci_steps ||= []
        tasks.precompile ||= []
        tasks.doc_exports ||= []

        enable_docs tasks
        FubuRake::AssemblyInfo.create tasks, @options
        FubuRake::Ripple.create tasks, @options
        make_clean tasks
        FubuRake::MSBuild.create_task tasks, @options
        FubuRake::NUnit.create_task tasks, @options

        add_dependency :compile, [:clean, :version, 'ripple:restore', 'docs:bottle']

        Rake::Task[:compile].enhance(tasks.precompile)
        add_dependency :unit_test, :compile
        add_dependency :default, [:compile, :unit_test]
        add_dependency :default, :unit_test
        Rake::Task[:default].enhance tasks.defaults
        Rake::Task[:ci].enhance tasks.ci_steps
        add_dependency :ci, tasks.ci_steps
        add_dependency :ci, ["ripple:history", "ripple:package"]

        tasks.compilations ||= []
        tasks.compilations.each do |c|
                c.create @options
        end
                
        if tasks.bottles.empty? && tasks.bottles_enabled
                Dir.glob('**/.package-manifest').each do |f|
                        dir = File.dirname(f)
                        project = dir.split('/').last
                        if project.index('.Docs') == nil
                                proj_file = "#{dir}/#{project}.csproj"
                                if File.exists?(proj_file)
                                        tasks.assembly_bottle File.basename(project)
                                end
                        end
                end
        end

        if !tasks.bottles.empty?
                tasks.bottles.each do |c|
                        c.create @options
                end
        end

        tasks.doc_exports.each do |opts|
                opts[:version] = @build_number

                docs = FubuDocs.new(opts)

                doc_task_name = docs.export_tasks
                if opts[:include_in_ci]
                        add_dependency :ci, doc_task_name
                end
        end
        
end

Public Instance Methods

create_task(name, description) click to toggle source
# File lib/fuburake.rb, line 176
def create_task(name, description)
        task = Rake::Task.define_task name do

        end
        task.add_description description

        return task
end
dump_html(options) click to toggle source
# File lib/fuburake.rb, line 210
def dump_html(options)
        options[:version] = @build_number
        docs = FubuDocs.new(options)
        docs.dump_task
end
enable_docs(tasks) click to toggle source
# File lib/fuburake.rb, line 198
def enable_docs(tasks)
        if tasks.fubudocs_enabled
                if Platform.is_nix
                        Dir.glob('**/*.Docs.csproj').each do |f|
                                tasks.assembly_bottle File.basename(f, ".csproj")
                        end
                else
                        require_relative 'fubudocs'
                end
        end
end
make_clean(tasks) click to toggle source
# File lib/fuburake.rb, line 185
def make_clean(tasks)
        if tasks.clean.any?
                @cleanTask = Rake::Task.define_task :clean do
                tasks.clean.each do |dir|
                        cleanDirectory dir
                end
        end

        @cleanTask.add_description "Prepares the working directory for a new build"
        end
end