169 lines
4.2 KiB
Ruby
169 lines
4.2 KiB
Ruby
require 'rubygems'
|
|
require 'bundler/setup'
|
|
require 'albacore'
|
|
require 'rexml/document'
|
|
require 'jeweler/version_helper'
|
|
require 'git'
|
|
|
|
task :default => %W(
|
|
build
|
|
runtests
|
|
)
|
|
|
|
def build task_name, *targets
|
|
build_properties = { :configuration => 'Debug', :platform => 'x86' }
|
|
build_properties.merge!(targets.pop) if Hash === targets.last
|
|
msbuild task_name do |msb|
|
|
msb.properties build_properties
|
|
msb.targets targets
|
|
msb.solution = 'GitTfs.sln'
|
|
end
|
|
end
|
|
|
|
task :build => 'build:debug'
|
|
namespace :build do
|
|
desc "Build in debug mode"
|
|
build :debug, 'Build'
|
|
task :debug
|
|
|
|
desc "Build in release mode"
|
|
build :release, 'Build', :configuration => 'Release'
|
|
task :release
|
|
end
|
|
|
|
|
|
desc 'Run the tests'
|
|
task :runtests do
|
|
rm 'results.trx' if File.exist? 'results.trx'
|
|
mstest_cmd =%W(mstest
|
|
/testcontainer:GitTfsTest\\bin\\Debug\\GitTfsTest.dll
|
|
/resultsfile:results.trx)
|
|
sh(*mstest_cmd) do |ok, status|
|
|
analyze_tests('results.trx')
|
|
end
|
|
end
|
|
|
|
def analyze_tests(results_file)
|
|
fail_count = 0
|
|
File.open(results_file) do |file|
|
|
xml =REXML::Document.new(file)
|
|
xml.elements.each '//UnitTestResult[@outcome="Failed"]' do |e|
|
|
puts ''
|
|
puts '**********************************'
|
|
puts e.attributes['testName']
|
|
puts e.elements['Output/ErrorInfo/Message'].get_text.value
|
|
puts e.elements['Output/ErrorInfo/StackTrace'].get_text.value
|
|
%W(StdOut StdErr).each do |s|
|
|
show_stream e, s
|
|
end
|
|
puts ''
|
|
fail_count = fail_count.succ
|
|
end
|
|
end
|
|
fail "#{fail_count} tests failed" if fail_count > 0
|
|
end
|
|
|
|
def show_stream(e, s)
|
|
data = e.elements["Output/#{s}"]
|
|
if data
|
|
puts "#{s}:", data.get_text.value
|
|
end
|
|
end
|
|
|
|
|
|
desc "Package a release zip"
|
|
task :release => ['checks:clean_workdir', 'build:release', 'zip:release', 'tag']
|
|
|
|
namespace :checks do
|
|
task :clean_workdir do
|
|
unless clean_working_dir?
|
|
system 'git status'
|
|
raise "Unclean working directory! Be sure to commit or .gitignore everything first!"
|
|
end
|
|
end
|
|
end
|
|
|
|
namespace :zip do
|
|
zip :release do |zip|
|
|
zip.directories_to_zip 'GitTfs/bin/Release'
|
|
zip.output_file = "GitTfs-#{version_helper.to_s}.zip"
|
|
zip.output_path = File.expand_path('../pkg', __FILE__)
|
|
end
|
|
task :release => :pkg
|
|
end
|
|
|
|
directory 'pkg'
|
|
|
|
def version_helper
|
|
@version_helper ||= Jeweler::VersionHelper.new(File.dirname(__FILE__))
|
|
end
|
|
|
|
def repo
|
|
@repo ||= Git.open(File.dirname(__FILE__))
|
|
end
|
|
|
|
def commit opts
|
|
repo.add opts[:files]
|
|
repo.commit opts[:message]
|
|
end
|
|
|
|
def clean_working_dir?
|
|
`git ls-files --deleted --modified --others --exclude-standard` == ''
|
|
end
|
|
|
|
desc 'Show the current version'
|
|
task :version do
|
|
$stdout.puts "Current version: #{version_helper.to_s}"
|
|
end
|
|
|
|
namespace :version do
|
|
task :cs do
|
|
File.open('Version.cs', 'w') do |f|
|
|
f.puts(
|
|
'partial class GitTfsProperties',
|
|
'{',
|
|
" public const string Version = \"#{version_helper.to_s}\";",
|
|
'}'
|
|
)
|
|
end
|
|
$stdout.puts 'Wrote Version.cs'
|
|
Rake::Task['version:cs'].reenable
|
|
end
|
|
|
|
namespace :bump do
|
|
desc "Bump to next major version"
|
|
task :major => :version do
|
|
version_helper.bump_major
|
|
version_helper.write
|
|
$stdout.puts "Updated version to #{version_helper.to_s}"
|
|
Rake::Task['version:cs'].invoke
|
|
commit(:files => ['VERSION', 'Version.cs'], :message => "Bumped to version #{version_helper.to_s}")
|
|
end
|
|
desc "Bump to next minor version"
|
|
task :minor => :version do
|
|
version_helper.bump_minor
|
|
version_helper.write
|
|
$stdout.puts "Updated version to #{version_helper.to_s}"
|
|
Rake::Task['version:cs'].invoke
|
|
commit(:files => ['VERSION', 'Version.cs'], :message => "Bumped to version #{version_helper.to_s}")
|
|
end
|
|
desc "Bump to next patch version"
|
|
task :patch => :version do
|
|
version_helper.bump_patch
|
|
version_helper.write
|
|
$stdout.puts "Updated version to #{version_helper.to_s}"
|
|
Rake::Task['version:cs'].invoke
|
|
commit(:files => ['VERSION', 'Version.cs'], :message => "Bumped to version #{version_helper.to_s}")
|
|
end
|
|
end
|
|
end
|
|
|
|
task :tag do
|
|
release_tag = "v#{version_helper.to_s}"
|
|
tag = repo.tag(release_tag) rescue nil
|
|
unless tag
|
|
$stdout.puts "Tagging #{release_tag}"
|
|
repo.add_tag(release_tag)
|
|
end
|
|
end
|