albacore 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. data/README.markdown +17 -7
  2. data/VERSION +1 -1
  3. data/install_dependencies.rb +46 -0
  4. data/lib/albacore.rb +1 -0
  5. data/lib/albacore/command.rb +23 -0
  6. data/lib/albacore/expandtemplates.rb +19 -4
  7. data/lib/albacore/msbuild.rb +3 -0
  8. data/lib/albacore/mspectestrunner.rb +22 -8
  9. data/lib/albacore/nunittestrunner.rb +5 -4
  10. data/lib/albacore/sftp.rb +19 -3
  11. data/lib/albacore/ssh.rb +20 -3
  12. data/lib/albacore/xunittestrunner.rb +48 -0
  13. data/lib/albacore/zipdirectory.rb +33 -12
  14. data/lib/rake/assemblyinfotask.rb +9 -15
  15. data/lib/rake/commandtask.rb +16 -0
  16. data/lib/rake/expandtemplatestask.rb +8 -14
  17. data/lib/rake/msbuildtask.rb +10 -15
  18. data/lib/rake/mspectask.rb +16 -0
  19. data/lib/rake/ncoverconsoletask.rb +9 -15
  20. data/lib/rake/ncoverreporttask.rb +9 -15
  21. data/lib/rake/nunittask.rb +9 -15
  22. data/lib/rake/renametask.rb +11 -16
  23. data/lib/rake/sftptask.rb +8 -14
  24. data/lib/rake/sqlcmdtask.rb +9 -15
  25. data/lib/rake/sshtask.rb +8 -14
  26. data/lib/rake/support/albacoretask.rb +19 -0
  27. data/lib/rake/xunittask.rb +16 -0
  28. data/lib/rake/ziptask.rb +9 -14
  29. data/rakefile.rb +95 -11
  30. data/spec/command_spec.rb +23 -0
  31. data/spec/commandtask_spec.rb +31 -0
  32. data/spec/expandtemplates_spec.rb +52 -0
  33. data/spec/expandtemplatestask_spec.rb +1 -1
  34. data/spec/msbuild_spec.rb +5 -5
  35. data/spec/msbuildtask_spec.rb +1 -1
  36. data/spec/mspectask_spec.rb +31 -0
  37. data/spec/ncoverconsole_spec.rb +43 -43
  38. data/spec/ncoverconsoletask_spec.rb +1 -1
  39. data/spec/ncoverreport_spec.rb +51 -51
  40. data/spec/ncoverreporttask_spec.rb +1 -1
  41. data/spec/nunittask_spec.rb +1 -1
  42. data/spec/nunittestrunner_spec.rb +64 -0
  43. data/spec/patches/system_patch.rb +5 -1
  44. data/spec/renametask_spec.rb +1 -1
  45. data/spec/sftptask_spec.rb +1 -1
  46. data/spec/sqlcmd_spec.rb +39 -39
  47. data/spec/sqlcmdtask_spec.rb +1 -1
  48. data/spec/sshtask_spec.rb +1 -1
  49. data/spec/support/CodeCoverage/xunit/assemblies/TestSolution.XUnitTests.dll +0 -0
  50. data/spec/support/CodeCoverage/xunit/assemblies/TestSolution.dll +0 -0
  51. data/spec/support/CodeCoverage/xunit/assemblies/xunit.dll +0 -0
  52. data/spec/support/CodeCoverage/xunit/assemblies/xunit.xml +2306 -0
  53. data/spec/support/TestSolution/TestSolution.XUnitTests/Class1.cs +19 -0
  54. data/spec/support/TestSolution/TestSolution.XUnitTests/Properties/AssemblyInfo.cs +36 -0
  55. data/spec/support/TestSolution/TestSolution.XUnitTests/TestSolution.XUnitTests.csproj +69 -0
  56. data/spec/support/TestSolution/TestSolution.sln +6 -0
  57. data/spec/support/expandtemplates/datafiles/sample_with_include.yml +2 -0
  58. data/spec/support/expandtemplates/datafiles/template_specific_data_file_with_include.yml +5 -0
  59. data/spec/support/expandtemplates/datafiles/template_specific_include.yml +3 -0
  60. data/spec/support/expandtemplatestestdata.rb +8 -0
  61. data/spec/support/spec_helper.rb +2 -0
  62. data/spec/xunittask_spec.rb +31 -0
  63. data/spec/zip_spec.rb +3 -3
  64. data/spec/ziptask_spec.rb +2 -1
  65. metadata +42 -4
@@ -14,7 +14,9 @@ If you would like to install the current, stable release of Albacore, you can do
14
14
 
15
15
  **Step 2:** Install the Albacore gem
16
16
 
17
- > gem install Albacore
17
+ > gem install albacore
18
+
19
+ (note: as of v0.0.7, the "albacore" gem is spelled with a lowercase "a".)
18
20
 
19
21
  ## How To Manually Build And Install The Albacore Gem
20
22
 
@@ -34,15 +36,15 @@ In your local clone of Albacore, use the jeweler rake tasks to build the latest
34
36
  >
35
37
  > rake jeweler:build
36
38
 
37
- this will produce an 'Albacore-#.#.#.gem' file in the 'pkg' folder, where '#.#.#' is the version number. For example 'Albacore-0.0.1.gem'.
39
+ this will produce an 'albacore-#.#.#.gem' file in the 'pkg' folder, where '#.#.#' is the version number. For example 'albacore-0.0.7.gem'.
38
40
 
39
41
  **Step 3:** Install the gem
40
42
 
41
43
  After building the gem, you can install it from your local file system.
42
44
 
43
- > gem install -l pkg\Albacore-#.#.#.gem
45
+ > gem install -l pkg/albacore-#.#.#.gem
44
46
 
45
- where '#.#.#' is the version number of the gem. For example 'Albacore-0.0.1.gem'
47
+ where '#.#.#' is the version number of the gem. For example 'albacore-0.0.7.gem'
46
48
 
47
49
  ## How To Use Albacore
48
50
 
@@ -53,18 +55,26 @@ After installing Albacore, you only need to
53
55
  in your rakefile. This will allow you to use the tasks that Albacore includes.
54
56
 
55
57
  desc "Run a sample build using the MSBuildTask"
56
- Albacore::MSBuildTask.new(:msbuild) do |msb|
57
- msb.properties :configuration => :Debug
58
+ msbuildtask do |msb|
59
+ msb.properties = {:configuration => :Debug}
58
60
  msb.targets [:Clean, :Build]
59
61
  msb.solution = "spec/support/TestSolution/TestSolution.sln"
60
62
  end
61
63
 
62
64
  Beyond the simple example, check out the [Albacore Wiki](http://wiki.github.com/derickbailey/Albacore) for detailed instructions on how to use the built in tasks and their options.
63
65
 
66
+ ## How To Contribute, Collaborate, Communicate
67
+
68
+ If you'd like to get involved with the Albacore framework, we have a discussion group over at google: **[AlbacoreDev](http://groups.google.com/group/albacoredev)**
69
+
70
+ Anyone can fork the main repository and submit patches, as well. And lastly, the [wiki](http://wiki.github.com/derickbailey/Albacore) and [issues list](http://github.com/derickbailey/Albacore/issues) are also open for additions, edits, and discussion.
71
+
64
72
  ## Contributors
65
73
 
66
74
  Many thanks for contributions to Albacore are due:
67
75
 
68
- * [Ben Hall](http://github.com/benhall): SSH, SFTP, ZipDirectory, Rename, YAML auto config, and other great additions
76
+ * [Ben Hall](http://github.com/benhall): SSH, SFTP, ZipDirectory, Rename, YAML auto config, Wiki pages, and other great additions
77
+ * [Steven Harman] (http://github.com/stevenharman): Finding some wicked bugs, patching nunit test runner, and working on the nant task
78
+ * [Brian Donahue] (http://github.com/briandonahue): Inspiration and initial code for the ExpandTemplates task
69
79
  * [Sean Biefeld](http://github.com/seanbiefeld): MSpecTestRunner for NCoverConsole
70
80
  * [Kevin Colyar](http://github.com/kevincolyar): Testing and updating of MSBuild to work with Cygwin
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.0.8
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+ require 'rubygems/gem_runner'
3
+ require 'rubygems/exceptions'
4
+
5
+ #http://gist.github.com/236148
6
+ required_version = Gem::Requirement.new "> 1.8.3"
7
+
8
+ unless required_version.satisfied_by? Gem.ruby_version then
9
+ abort "Expected Ruby Version #{required_version}, was #{Gem.ruby_version}"
10
+ end
11
+
12
+ def install(lib)
13
+ begin
14
+ matches = Gem.source_index.find_name(lib)
15
+ if matches.empty?
16
+ puts "Installing #{lib}"
17
+ Gem::GemRunner.new.run ['install', lib]
18
+ else
19
+ puts "Found #{lib} gem - skipping"
20
+ end
21
+ rescue Gem::SystemExitException => e
22
+ end
23
+ end
24
+
25
+ def add_source(url)
26
+ begin
27
+ if Gem.sources.include?(url)
28
+ puts "Found #{url} gem source = skipping"
29
+ else
30
+ puts "Adding #{url} gem source."
31
+ Gem::GemRunner.new.run ['sources', '-a', url]
32
+ end
33
+ rescue Gem::SystemExitException => e
34
+ end
35
+ end
36
+
37
+ puts "Installing required dependencies"
38
+ add_source 'http://gemcutter.org'
39
+ install 'rake'
40
+ install 'net-ssh'
41
+ install 'net-sftp'
42
+ install 'rubyzip'
43
+ install 'jeweler'
44
+ install 'rspec'
45
+ install 'derickbailey-notamock'
46
+ install 'jekyll'
@@ -5,5 +5,6 @@ $: << File.expand_path(File.join(File.dirname(__FILE__), "rake"))
5
5
 
6
6
  require 'logging'
7
7
 
8
+ Dir.glob(File.join(File.expand_path(File.dirname(__FILE__)), 'rake/support/*.rb')).each {|f| require f }
8
9
  Dir.glob(File.join(File.expand_path(File.dirname(__FILE__)), 'rake/*.rb')).each {|f| require f }
9
10
  Dir.glob(File.join(File.expand_path(File.dirname(__FILE__)), 'albacore/*.rb')).each {|f| require f }
@@ -0,0 +1,23 @@
1
+ require 'albacore/support/albacore_helper'
2
+
3
+ class Command
4
+ include RunCommand
5
+ include YAMLConfig
6
+ include Logging
7
+
8
+ attr_accessor :parameters
9
+
10
+ def initialize()
11
+ super()
12
+ @require_valid_command=false
13
+ @path_to_command=''
14
+ @parameters = []
15
+ end
16
+
17
+ def execute()
18
+ result = run_command "Command", @parameters.join(" ")
19
+
20
+ failure_message = 'Command Failed. See Build Log For Detail'
21
+ fail_with_message failure_message if !result
22
+ end
23
+ end
@@ -16,7 +16,7 @@ class ExpandTemplates
16
16
  return if @data_file.nil?
17
17
  return if @expand_files.empty?
18
18
 
19
- config = read_config
19
+ config = read_config(@data_file)
20
20
  @expand_files.each { |template_file, output_file|
21
21
  file_config = get_config_for_file config, template_file
22
22
  expand_template template_file, output_file, file_config
@@ -45,15 +45,30 @@ private
45
45
  }
46
46
  end
47
47
 
48
- def read_config
49
- YAML::load(File.open(@data_file, "r"))
48
+ def read_config(file)
49
+ config = YAML::load(File.open(file, "r"))
50
+ if (config.include?("@include"))
51
+ include_file = File.join(File.dirname(file), config["@include"])
52
+ @logger.debug("Found @include directive. Loading additional data from #{include_file}")
53
+ config.reject!{|k,v| k == "@include"}
54
+ include_config = read_config(include_file)
55
+ config = deep_merge(include_config, config)
56
+ end
57
+ return config
58
+ end
59
+
60
+ def deep_merge(first, second)
61
+ # From: http://www.ruby-forum.com/topic/142809
62
+ # Author: Stefan Rusterholz
63
+ merger = proc { |key,v1,v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
64
+ first.merge(second, &merger)
50
65
  end
51
66
 
52
67
  def get_config_for_file(original_config, file)
53
68
  filename = File.basename(file)
54
69
  file_config = original_config[filename]
55
70
  if file_config.nil?
56
- @logger.debug "No config data found for #{filename}. Using global data."
71
+ @logger.debug "No config data found for #{filename}. Using local data."
57
72
  new_config = original_config
58
73
  else
59
74
  @logger.debug "Found config data for #{filename}."
@@ -3,6 +3,7 @@ require 'albacore/support/albacore_helper'
3
3
  class MSBuild
4
4
  include RunCommand
5
5
  include YAMLConfig
6
+ include Logging
6
7
 
7
8
  attr_accessor :solution, :verbosity
8
9
 
@@ -13,6 +14,8 @@ class MSBuild
13
14
 
14
15
  def build_path_to_command
15
16
  win_dir = ENV['windir'] || ENV['WINDIR']
17
+ win_dir = 'C:/Windows' if win_dir.nil?
18
+
16
19
  File.join(win_dir.dup, 'Microsoft.NET', 'Framework', 'v3.5', 'MSBuild.exe')
17
20
  end
18
21
 
@@ -1,12 +1,12 @@
1
1
  require 'albacore/support/albacore_helper'
2
2
 
3
3
  class MSpecTestRunner
4
- include Logging
4
+ include RunCommand
5
5
  include YAMLConfig
6
6
 
7
- attr_accessor :assemblies, :path_to_command, :html_output
7
+ attr_accessor :assemblies, :path_to_command, :html_output, :options
8
8
 
9
- def initialize(path_to_command)
9
+ def initialize(path_to_command='')
10
10
  super()
11
11
  @path_to_command = path_to_command
12
12
  @assemblies=[]
@@ -15,12 +15,26 @@ class MSpecTestRunner
15
15
  def get_command_line
16
16
  command = []
17
17
  command << @path_to_command
18
- command << build_assembly_list unless @assemblies.empty?
19
- command << build_html_output unless @html_output.nil?
18
+ command << get_command_parameters
19
+ cmd = command.join(" ")
20
+ @logger.debug "Build MSpec Test Runner Command Line: " + cmd
21
+ return cmd
22
+ end
23
+
24
+ def get_command_parameters
25
+ command_params = []
26
+ command_params << build_assembly_list unless @assemblies.empty?
27
+ command_params << @options.join(" ") unless @options.nil?
28
+ command_params << build_html_output unless @html_output.nil?
29
+ command_params
30
+ end
31
+
32
+ def execute()
33
+ command_params = get_command_parameters
34
+ result = run_command "MSpec", command_params.join(" ")
20
35
 
21
- cmdline = command.join(" ")
22
- @logger.debug "Build MSpec Test Runner Command Line: " + cmdline
23
- cmdline
36
+ failure_message = 'MSpec Failed. See Build Log For Detail'
37
+ fail_with_message failure_message if !result
24
38
  end
25
39
 
26
40
  def build_assembly_list
@@ -4,7 +4,7 @@ class NUnitTestRunner
4
4
  include RunCommand
5
5
  include YAMLConfig
6
6
 
7
- attr_accessor :assemblies, :options
7
+ attr_accessor :path_to_command, :assemblies, :options
8
8
 
9
9
  def initialize(path_to_command='')
10
10
  super()
@@ -14,7 +14,9 @@ class NUnitTestRunner
14
14
  end
15
15
 
16
16
  def get_command_line
17
- command_params = get_command_parameters
17
+ command_params = []
18
+ command_params << @path_to_command
19
+ command_params << get_command_parameters
18
20
  commandline = command_params.join(" ")
19
21
  @logger.debug "Build NUnit Test Runner Command Line: " + commandline
20
22
  commandline
@@ -22,7 +24,6 @@ class NUnitTestRunner
22
24
 
23
25
  def get_command_parameters
24
26
  command_params = []
25
- command_params << @path_to_command
26
27
  command_params << @assemblies.join(" ") unless @assemblies.nil?
27
28
  command_params << @options.join(" ") unless @options.nil?
28
29
  command_params
@@ -30,7 +31,7 @@ class NUnitTestRunner
30
31
 
31
32
  def execute()
32
33
  command_params = get_command_parameters
33
- result = run_command "NUnit", command_params
34
+ result = run_command "NUnit", command_params.join(" ")
34
35
 
35
36
  failure_message = 'NUnit Failed. See Build Log For Detail'
36
37
  fail_with_message failure_message if !result
@@ -5,15 +5,26 @@ class Sftp
5
5
  include YAMLConfig
6
6
  include Logging
7
7
 
8
- attr_accessor :server, :username, :password, :upload_files
9
-
8
+ attr_accessor :server, :username, :password, :upload_files, :port, :key, :debug
9
+
10
10
  def initialize
11
11
  super()
12
12
  @upload_files = {}
13
13
  end
14
14
 
15
+ def get_connection_options
16
+ options = {}
17
+ options[:verbose] = :debug if @debug == true
18
+ options[:password] = @password if @password
19
+ options[:port] = @port if @port
20
+ options[:keys] = [@key] if @key
21
+ options
22
+ end
23
+
15
24
  def upload()
16
- Net::SFTP.start(@server, @username, :password => @password) do |sftp|
25
+ warn_about_key if @key
26
+
27
+ Net::SFTP.start(@server, @username, get_connection_options) do |sftp|
17
28
  @logger.debug "Starting File Upload"
18
29
  @upload_files.each {|local_file, remote_file|
19
30
  @logger.debug "Uploading #{local_file} to #{remote_file}"
@@ -21,4 +32,9 @@ class Sftp
21
32
  }
22
33
  end
23
34
  end
35
+
36
+ def warn_about_key()
37
+ info.debug 'When using a key, you need an SSH-Agent running to manage the keys.'
38
+ info.debug 'On Windows, a recommended agent is called Pageant, downloadable from the Putty site.'
39
+ end
24
40
  end
@@ -5,15 +5,26 @@ class Ssh
5
5
  include YAMLConfig
6
6
  include Logging
7
7
 
8
- attr_accessor :server, :username, :password, :commands
9
-
8
+ attr_accessor :server, :username, :password, :commands, :port, :key, :debug
9
+
10
10
  def initialize
11
11
  super()
12
12
  @commands = []
13
13
  end
14
+
15
+ def get_connection_options
16
+ options = {}
17
+ options[:verbose] = :debug if @debug == true
18
+ options[:password] = @password if @password
19
+ options[:port] = @port if @port
20
+ options[:keys] = [@key] if @key
21
+ options
22
+ end
14
23
 
15
24
  def execute()
16
- Net::SSH.start(@server, @username, :password => @password) do |ssh|
25
+ warn_about_key if @key
26
+
27
+ Net::SSH.start(@server, @username, get_connection_options) do |ssh|
17
28
  @commands.each{|cmd|
18
29
  @logger.info "Executing remote command: #{cmd}"
19
30
  output = ssh.exec!(cmd)
@@ -22,4 +33,10 @@ class Ssh
22
33
  }
23
34
  end
24
35
  end
36
+
37
+ def warn_about_key()
38
+ info.debug 'When using a key, you need an SSH-Agent running to manage the keys.'
39
+ info.debug 'On Windows, a recommended agent is called Pageant, downloadable from the Putty site.'
40
+ end
41
+
25
42
  end
@@ -0,0 +1,48 @@
1
+ require 'albacore/support/albacore_helper'
2
+
3
+ class XUnitTestRunner
4
+ include RunCommand
5
+ include YAMLConfig
6
+
7
+ attr_accessor :assemblies, :path_to_command, :html_output, :options
8
+
9
+ def initialize(path_to_command='')
10
+ super()
11
+ @path_to_command = path_to_command
12
+ @assemblies=[]
13
+ end
14
+
15
+ def get_command_line
16
+ command = []
17
+ command << @path_to_command
18
+ command << get_command_parameters
19
+
20
+ cmd = command.join(" ")
21
+ @logger.debug "Build XUnit Test Runner Command Line: " + cmd
22
+ return cmd
23
+ end
24
+
25
+ def get_command_parameters
26
+ command_params = []
27
+ command_params << build_assembly_list unless @assemblies.empty?
28
+ command_params << @options.join(" ") unless @options.nil?
29
+ command_params << build_html_output unless @html_output.nil?
30
+ command_params
31
+ end
32
+
33
+ def execute()
34
+ command_params = get_command_parameters
35
+ result = run_command "XUnit", command_params.join(" ")
36
+
37
+ failure_message = 'XUnit Failed. See Build Log For Detail'
38
+ fail_with_message failure_message if !result
39
+ end
40
+
41
+ def build_assembly_list
42
+ @assemblies.map{|asm| "\"#{asm}\""}.join(" ")
43
+ end
44
+
45
+ def build_html_output
46
+ "/html #{@html_output}"
47
+ end
48
+ end
@@ -5,19 +5,22 @@ include Zip
5
5
 
6
6
  class ZipDirectory
7
7
  include YAMLConfig
8
-
9
- attr_accessor :directory_to_zip
10
- attr_accessor :additional_files
11
- attr_accessor :file
8
+ include Failure
9
+
10
+ attr_accessor :directories_to_zip, :additional_files
11
+ attr_accessor :output_path, :output_file
12
+ attr_accessor :flatten_zip
12
13
 
13
14
  def initialize
14
15
  super()
16
+ @flatten_zip = true
15
17
  end
16
18
 
17
19
  def package()
18
- return if @directory_to_zip.nil?
19
-
20
- @directory_to_zip.sub!(%r[/$],'')
20
+ fail_with_message 'Output File cannot be empty' if @output_file.nil?
21
+ return if @output_file.nil?
22
+
23
+ clean_directories_names
21
24
  remove zip_name
22
25
 
23
26
  ZipFile.open(zip_name, 'w') do |zipfile|
@@ -26,6 +29,11 @@ class ZipDirectory
26
29
  end
27
30
  end
28
31
 
32
+ def clean_directories_names
33
+ return if @directories_to_zip.nil?
34
+ @directories_to_zip.each { |d| d.sub!(%r[/$],'')}
35
+ end
36
+
29
37
  def remove(filename)
30
38
  FileUtils.rm filename, :force=>true
31
39
  end
@@ -35,20 +43,33 @@ class ZipDirectory
35
43
  end
36
44
 
37
45
  def zip_name()
38
- File.join(@directory_to_zip, @file)
46
+ @output_path = set_output_path
47
+ File.join(@output_path, @output_file)
48
+ end
49
+
50
+ def set_output_path()
51
+ path = ''
52
+ path = @directories_to_zip.first unless @directories_to_zip.nil?
53
+ path = @output_path unless @output_path.nil?
54
+ return path
39
55
  end
56
+
40
57
 
41
58
  def zip_directory(zipfile)
42
- Dir["#{@directory_to_zip}/**/**"].reject{|f| reject_file(f)}.each do |file_path|
43
- file_name = file_path.sub(@directory_to_zip+'/','');
44
- zipfile.add(file_name, file_path)
59
+ return if @directories_to_zip.nil?
60
+ @directories_to_zip.each do |d|
61
+ Dir["#{d}/**/**"].reject{|f| reject_file(f)}.each do |file_path|
62
+ file_name = file_path
63
+ file_name = file_path.sub(d + '/','') if @flatten_zip
64
+ zipfile.add(file_name, file_path)
65
+ end
45
66
  end
46
67
  end
47
68
 
48
69
  def zip_additional(zipfile)
49
70
  return if @additional_files.nil?
50
71
  @additional_files.reject{|f| reject_file(f)}.each do |file_path|
51
- file_name = file_path#.split('/').last
72
+ file_name = file_path.split('/').last if @flatten_zip
52
73
  zipfile.add(file_name, file_path)
53
74
  end
54
75
  end