albacore 2.0.0.rc.7 → 2.0.0.rc.8
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +32 -8
- data/albacore.gemspec +0 -1
- data/lib/albacore/cross_platform_cmd.rb +10 -13
- data/lib/albacore/dsl.rb +1 -5
- data/lib/albacore/ext/teamcity.rb +10 -1
- data/lib/albacore/package.rb +24 -0
- data/lib/albacore/package_repo.rb +23 -0
- data/lib/albacore/project.rb +14 -3
- data/lib/albacore/task_types/asmver/cpp.rb +9 -0
- data/lib/albacore/task_types/asmver/vb.rb +8 -0
- data/lib/albacore/task_types/test_runner.rb +78 -6
- data/lib/albacore/tasks/versionizer.rb +34 -23
- data/lib/albacore/tools/restore_hint_paths.rb +2 -32
- data/lib/albacore/version.rb +1 -1
- data/spec/asmver_spec.rb +30 -0
- data/spec/package_repo_spec.rb +10 -0
- data/spec/package_spec.rb +25 -0
- data/spec/project_spec.rb +39 -2
- data/spec/tasks/versionizer_spec.rb +47 -0
- data/spec/test_runner_spec.rb +38 -0
- metadata +11 -19
data/README.md
CHANGED
@@ -170,19 +170,37 @@ end
|
|
170
170
|
|
171
171
|
### Docs: nugets_pack
|
172
172
|
|
173
|
-
|
173
|
+
```
|
174
|
+
nugets_pack :create_nugets do |p|
|
175
|
+
p.files = FileList['src/**/*.{csproj,fsproj,nuspec}'].
|
176
|
+
exclude(/Tests/)
|
177
|
+
p.out = 'build/pkg'
|
178
|
+
p.exe = 'buildsupport/NuGet.exe'
|
179
|
+
p.with_metadata do |m|
|
180
|
+
m.description = 'A cool nuget'
|
181
|
+
m.authors = 'Henrik'
|
182
|
+
m.version = ENV['NUGET_VERSION']
|
183
|
+
end
|
184
|
+
p.with_package do |p|
|
185
|
+
p.add_file 'file/relative/to/proj', 'lib/net40'
|
186
|
+
end
|
187
|
+
end
|
188
|
+
```
|
174
189
|
|
175
|
-
####
|
190
|
+
#### nugets_pack Config##no_project_dependencies
|
176
191
|
|
177
192
|
Cancel following of references between projects that cause nugets_pack to find and add as nuget dependencies, linked projects.
|
178
193
|
|
179
|
-
```
|
180
|
-
# TODO
|
181
|
-
```
|
182
|
-
|
183
194
|
### Docs: nugets_restore
|
184
195
|
|
185
|
-
|
196
|
+
Enables nuget restore throughout the solution.
|
197
|
+
|
198
|
+
```
|
199
|
+
nugets_restore :restore do |p|
|
200
|
+
p.out = 'src/packages'
|
201
|
+
p.exe = 'buildsupport/NuGet.exe'
|
202
|
+
end
|
203
|
+
```
|
186
204
|
|
187
205
|
### Docs: asmver
|
188
206
|
|
@@ -203,7 +221,13 @@ end
|
|
203
221
|
|
204
222
|
### Docs: test_runner
|
205
223
|
|
206
|
-
|
224
|
+
```
|
225
|
+
test_runner :tests do |tests|
|
226
|
+
tests.files = FileList['**/*.Tests/bin/Release/*.Tests.dll'] # dll files with test
|
227
|
+
tests.exe = 'src/packages/NUnit.Runners.2.5.3/tools/nunit-console.exe' # executable to run tests with
|
228
|
+
tests.copy_local # when running from network share
|
229
|
+
end
|
230
|
+
```
|
207
231
|
|
208
232
|
### Docs: nugets_authentication
|
209
233
|
|
data/albacore.gemspec
CHANGED
@@ -28,7 +28,6 @@ EOF
|
|
28
28
|
s.add_dependency 'semver2', '~> 3.3'
|
29
29
|
s.add_dependency 'ProcessPilot', '~> 2.0'
|
30
30
|
s.add_dependency 'highline', '~> 1.6'
|
31
|
-
s.add_dependency 'rubyzip', '=0.9.9'
|
32
31
|
|
33
32
|
s.add_development_dependency 'rubygems-tasks', '~>0.2'
|
34
33
|
s.add_development_dependency 'rspec', '>= 2.13'
|
@@ -68,13 +68,13 @@ module Albacore
|
|
68
68
|
def system *cmd, &block
|
69
69
|
raise ArgumentError, "cmd is nil" if cmd.nil? # don't allow nothing to be passed
|
70
70
|
opts = Map.options((Hash === cmd.last) ? cmd.pop : {}). # same arg parsing as rake
|
71
|
-
apply(
|
72
|
-
silent
|
73
|
-
output
|
74
|
-
work_dir
|
75
|
-
out
|
76
|
-
err
|
77
|
-
clr_command
|
71
|
+
apply({
|
72
|
+
:silent => false,
|
73
|
+
:output => true,
|
74
|
+
:work_dir => FileUtils.pwd,
|
75
|
+
:out => Albacore.application.output,
|
76
|
+
:err => Albacore.application.output_err,
|
77
|
+
:clr_command => false })
|
78
78
|
|
79
79
|
exe, pars, printable, block = prepare_command cmd, (opts.get('clr_command')), &block
|
80
80
|
|
@@ -101,16 +101,13 @@ module Albacore
|
|
101
101
|
|
102
102
|
debug 'execute the new process, letting it write to the write FD (file descriptor)'
|
103
103
|
@pid = Process.spawn(*[exe, *pars],
|
104
|
-
out
|
105
|
-
|
106
|
-
|
104
|
+
{ :out => write,
|
105
|
+
#:err => ewrite,
|
106
|
+
:chdir => opts.get(:work_dir) })
|
107
107
|
|
108
108
|
debug 'waiting for process completion'
|
109
109
|
_, status = Process.wait2 @pid
|
110
110
|
|
111
|
-
#debug 'waiting for thread completion'
|
112
|
-
#@out_thread.join
|
113
|
-
|
114
111
|
return block.call(status.success? && inmem.string, status, inmem.string)
|
115
112
|
end
|
116
113
|
end
|
data/lib/albacore/dsl.rb
CHANGED
@@ -66,11 +66,7 @@ module Albacore
|
|
66
66
|
Albacore.define_task *args do
|
67
67
|
c = Albacore::TestRunner::Config.new
|
68
68
|
yield c
|
69
|
-
|
70
|
-
c.files.each { |dll|
|
71
|
-
command = Albacore::TestRunner::Cmd.new c.work_dir, c.exe, c.parameters, dll
|
72
|
-
Albacore::TestRunner::Task.new(command).execute
|
73
|
-
}
|
69
|
+
Albacore::TestRunner::Task.new(c.opts).execute
|
74
70
|
end
|
75
71
|
end
|
76
72
|
|
@@ -2,10 +2,13 @@ require 'albacore'
|
|
2
2
|
|
3
3
|
module Albacore
|
4
4
|
module Ext
|
5
|
+
|
5
6
|
# The teamcity module writes appropriate build-script "interaction messages"
|
6
7
|
# (see http://confluence.jetbrains.com/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-artPublishing)
|
7
8
|
# to STDOUT.
|
9
|
+
#
|
8
10
|
module TeamCity
|
11
|
+
|
9
12
|
# Escaped the progress message
|
10
13
|
# (see http://confluence.jetbrains.com/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ServiceMessages)
|
11
14
|
# The Unicode symbol escape is not implemented
|
@@ -17,16 +20,18 @@ module Albacore
|
|
17
20
|
# | (vertical bar) ||
|
18
21
|
# [ (opening bracket) |[
|
19
22
|
# ] (closing bracket) |]
|
23
|
+
#
|
20
24
|
def self.escape message
|
21
25
|
message.gsub(/([\[|\]|\|'])/, '|\1').gsub(/\n/, '|n').gsub(/\r/, '|r')
|
22
26
|
end
|
27
|
+
|
23
28
|
def self.configure
|
24
29
|
Albacore.subscribe :artifact do |artifact|
|
25
30
|
::Albacore.puts "##teamcity[publishArtifacts '#{artifact.location}']"
|
26
31
|
end
|
27
32
|
Albacore.subscribe :build_version do |version|
|
28
33
|
# tell teamcity our decision
|
29
|
-
::Albacore.puts "##teamcity[buildNumber '#{version.
|
34
|
+
::Albacore.puts "##teamcity[buildNumber '#{version.build_number}']"
|
30
35
|
end
|
31
36
|
Albacore.subscribe :progress do |p|
|
32
37
|
# tell teamcity of our progress
|
@@ -41,13 +46,17 @@ module Albacore
|
|
41
46
|
finish_progress p.message
|
42
47
|
end
|
43
48
|
end
|
49
|
+
|
44
50
|
private
|
51
|
+
|
45
52
|
PROGRESS_QUEUE = []
|
53
|
+
|
46
54
|
# Starts a new progress block
|
47
55
|
def self.start_progress(name)
|
48
56
|
PROGRESS_QUEUE.push name
|
49
57
|
::Albacore.puts "##teamcity[progressStart '#{escape name}']"
|
50
58
|
end
|
59
|
+
|
51
60
|
# Finishes the progress block and all child progress blocks
|
52
61
|
def self.finish_progress(name = '')
|
53
62
|
loop do
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
module Albacore
|
4
|
+
# a package encapsulates the properties of a set package with a
|
5
|
+
# distinct path, version and id
|
6
|
+
class Package
|
7
|
+
|
8
|
+
# id of the package as known by nuget
|
9
|
+
attr_reader :id
|
10
|
+
|
11
|
+
# path of the package in question
|
12
|
+
attr_reader :path
|
13
|
+
|
14
|
+
# create a new package with the given id and path
|
15
|
+
def initialize id, path
|
16
|
+
@id = id
|
17
|
+
@path = path
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
"Package[#{path}]"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'albacore/package'
|
3
|
+
|
4
|
+
module Albacore
|
5
|
+
# a package repository is a location where the nugets or wraps are stored
|
6
|
+
class PackageRepo
|
7
|
+
include Logging
|
8
|
+
|
9
|
+
# initialize that package repository with a path to all the packages
|
10
|
+
def initialize path
|
11
|
+
@path = path
|
12
|
+
end
|
13
|
+
|
14
|
+
# find the latest package based on the package id
|
15
|
+
def find_latest pkg_id
|
16
|
+
trace "finding latest from #{@path}, id: #{pkg_id}"
|
17
|
+
sorted = Dir.glob(File.join(@path, "#{pkg_id}*/**/*.dll")) # find the latest
|
18
|
+
path = sorted.first
|
19
|
+
Package.new pkg_id, path
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
data/lib/albacore/project.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'nokogiri'
|
2
2
|
require 'albacore/logging'
|
3
3
|
require 'albacore/semver'
|
4
|
+
require 'albacore/package_repo'
|
4
5
|
|
5
6
|
module Albacore
|
6
7
|
|
@@ -58,12 +59,21 @@ module Albacore
|
|
58
59
|
nil
|
59
60
|
end
|
60
61
|
|
62
|
+
# This is the output path if the project file doens't have a configured
|
63
|
+
# 'Configuration' condition like all default project files have that come
|
64
|
+
# from Visual Studio/Xamarin Studio.
|
61
65
|
def fallback_output_path
|
62
66
|
fallback = @proj_xml_node.css("Project PropertyGroup OutputPath").first
|
63
67
|
condition = fallback.parent['Condition'] || 'No \'Condition\' specified'
|
64
68
|
warn "chose an OutputPath in: '#{self}' for Configuration: <#{condition}> [albacore: project]"
|
65
69
|
fallback.inner_text
|
66
70
|
end
|
71
|
+
|
72
|
+
# Gets the relative location (to the project base path) of the dll
|
73
|
+
# that it will output
|
74
|
+
def output_dll conf
|
75
|
+
Paths.join(output_path(conf) || fallback_output_path, "#{asmname}.dll")
|
76
|
+
end
|
67
77
|
|
68
78
|
# find the NodeList reference list
|
69
79
|
def find_refs
|
@@ -122,7 +132,7 @@ module Albacore
|
|
122
132
|
# returns enumerable Package
|
123
133
|
def find_packages
|
124
134
|
declared_packages.collect do |package|
|
125
|
-
guess = PackageRepo.new('./src/packages').find_latest package
|
135
|
+
guess = ::Albacore::PackageRepo.new('./src/packages').find_latest package.id
|
126
136
|
debug "#{name}: guess: #{guess} [albacore: project]"
|
127
137
|
guess
|
128
138
|
end
|
@@ -134,8 +144,9 @@ module Albacore
|
|
134
144
|
end
|
135
145
|
|
136
146
|
# save the xml
|
137
|
-
def save
|
138
|
-
|
147
|
+
def save(output = nil)
|
148
|
+
output = path unless output
|
149
|
+
File.open(output, 'w') { |f| @proj_xml_node.write_xml_to f }
|
139
150
|
end
|
140
151
|
|
141
152
|
# get the path of 'packages.config'
|
@@ -12,9 +12,18 @@ module Albacore::Asmver
|
|
12
12
|
def build_attribute_re(attr_name)
|
13
13
|
/^\[assembly: #{attr_name}(.+)/
|
14
14
|
end
|
15
|
+
|
16
|
+
def namespace_start ns
|
17
|
+
"namespace #{ns.gsub /\./, '::'} {"
|
18
|
+
end
|
19
|
+
|
20
|
+
def namespace_end
|
21
|
+
"}\n"
|
22
|
+
end
|
15
23
|
|
16
24
|
def build_using_statement(namespace)
|
17
25
|
"using namespace #{namespace.gsub(/\./, '::')};"
|
18
26
|
end
|
27
|
+
|
19
28
|
end
|
20
29
|
end
|
@@ -1,5 +1,8 @@
|
|
1
|
-
require 'rake'
|
2
1
|
require 'set'
|
2
|
+
require 'map'
|
3
|
+
require 'tmpdir'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'pathname'
|
3
6
|
require 'albacore/cmd_config'
|
4
7
|
require 'albacore/cross_platform_cmd'
|
5
8
|
|
@@ -10,15 +13,45 @@ module Albacore
|
|
10
13
|
def initialize work_dir, executable, parameters, file
|
11
14
|
@work_dir, @executable = work_dir, executable
|
12
15
|
@parameters = parameters.to_a.unshift(file)
|
13
|
-
mono_command
|
14
16
|
end
|
17
|
+
|
15
18
|
def execute
|
16
|
-
system @executable,
|
19
|
+
system @executable,
|
20
|
+
@parameters,
|
21
|
+
:work_dir => @work_dir,
|
22
|
+
:clr_command => true
|
17
23
|
end
|
18
24
|
end
|
25
|
+
|
26
|
+
# the configuration object for the test runner
|
19
27
|
class Config
|
20
28
|
include CmdConfig
|
29
|
+
|
30
|
+
# give this property the list of dlls you want to test
|
21
31
|
attr_writer :files
|
32
|
+
|
33
|
+
# constructor, no parameters
|
34
|
+
def initialize
|
35
|
+
@copy_local = false
|
36
|
+
@files = []
|
37
|
+
end
|
38
|
+
|
39
|
+
# gets the configured options
|
40
|
+
def opts
|
41
|
+
Map.new(
|
42
|
+
:files => files,
|
43
|
+
:copy_local => @copy_local,
|
44
|
+
:exe => @exe)
|
45
|
+
end
|
46
|
+
|
47
|
+
# mark that it should be possible to copy the test files local
|
48
|
+
# -- this is great if you are running a VM and the host disk is
|
49
|
+
# mapped as a network drive, which crashes some test runners
|
50
|
+
def copy_local
|
51
|
+
@copy_local = true
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
22
55
|
def files
|
23
56
|
if @files.respond_to? :each
|
24
57
|
@files
|
@@ -27,12 +60,51 @@ module Albacore
|
|
27
60
|
end
|
28
61
|
end
|
29
62
|
end
|
63
|
+
|
30
64
|
class Task
|
31
|
-
|
32
|
-
|
65
|
+
include Logging
|
66
|
+
|
67
|
+
def initialize opts
|
68
|
+
@opts = opts
|
33
69
|
end
|
70
|
+
|
34
71
|
def execute
|
35
|
-
@
|
72
|
+
raise ArgumentError, 'missing :exe' unless @opts.get :exe
|
73
|
+
raise ArgumentError, 'missing :files' unless @opts.get :files
|
74
|
+
@opts.get(:files).each do |dll|
|
75
|
+
raise ArgumentError, "could not find test dll '#{dll}' in dir #{FileUtils.pwd}" unless File.exists? dll
|
76
|
+
execute_tests_for dll
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
def execute_tests_for dll
|
82
|
+
handle_directory dll, @opts.get(:exe) do |dir, exe|
|
83
|
+
filename = File.basename dll
|
84
|
+
cmd = Albacore::TestRunner::Cmd.new dir, exe, @opts.get(:parameters, []), filename
|
85
|
+
cmd.execute
|
86
|
+
end
|
87
|
+
end
|
88
|
+
def handle_directory dll, exe, &block
|
89
|
+
if @opts.get(:copy_local)
|
90
|
+
Dir.mktmpdir 'alba-test' do |dir|
|
91
|
+
sut, runners = Paths.join(dir, 'sut').to_s, Paths.join(dir, 'runners').to_s
|
92
|
+
[sut, runners].each { |d| FileUtils.mkdir_p d }
|
93
|
+
|
94
|
+
sut_glob = Paths.join(File.dirname(dll), '*').as_unix.to_s
|
95
|
+
debug { "copying recursively from #{sut_glob} [test_runner #handle_directory]" }
|
96
|
+
FileUtils.cp_r(Dir.glob(sut_glob), sut, :verbose => true)
|
97
|
+
|
98
|
+
runners_glob = Paths.join(File.dirname(exe), '*').as_unix.to_s
|
99
|
+
debug { "copying the runners form #{runners_glob} [test_runner #handle_directory]" }
|
100
|
+
FileUtils.cp_r(Dir.glob(runners_glob), runners, :verbose => true)
|
101
|
+
|
102
|
+
# call back with the new paths
|
103
|
+
yield [sut, Paths.join(runners, File.basename(exe)).to_s]
|
104
|
+
end
|
105
|
+
else
|
106
|
+
yield [File.dirname(dll), exe]
|
107
|
+
end
|
36
108
|
end
|
37
109
|
end
|
38
110
|
end
|
@@ -22,28 +22,39 @@ module Albacore
|
|
22
22
|
#
|
23
23
|
def self.new *sym
|
24
24
|
ver = XSemVer::SemVer.find
|
25
|
-
|
26
|
-
|
25
|
+
ver.patch = (ENV['BUILD_NUMBER'] || ver.patch).to_i
|
26
|
+
version_data = versions(ver, &method(:commit_data))
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
# purely M.m.p format
|
35
|
-
ENV['FORMAL_VERSION'] = "#{ XSemVer::SemVer.new(ver.major, ver.minor, revision).format "%M.%m.%p"}"
|
36
|
-
|
37
|
-
body = proc {
|
38
|
-
Albacore.publish :build_version, OpenStruct.new(
|
39
|
-
:build_number => revision,
|
40
|
-
:build_version => ENV['BUILD_VERSION'],
|
41
|
-
:semver => ver,
|
42
|
-
:formal_version => ENV['FORMAL_VERSION']
|
43
|
-
)
|
44
|
-
}
|
28
|
+
Albacore.subscribe :build_version do |data|
|
29
|
+
ENV['BUILD_VERSION'] = data.build_version
|
30
|
+
ENV['NUGET_VERSION'] = data.nuget_version
|
31
|
+
ENV['FORMAL_VERSION'] = data.formal_version
|
32
|
+
ENV['LONG_VERSION'] = data.long_version
|
33
|
+
end
|
45
34
|
|
46
|
-
Albacore.define_task
|
35
|
+
Albacore.define_task(*sym) do
|
36
|
+
Albacore.publish :build_version, OpenStruct.new(version_data)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.versions semver, &commit_data
|
41
|
+
{
|
42
|
+
# just a monotonic inc
|
43
|
+
:build_number => semver.patch,
|
44
|
+
:semver => semver,
|
45
|
+
|
46
|
+
# purely M.m.p format
|
47
|
+
:formal_version => "#{ XSemVer::SemVer.new(semver.major, semver.minor, semver.patch).format "%M.%m.%p"}",
|
48
|
+
|
49
|
+
# four-numbers version, useful if you're dealing with COM/Windows
|
50
|
+
:long_version => "#{semver.format '%M.%m.%p'}.0",
|
51
|
+
|
52
|
+
# extensible number w/ git hash
|
53
|
+
:build_version => semver.format("%M.%m.%p%s") + ".#{yield[0]}",
|
54
|
+
|
55
|
+
# nuget (not full semver 2.0.0-rc.1 support) see http://nuget.codeplex.com/workitem/1796
|
56
|
+
:nuget_version => semver.format("%M.%m.%p%s")
|
57
|
+
}
|
47
58
|
end
|
48
59
|
|
49
60
|
# load the commit data
|
@@ -53,10 +64,10 @@ module Albacore
|
|
53
64
|
begin
|
54
65
|
commit = `git rev-parse --short HEAD`.chomp()[0,6]
|
55
66
|
git_date = `git log -1 --date=iso --pretty=format:%ad`
|
56
|
-
commit_date = DateTime.parse( git_date ).strftime("%Y-%m-%d %H
|
57
|
-
rescue
|
67
|
+
commit_date = DateTime.parse( git_date ).strftime("%Y-%m-%d %H:%M:%S")
|
68
|
+
rescue
|
58
69
|
commit = (ENV['BUILD_VCS_NUMBER'] || "000000")[0,6]
|
59
|
-
commit_date = Time.new.strftime("%Y-%m-%d %H
|
70
|
+
commit_date = Time.new.strftime("%Y-%m-%d %H:%M:%S")
|
60
71
|
end
|
61
72
|
[commit, commit_date]
|
62
73
|
end
|
@@ -5,39 +5,10 @@ require 'pathname'
|
|
5
5
|
require 'rake'
|
6
6
|
require 'albacore/logging'
|
7
7
|
require 'albacore/project'
|
8
|
+
require 'albacore/package'
|
9
|
+
require 'albacore/package_repo'
|
8
10
|
|
9
11
|
module Albacore::Tools
|
10
|
-
# a package repository is a location where the nugets or wraps are stored
|
11
|
-
class PackageRepo
|
12
|
-
include Logging
|
13
|
-
# initialize that package repository with a path to all the packages
|
14
|
-
def initialize path
|
15
|
-
@path = path
|
16
|
-
end
|
17
|
-
# find the latest package based on the package id
|
18
|
-
def find_latest pkg_id
|
19
|
-
trace "finding latest from #{@path}, id: #{pkg_id}"
|
20
|
-
sorted = Dir.glob(File.join(@path, "#{pkg_id}*/**/*.dll")) # find the latest
|
21
|
-
path = sorted.first
|
22
|
-
Package.new pkg_id, path
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
# a package encapsulates the properties of a set package with a
|
27
|
-
# distinct path, version and id
|
28
|
-
class Package
|
29
|
-
attr_reader :id, :path
|
30
|
-
def initialize id, path
|
31
|
-
@id = id
|
32
|
-
@path = path
|
33
|
-
end
|
34
|
-
def path
|
35
|
-
@path
|
36
|
-
end
|
37
|
-
def to_s
|
38
|
-
"Package[#{@path}]"
|
39
|
-
end
|
40
|
-
end
|
41
12
|
|
42
13
|
# a tuple of a package and a ref
|
43
14
|
class MatchedRef
|
@@ -46,7 +17,6 @@ module Albacore::Tools
|
|
46
17
|
@package, @ref = package, ref
|
47
18
|
end
|
48
19
|
end
|
49
|
-
|
50
20
|
|
51
21
|
module RestoreHintPaths
|
52
22
|
class Config
|
data/lib/albacore/version.rb
CHANGED
data/spec/asmver_spec.rb
CHANGED
@@ -5,15 +5,18 @@ include Albacore::Asmver
|
|
5
5
|
|
6
6
|
%w|Fs Vb Cpp Cs|.each do |lang|
|
7
7
|
require "albacore/task_types/asmver/#{lang.downcase}"
|
8
|
+
|
8
9
|
describe "the #{lang} engine" do
|
9
10
|
subject do
|
10
11
|
"Albacore::Asmver::#{lang}".split('::').inject(Object) { |o, c| o.const_get c }.new
|
11
12
|
end
|
13
|
+
|
12
14
|
%w|build_attribute build_named_parameters build_positional_parameters build_using_statement build_comment namespace_end namespace_start|.each do |m|
|
13
15
|
it "should have a public API ##{m.to_s}" do
|
14
16
|
should respond_to(:"#{m}")
|
15
17
|
end
|
16
18
|
end
|
19
|
+
|
17
20
|
describe 'when building version attribute' do
|
18
21
|
let :version do
|
19
22
|
subject.build_attribute 'AssemblyVersion', '0.2.3'
|
@@ -28,6 +31,7 @@ include Albacore::Asmver
|
|
28
31
|
version.should include('assembly: ')
|
29
32
|
end
|
30
33
|
end
|
34
|
+
|
31
35
|
describe 'when building using statement' do
|
32
36
|
let :using do
|
33
37
|
subject.build_using_statement 'System.Runtime.CompilerServices'
|
@@ -36,6 +40,7 @@ include Albacore::Asmver
|
|
36
40
|
using.should =~ /System.{1,2}Runtime.{1,2}CompilerServices/
|
37
41
|
end
|
38
42
|
end
|
43
|
+
|
39
44
|
describe 'when building named parameters' do
|
40
45
|
let :plist do
|
41
46
|
subject.build_named_parameters milk_cows: true, birds_fly: false, hungry_server: 'sad server'
|
@@ -44,6 +49,7 @@ include Albacore::Asmver
|
|
44
49
|
plist.should =~ /milk_cows .{1,2} true. birds_fly .{1,2} false. hungry_server .{1,2} "sad server"/
|
45
50
|
end
|
46
51
|
end
|
52
|
+
|
47
53
|
describe 'when building positional parameters' do
|
48
54
|
let :plist do
|
49
55
|
subject.build_positional_parameters ((%w|a b c hello|) << false)
|
@@ -52,6 +58,7 @@ include Albacore::Asmver
|
|
52
58
|
plist.should eq('"a", "b", "c", "hello", false')
|
53
59
|
end
|
54
60
|
end
|
61
|
+
|
55
62
|
describe 'when building single line comment' do
|
56
63
|
let :comment do
|
57
64
|
subject.build_comment 'this is my comment'
|
@@ -70,6 +77,7 @@ include Albacore::Asmver
|
|
70
77
|
comment.should =~ expected
|
71
78
|
end
|
72
79
|
end
|
80
|
+
|
73
81
|
describe 'when building a multi-line comment' do
|
74
82
|
let :comment do
|
75
83
|
subject.build_comment %{This is a very interesting comment
|
@@ -97,8 +105,28 @@ on many lines}
|
|
97
105
|
comment.should eq(expected)
|
98
106
|
end
|
99
107
|
end
|
108
|
+
|
109
|
+
describe 'when building namespace' do
|
110
|
+
let :ns do
|
111
|
+
subject.send :namespace_start, 'This.Ns.Here'
|
112
|
+
end
|
113
|
+
it 'should include the string verbatim' do
|
114
|
+
ns =~ /This\.Ns\.Here/
|
115
|
+
end
|
116
|
+
let :expected do
|
117
|
+
{ 'Fs' => %r{namespace This\.Ns\.Here},
|
118
|
+
'Vb' => %r{^$},
|
119
|
+
'Cs' => %r{^$},
|
120
|
+
'Cpp' => %r{namespace This::Ns::Here \{}
|
121
|
+
}[lang]
|
122
|
+
end
|
123
|
+
it 'should include the correct syntax for single line comment' do
|
124
|
+
ns.should =~ expected
|
125
|
+
end
|
126
|
+
end
|
100
127
|
end
|
101
128
|
end
|
129
|
+
|
102
130
|
describe FileGenerator do
|
103
131
|
subject do FileGenerator.new(Fs.new, 'MyNamespace.Here', {}) end
|
104
132
|
it do
|
@@ -108,6 +136,7 @@ describe FileGenerator do
|
|
108
136
|
FileGenerator.new(Fs.new, '', {})
|
109
137
|
end
|
110
138
|
end
|
139
|
+
|
111
140
|
describe FileGenerator, 'when generating F# file' do
|
112
141
|
before :all do
|
113
142
|
@out = StringIO.new
|
@@ -153,6 +182,7 @@ describe FileGenerator, 'when generating F# file' do
|
|
153
182
|
generated.should =~ /\(\)(\r\n?|\n)$/m
|
154
183
|
end
|
155
184
|
end
|
185
|
+
|
156
186
|
describe FileGenerator do
|
157
187
|
before :all do
|
158
188
|
@out = StringIO.new
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'albacore/package'
|
2
|
+
|
3
|
+
describe ::Albacore::Package do
|
4
|
+
subject do
|
5
|
+
Package.new 'NLog', 'path/to/asm.dll'
|
6
|
+
end
|
7
|
+
it do
|
8
|
+
should respond_to :id
|
9
|
+
end
|
10
|
+
it do
|
11
|
+
should respond_to :path
|
12
|
+
end
|
13
|
+
it do
|
14
|
+
should respond_to :to_s
|
15
|
+
end
|
16
|
+
it 'has id' do
|
17
|
+
subject.id.should eq 'NLog'
|
18
|
+
end
|
19
|
+
it 'has path' do
|
20
|
+
subject.path.should eq 'path/to/asm.dll'
|
21
|
+
end
|
22
|
+
it 'formats with #to_s' do
|
23
|
+
subject.to_s.should eq 'Package[path/to/asm.dll]'
|
24
|
+
end
|
25
|
+
end
|
data/spec/project_spec.rb
CHANGED
@@ -45,9 +45,11 @@ describe Albacore::Project, "when loading packages.config" do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
describe Albacore::Project, "when reading project file" do
|
48
|
+
def project_path
|
49
|
+
File.expand_path('../testdata/Project/Project.fsproj', __FILE__)
|
50
|
+
end
|
48
51
|
subject do
|
49
|
-
|
50
|
-
Albacore::Project.new(p)
|
52
|
+
Albacore::Project.new project_path
|
51
53
|
end
|
52
54
|
let :library1 do
|
53
55
|
subject.included_files.find { |p| p.include == 'Library1.fs' }
|
@@ -55,7 +57,42 @@ describe Albacore::Project, "when reading project file" do
|
|
55
57
|
it "should contain library1" do
|
56
58
|
library1.should_not be_nil
|
57
59
|
end
|
60
|
+
|
61
|
+
describe 'public API' do
|
62
|
+
it do
|
63
|
+
subject.should respond_to(:name)
|
64
|
+
end
|
65
|
+
it do
|
66
|
+
subject.should respond_to(:asmname)
|
67
|
+
end
|
68
|
+
it do
|
69
|
+
subject.should respond_to(:version)
|
70
|
+
end
|
71
|
+
it do
|
72
|
+
subject.should respond_to(:authors)
|
73
|
+
end
|
74
|
+
it 'should have five referenced assemblies' do
|
75
|
+
subject.find_refs.length.should eq(5)
|
76
|
+
end
|
77
|
+
it 'knows about referenced packages' do
|
78
|
+
subject.should respond_to(:declared_packages)
|
79
|
+
end
|
80
|
+
it 'knows about referenced projects' do
|
81
|
+
subject.should respond_to(:declared_projects)
|
82
|
+
end
|
83
|
+
it 'should have three referenced packages' do
|
84
|
+
expected = %w|Intelliplan.Util Newtonsoft.Json NLog|
|
85
|
+
subject.find_packages.map(&:id).should eq(expected)
|
86
|
+
end
|
87
|
+
|
88
|
+
# TODO: check whether output is DLL or EXE or something else
|
89
|
+
it 'should know its output dll' do
|
90
|
+
should respond_to :output_dll
|
91
|
+
subject.output_dll('Release').should eq(Paths.join 'bin', 'Release', 'Project.dll')
|
92
|
+
end
|
93
|
+
end
|
58
94
|
end
|
95
|
+
|
59
96
|
describe Albacore::Project, 'when given a PathnameWrap' do
|
60
97
|
it 'should allow argument of PathnameWrap' do
|
61
98
|
require 'albacore/paths'
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'albacore'
|
2
2
|
require 'albacore/tasks/versionizer'
|
3
|
+
require 'xsemver'
|
3
4
|
|
4
5
|
describe 'adding versionizer to a class' do
|
5
6
|
class VersioniserUsage
|
@@ -15,3 +16,49 @@ describe 'adding versionizer to a class' do
|
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
19
|
+
|
20
|
+
describe 'finding build versions' do
|
21
|
+
subject do
|
22
|
+
ver = XSemVer::SemVer.new(1, 2, 3, 'deadbeef')
|
23
|
+
::Albacore::Tasks::Versionizer.versions ver do
|
24
|
+
['123456', '2014-02-27 16:55:55']
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should return a hash' do
|
29
|
+
subject.should be_a(Hash)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should return the correct build number' do
|
33
|
+
subject[:build_number].should eq(3)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should return the same semver' do
|
37
|
+
subject[:semver].should eq(::XSemVer::SemVer.new(1, 2, 3, 'deadbeef'))
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should return the correct long_version' do
|
41
|
+
subject[:long_version].should eq('1.2.3.0')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should return the correct formal_version' do
|
45
|
+
subject[:formal_version].should eq('1.2.3')
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should return a build_version' do
|
49
|
+
subject[:build_version].should_not be_nil
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should return a build_version with correct hash/special substring' do
|
53
|
+
subject[:build_version].should eq('1.2.3-deadbeef.123456')
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should return a nuget_version' do
|
57
|
+
subject[:nuget_version].should_not be_nil
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should return a proper semver nuget version' do
|
61
|
+
subject[:nuget_version].should eq('1.2.3-deadbeef')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'albacore/task_types/test_runner'
|
2
|
+
require 'map'
|
3
|
+
|
4
|
+
describe ::Albacore::TestRunner::Config do
|
5
|
+
it do
|
6
|
+
should respond_to :opts
|
7
|
+
end
|
8
|
+
it do
|
9
|
+
should respond_to :files=
|
10
|
+
end
|
11
|
+
it do
|
12
|
+
should_not respond_to :files
|
13
|
+
end
|
14
|
+
it do
|
15
|
+
should respond_to :copy_local
|
16
|
+
end
|
17
|
+
it do
|
18
|
+
should respond_to :exe=
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe ::Albacore::TestRunner::Cmd do
|
23
|
+
subject do
|
24
|
+
::Albacore::TestRunner::Cmd.new 'work_dir', 'run-tests.exe', %w[params go here], 'lib.tests.dll'
|
25
|
+
end
|
26
|
+
it do
|
27
|
+
should respond_to :execute
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe ::Albacore::TestRunner::Task do
|
32
|
+
subject do
|
33
|
+
::Albacore::TestRunner::Task.new Map.new
|
34
|
+
end
|
35
|
+
it do
|
36
|
+
should respond_to :execute
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: albacore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.rc.
|
4
|
+
version: 2.0.0.rc.8
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-03-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -124,22 +124,6 @@ dependencies:
|
|
124
124
|
- - ~>
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '1.6'
|
127
|
-
- !ruby/object:Gem::Dependency
|
128
|
-
name: rubyzip
|
129
|
-
requirement: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
|
-
requirements:
|
132
|
-
- - '='
|
133
|
-
- !ruby/object:Gem::Version
|
134
|
-
version: 0.9.9
|
135
|
-
type: :runtime
|
136
|
-
prerelease: false
|
137
|
-
version_requirements: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
|
-
requirements:
|
140
|
-
- - '='
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
version: 0.9.9
|
143
127
|
- !ruby/object:Gem::Dependency
|
144
128
|
name: rubygems-tasks
|
145
129
|
requirement: !ruby/object:Gem::Requirement
|
@@ -205,6 +189,8 @@ files:
|
|
205
189
|
- lib/albacore/facts.rb
|
206
190
|
- lib/albacore/logging.rb
|
207
191
|
- lib/albacore/nuget_model.rb
|
192
|
+
- lib/albacore/package.rb
|
193
|
+
- lib/albacore/package_repo.rb
|
208
194
|
- lib/albacore/paths.rb
|
209
195
|
- lib/albacore/project.rb
|
210
196
|
- lib/albacore/rake_overrides.rb
|
@@ -242,6 +228,8 @@ files:
|
|
242
228
|
- spec/nuget_model_spec.rb
|
243
229
|
- spec/nugets_pack_spec.rb
|
244
230
|
- spec/nugets_restore_spec.rb
|
231
|
+
- spec/package_repo_spec.rb
|
232
|
+
- spec/package_spec.rb
|
245
233
|
- spec/paths_spec.rb
|
246
234
|
- spec/project_spec.rb
|
247
235
|
- spec/projectlint/added_but_not_on_filesystem/aproject.csproj
|
@@ -275,6 +263,7 @@ files:
|
|
275
263
|
- spec/support/returnstatus/returnstatus.pdb
|
276
264
|
- spec/support/sh_interceptor.rb
|
277
265
|
- spec/tasks/versionizer_spec.rb
|
266
|
+
- spec/test_runner_spec.rb
|
278
267
|
- spec/testdata/.gitignore
|
279
268
|
- spec/testdata/DebugProject/.gitignore
|
280
269
|
- spec/testdata/DebugProject/Degbu.fsproj
|
@@ -327,7 +316,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
327
316
|
version: '0'
|
328
317
|
segments:
|
329
318
|
- 0
|
330
|
-
hash:
|
319
|
+
hash: 3238636988153789761
|
331
320
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
332
321
|
none: false
|
333
322
|
requirements:
|
@@ -354,6 +343,8 @@ test_files:
|
|
354
343
|
- spec/nuget_model_spec.rb
|
355
344
|
- spec/nugets_pack_spec.rb
|
356
345
|
- spec/nugets_restore_spec.rb
|
346
|
+
- spec/package_repo_spec.rb
|
347
|
+
- spec/package_spec.rb
|
357
348
|
- spec/paths_spec.rb
|
358
349
|
- spec/project_spec.rb
|
359
350
|
- spec/projectlint/added_but_not_on_filesystem/aproject.csproj
|
@@ -387,6 +378,7 @@ test_files:
|
|
387
378
|
- spec/support/returnstatus/returnstatus.pdb
|
388
379
|
- spec/support/sh_interceptor.rb
|
389
380
|
- spec/tasks/versionizer_spec.rb
|
381
|
+
- spec/test_runner_spec.rb
|
390
382
|
- spec/testdata/.gitignore
|
391
383
|
- spec/testdata/DebugProject/.gitignore
|
392
384
|
- spec/testdata/DebugProject/Degbu.fsproj
|