albacore 2.0.0.rc.7 → 2.0.0.rc.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.
- 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
|