rake-funnel 0.21.2 → 0.22.0
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +5 -0
- data/lib/rake/funnel/integration/progress_report.rb +1 -1
- data/lib/rake/funnel/integration/sync_output.rb +1 -1
- data/lib/rake/funnel/integration/teamcity/progress_report.rb +2 -6
- data/lib/rake/funnel/support/msbuild/build_tool.rb +36 -13
- data/lib/rake/funnel/tasks/msbuild.rb +1 -1
- data/lib/rake/funnel/version.rb +1 -1
- data/rake-funnel.gemspec +3 -2
- data/spec/rake/funnel/extensions/common_path_spec.rb +3 -2
- data/spec/rake/funnel/extensions/rexml_spec.rb +1 -3
- data/spec/rake/funnel/integration/sync_output_spec.rb +4 -4
- data/spec/rake/funnel/integration/teamcity/nunit_plugin_spec.rb +1 -3
- data/spec/rake/funnel/integration/teamcity/progress_report_spec.rb +9 -11
- data/spec/rake/funnel/integration/teamcity/service_messages_spec.rb +1 -3
- data/spec/rake/funnel/integration/teamcity/teamcity_spec.rb +1 -3
- data/spec/rake/funnel/support/argument_mapper/styles/msdeploy_spec.rb +1 -3
- data/spec/rake/funnel/support/argument_mapper/styles/nunit_spec.rb +1 -3
- data/spec/rake/funnel/support/assembly_version_writer_spec.rb +1 -5
- data/spec/rake/funnel/support/internal/finder_spec.rb +1 -3
- data/spec/rake/funnel/support/internal/instantiate_symbol_spec.rb +1 -3
- data/spec/rake/funnel/support/mapper_spec.rb +3 -3
- data/spec/rake/funnel/support/msbuild/build_tool_spec.rb +126 -37
- data/spec/rake/funnel/support/msdeploy/registry_patch_spec.rb +1 -3
- data/spec/rake/funnel/support/timing/report_spec.rb +6 -6
- data/spec/rake/funnel/tasks/msbuild_spec.rb +1 -3
- data/spec/rake/funnel/tasks/msdeploy_spec.rb +1 -3
- data/spec/rake/funnel/tasks/nunit_spec.rb +1 -3
- data/spec/rake/funnel/tasks/timing_spec.rb +5 -5
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ba6054ccf746282d7b18f44405a4a1f24e3f2dabc36dfc1ce5b8a5fd90bbc9b1
|
4
|
+
data.tar.gz: ad1ba7b758b76396150182661dcf4936b133f3b52007e2ceb582dd0339e9af7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51eaeeef60d39328f4a0b6ef35b66560b5d5f0b8d61291282aae964bffcd4043d22432dd261d5879a8324535058f2284fc680b7b852277d5dc761f0abb91213a
|
7
|
+
data.tar.gz: afe151343b40f3c2510a575140c4a42df399196d58e98f6ef4e88c199ea6b1e7138575cc43e2fa962299b4abfaf5994791737926a74f2d5f59cec9d74e6b066f
|
data/CHANGELOG.md
ADDED
@@ -46,7 +46,7 @@ module Rake
|
|
46
46
|
error = nil
|
47
47
|
begin
|
48
48
|
old_execute.bind(self).call(args)
|
49
|
-
rescue => e # rubocop:disable
|
49
|
+
rescue => e # rubocop:disable Style/RescueStandardError
|
50
50
|
error = e
|
51
51
|
ensure
|
52
52
|
context.finished.call(self, args, error) if context.finished
|
@@ -12,17 +12,13 @@ module Rake
|
|
12
12
|
task_starting do |task, _args|
|
13
13
|
next unless TeamCity.running?
|
14
14
|
|
15
|
-
unless TeamCity.rake_runner?
|
16
|
-
ServiceMessages.block_opened(name: task.name)
|
17
|
-
end
|
15
|
+
ServiceMessages.block_opened(name: task.name) unless TeamCity.rake_runner?
|
18
16
|
end
|
19
17
|
|
20
18
|
task_finished do |task, _args, error|
|
21
19
|
next unless TeamCity.running?
|
22
20
|
|
23
|
-
if error.respond_to?(:inner_exception)
|
24
|
-
error = error.inner_exception
|
25
|
-
end
|
21
|
+
error = error.inner_exception if error.respond_to?(:inner_exception)
|
26
22
|
|
27
23
|
ServiceMessages.build_problem(description: error.message[0..4000 - 1]) if error
|
28
24
|
|
@@ -7,41 +7,64 @@ module Rake
|
|
7
7
|
class BuildTool
|
8
8
|
class << self
|
9
9
|
def find
|
10
|
-
|
10
|
+
vswhere ||
|
11
|
+
from_registry ||
|
12
|
+
mono ||
|
13
|
+
raise('No compatible MSBuild build tool was found')
|
11
14
|
end
|
12
15
|
|
13
16
|
private
|
14
17
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
raise "Could not determine mono version: #{status}" unless status.success?
|
21
|
-
rescue Errno::ENOENT
|
22
|
-
raise 'mono is not installed'
|
18
|
+
def mono
|
19
|
+
out, status = Open3.capture2('mono', '--version')
|
20
|
+
unless status.success?
|
21
|
+
warn "Could not determine mono version: #{status}"
|
22
|
+
return nil
|
23
23
|
end
|
24
24
|
|
25
25
|
return 'msbuild'.freeze if out[/^Mono JIT compiler version ([\d\.]+)/, 1] >= '5.0'
|
26
26
|
|
27
27
|
'xbuild'.freeze
|
28
|
+
rescue Errno::ENOENT
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def vswhere # rubocop:disable Metrics/MethodLength
|
33
|
+
# -products * is required.
|
34
|
+
# https://github.com/Microsoft/vswhere/issues/61#issuecomment-298691077
|
35
|
+
args = %w(vswhere.exe
|
36
|
+
-products *
|
37
|
+
-latest
|
38
|
+
-requires Microsoft.Component.MSBuild
|
39
|
+
-property installationPath)
|
40
|
+
|
41
|
+
path, status = Open3.capture2(*args)
|
42
|
+
unless status.success?
|
43
|
+
warn "vswhere failed: #{status}"
|
44
|
+
return nil
|
45
|
+
end
|
46
|
+
|
47
|
+
Dir[File.join(Rake::Win32.normalize(path.strip),
|
48
|
+
'MSBuild/*/Bin/MSBuild.exe')]
|
49
|
+
.find { |e| File.file?(e) }
|
50
|
+
rescue Errno::ENOENT
|
51
|
+
nil
|
28
52
|
end
|
29
53
|
|
30
54
|
KEY = 'SOFTWARE\Microsoft\MSBuild\ToolsVersions'.freeze
|
55
|
+
REGISTRY_VERSIONS = %w(14.0 12.0 4.0 3.5 2.0).freeze
|
31
56
|
|
32
57
|
def from_registry
|
33
58
|
return nil unless require_registry
|
34
59
|
|
35
|
-
|
60
|
+
candidates = REGISTRY_VERSIONS.map do |version|
|
36
61
|
version_key(version) do |reg|
|
37
62
|
candidate = File.join(reg['MSBuildToolsPath'] || '', 'msbuild.exe')
|
38
63
|
next candidate if File.exist?(candidate)
|
39
64
|
end
|
40
65
|
end
|
41
|
-
end
|
42
66
|
|
43
|
-
|
44
|
-
%w(14.0 12.0 4.0 3.5 2.0)
|
67
|
+
candidates.compact.first
|
45
68
|
end
|
46
69
|
|
47
70
|
def require_registry
|
data/lib/rake/funnel/version.rb
CHANGED
data/rake-funnel.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
lib = File.expand_path('
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
require 'rake/funnel/version'
|
4
4
|
|
@@ -13,7 +13,8 @@ Gem::Specification.new do |s| # rubocop:disable Metrics/BlockLength
|
|
13
13
|
s.description = 'A standardized build pipeline'
|
14
14
|
s.summary = 'A build pipeline targeted at .NET projects. Supports environment configuration and makes invoking .NET-related tasks easier.' # rubocop:disable Metrics/LineLength
|
15
15
|
|
16
|
-
|
16
|
+
# We support Ruby 2.0 whereas rubocop does not.
|
17
|
+
s.required_ruby_version = '>= 2.0.0' # rubocop:disable Gemspec/RequiredRubyVersion
|
17
18
|
|
18
19
|
s.add_dependency 'configatron', '~> 4.5'
|
19
20
|
s.add_dependency 'rake', '>= 10.4', '< 13'
|
@@ -1,7 +1,7 @@
|
|
1
1
|
describe Rake::Funnel::Extensions::CommonPath do
|
2
2
|
describe 'Manual debugging test case' do
|
3
3
|
it 'should work' do
|
4
|
-
expect(%w(/common/one /com/two).common_path).to
|
4
|
+
expect(%w(/common/one /com/two).common_path).to be_truthy
|
5
5
|
|
6
6
|
skip('for manual testing only')
|
7
7
|
end
|
@@ -12,7 +12,8 @@ describe Rake::Funnel::Extensions::CommonPath do
|
|
12
12
|
input = FileList[File.join(File.dirname(__FILE__), '**/*')]
|
13
13
|
duped = input.dup
|
14
14
|
|
15
|
-
expect(input.common_path).to
|
15
|
+
expect(input.common_path).to be_truthy
|
16
|
+
|
16
17
|
expect(input).to match_array(duped)
|
17
18
|
end
|
18
19
|
end
|
@@ -3,10 +3,10 @@ describe Rake::Funnel::Integration::SyncOutput do
|
|
3
3
|
before do
|
4
4
|
allow($stdout).to receive(:sync=)
|
5
5
|
allow($stderr).to receive(:sync=)
|
6
|
-
|
7
|
-
expect(subject).to be # rubocop:disable RSpec/ExpectInHook
|
8
6
|
end
|
9
7
|
|
8
|
+
subject! { described_class.new }
|
9
|
+
|
10
10
|
it 'should immediately flush $stdout' do
|
11
11
|
expect($stdout).to have_received(:sync=).with(true)
|
12
12
|
end
|
@@ -22,10 +22,10 @@ describe Rake::Funnel::Integration::SyncOutput do
|
|
22
22
|
allow($stderr).to receive(:sync=).and_raise('$stderr.sync not supported')
|
23
23
|
|
24
24
|
allow(Rake).to receive(:rake_output_message)
|
25
|
-
|
26
|
-
expect(subject).to be # rubocop:disable RSpec/ExpectInHook
|
27
25
|
end
|
28
26
|
|
27
|
+
subject! { described_class.new }
|
28
|
+
|
29
29
|
it 'should log the error for $stdout' do
|
30
30
|
expect(Rake).to have_received(:rake_output_message).with(/Failed.*\$stdout/)
|
31
31
|
end
|
@@ -1,6 +1,4 @@
|
|
1
|
-
# rubocop:disable RSpec/FilePath
|
2
|
-
|
3
|
-
describe Rake::Funnel::Integration::TeamCity::NUnitPlugin do
|
1
|
+
describe Rake::Funnel::Integration::TeamCity::NUnitPlugin do # rubocop:disable RSpec/FilePath
|
4
2
|
before do
|
5
3
|
allow(ENV).to receive(:[]).with(described_class::ENV_VAR).and_return(env_var)
|
6
4
|
allow(Rake::Funnel::Support::Which).to receive(:which).and_return(which)
|
@@ -1,6 +1,4 @@
|
|
1
|
-
# rubocop:disable RSpec/FilePath
|
2
|
-
|
3
|
-
describe Rake::Funnel::Integration::TeamCity::ProgressReport do
|
1
|
+
describe Rake::Funnel::Integration::TeamCity::ProgressReport do # rubocop:disable RSpec/FilePath
|
4
2
|
include Rake::DSL
|
5
3
|
|
6
4
|
let(:teamcity_running?) { false }
|
@@ -26,7 +24,7 @@ describe Rake::Funnel::Integration::TeamCity::ProgressReport do
|
|
26
24
|
subject.disable!
|
27
25
|
end
|
28
26
|
|
29
|
-
shared_examples
|
27
|
+
shared_examples 'block report' do
|
30
28
|
it 'should write block start' do
|
31
29
|
expect(Rake::Funnel::Integration::TeamCity::ServiceMessages).to \
|
32
30
|
have_received(:block_opened).with(name: 'task')
|
@@ -38,7 +36,7 @@ describe Rake::Funnel::Integration::TeamCity::ProgressReport do
|
|
38
36
|
end
|
39
37
|
end
|
40
38
|
|
41
|
-
shared_examples
|
39
|
+
shared_examples 'no block report' do
|
42
40
|
it 'should not write block start' do
|
43
41
|
expect(Rake::Funnel::Integration::TeamCity::ServiceMessages).not_to \
|
44
42
|
have_received(:block_opened)
|
@@ -63,20 +61,20 @@ describe Rake::Funnel::Integration::TeamCity::ProgressReport do
|
|
63
61
|
end
|
64
62
|
|
65
63
|
context 'not on TeamCity' do
|
66
|
-
it_behaves_like
|
64
|
+
it_behaves_like 'no block report'
|
67
65
|
end
|
68
66
|
|
69
67
|
context 'on TeamCity' do
|
70
68
|
let(:teamcity_running?) { true }
|
71
69
|
|
72
70
|
context 'without rake runner' do
|
73
|
-
it_behaves_like
|
71
|
+
it_behaves_like 'block report'
|
74
72
|
end
|
75
73
|
|
76
74
|
context 'with rake runner' do
|
77
75
|
let(:teamcity_rake_runner?) { true }
|
78
76
|
|
79
|
-
it_behaves_like
|
77
|
+
it_behaves_like 'no block report'
|
80
78
|
end
|
81
79
|
end
|
82
80
|
end
|
@@ -111,7 +109,7 @@ describe Rake::Funnel::Integration::TeamCity::ProgressReport do
|
|
111
109
|
end
|
112
110
|
|
113
111
|
context 'not on TeamCity' do
|
114
|
-
it_behaves_like
|
112
|
+
it_behaves_like 'no block report'
|
115
113
|
|
116
114
|
it 'should not swallow the error' do
|
117
115
|
expect(@raised_error).to be_a_kind_of(SpecificError) # rubocop:disable RSpec/InstanceVariable
|
@@ -141,7 +139,7 @@ describe Rake::Funnel::Integration::TeamCity::ProgressReport do
|
|
141
139
|
end
|
142
140
|
|
143
141
|
context 'without rake runner' do
|
144
|
-
it_behaves_like
|
142
|
+
it_behaves_like 'block report'
|
145
143
|
|
146
144
|
it 'should report the error as a build problem' do
|
147
145
|
expect(Rake::Funnel::Integration::TeamCity::ServiceMessages).to \
|
@@ -160,7 +158,7 @@ describe Rake::Funnel::Integration::TeamCity::ProgressReport do
|
|
160
158
|
have_received(:build_problem).with(description: 'inner message')
|
161
159
|
end
|
162
160
|
|
163
|
-
it_behaves_like
|
161
|
+
it_behaves_like 'no block report'
|
164
162
|
end
|
165
163
|
end
|
166
164
|
end
|
@@ -1,6 +1,4 @@
|
|
1
|
-
# rubocop:disable RSpec/FilePath
|
2
|
-
|
3
|
-
describe Rake::Funnel::Integration::TeamCity::ServiceMessages do
|
1
|
+
describe Rake::Funnel::Integration::TeamCity::ServiceMessages do # rubocop:disable RSpec/FilePath
|
4
2
|
before do
|
5
3
|
allow(Rake::Funnel::Integration::TeamCity).to receive(:running?).and_return(teamcity_running?)
|
6
4
|
allow($stdout).to receive(:puts)
|
@@ -1,6 +1,4 @@
|
|
1
|
-
# rubocop:disable RSpec/FilePath
|
2
|
-
|
3
|
-
describe Rake::Funnel::Integration::TeamCity do
|
1
|
+
describe Rake::Funnel::Integration::TeamCity do # rubocop:disable RSpec/FilePath
|
4
2
|
describe 'runner detection' do
|
5
3
|
before do
|
6
4
|
allow(ENV).to receive(:include?).with(described_class::PROJECT_ENV_VAR).and_return(teamcity_running?)
|
@@ -1,6 +1,4 @@
|
|
1
|
-
# rubocop:disable RSpec/FilePath
|
2
|
-
|
3
|
-
describe Rake::Funnel::Support::Mapper::Styles::MSDeploy do
|
1
|
+
describe Rake::Funnel::Support::Mapper::Styles::MSDeploy do # rubocop:disable RSpec/FilePath
|
4
2
|
subject { Rake::Funnel::Support::Mapper.new(:MSDeploy) }
|
5
3
|
|
6
4
|
describe 'no arguments' do
|
@@ -1,8 +1,6 @@
|
|
1
|
-
# rubocop:disable RSpec/FilePath
|
2
|
-
|
3
1
|
require 'tmpdir'
|
4
2
|
|
5
|
-
describe Rake::Funnel::Support::Finder do
|
3
|
+
describe Rake::Funnel::Support::Finder do # rubocop:disable RSpec/FilePath
|
6
4
|
let(:pattern) { %W(#{temp_dir}/**/*.sln #{temp_dir}/**/*.??proj) }
|
7
5
|
let(:generate) { [] }
|
8
6
|
let(:temp_dir) { Dir.mktmpdir }
|
@@ -17,7 +17,7 @@ describe Rake::Funnel::Support::Mapper do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
class CustomMapper
|
20
|
-
def generate_from(
|
20
|
+
def generate_from(_ignored)
|
21
21
|
[
|
22
22
|
['-', 'switch'],
|
23
23
|
['-', :some_switch],
|
@@ -40,7 +40,7 @@ describe Rake::Funnel::Support::Mapper do
|
|
40
40
|
describe 'mapper style' do
|
41
41
|
context 'default mapper' do
|
42
42
|
it 'should use default mapper' do
|
43
|
-
expect(described_class.new).to
|
43
|
+
expect(described_class.new).to be_kind_of(described_class)
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -59,7 +59,7 @@ describe Rake::Funnel::Support::Mapper do
|
|
59
59
|
|
60
60
|
context 'custom mapper' do
|
61
61
|
it 'should take custom mapper instance' do
|
62
|
-
expect(described_class.new(CustomMapper.new)).to
|
62
|
+
expect(described_class.new(CustomMapper.new)).to be_kind_of(described_class)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -1,75 +1,155 @@
|
|
1
|
-
# rubocop:disable RSpec/FilePath
|
2
|
-
|
3
1
|
require 'ostruct'
|
4
2
|
|
5
|
-
describe Rake::Funnel::Support::MSBuild::BuildTool do
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
describe Rake::Funnel::Support::MSBuild::BuildTool do # rubocop:disable RSpec/FilePath
|
4
|
+
context 'vswhere' do
|
5
|
+
let(:vswhere_args) do
|
6
|
+
%w(vswhere.exe -products * -latest -requires Microsoft.Component.MSBuild -property installationPath)
|
7
|
+
end
|
8
|
+
|
9
|
+
before do
|
10
|
+
allow(described_class).to receive(:require).with('win32/registry').and_raise(LoadError)
|
11
|
+
allow(Open3).to receive(:capture2).with('mono', any_args).and_raise(Errno::ENOENT)
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'not installed' do
|
15
|
+
before do
|
16
|
+
allow(Open3).to receive(:capture2).with(*vswhere_args).and_raise(Errno::ENOENT)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'finds nothing' do
|
20
|
+
expect { described_class.find }.to raise_error('No compatible MSBuild build tool was found')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'installed' do
|
25
|
+
before do
|
26
|
+
allow(Open3).to receive(:capture2).with(*vswhere_args).and_return(vswhere_path)
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'fails' do
|
30
|
+
let(:vswhere_path) do
|
31
|
+
[
|
32
|
+
'vswhere crashed',
|
33
|
+
OpenStruct.new(success?: false)
|
34
|
+
]
|
35
|
+
end
|
9
36
|
|
10
|
-
|
11
|
-
|
12
|
-
|
37
|
+
before do
|
38
|
+
allow(described_class).to receive(:warn)
|
39
|
+
end
|
13
40
|
|
41
|
+
it 'finds nothing' do
|
42
|
+
expect { described_class.find }.to raise_error('No compatible MSBuild build tool was found')
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'warns about the crash' do
|
46
|
+
described_class.find rescue nil # rubocop:disable Style/RescueModifier
|
47
|
+
expect(described_class).to have_received(:warn).with(/^vswhere failed:/)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe 'MSBuild executable' do
|
52
|
+
let(:vswhere_path) do
|
53
|
+
[
|
54
|
+
'c:\path',
|
55
|
+
OpenStruct.new(success?: true)
|
56
|
+
]
|
57
|
+
end
|
58
|
+
|
59
|
+
before do
|
60
|
+
allow(Dir).to receive(:[]).with('c:/path/MSBuild/*/Bin/MSBuild.exe')
|
61
|
+
.and_return(['c:/path/msbuild.exe'])
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'exists' do
|
65
|
+
before do
|
66
|
+
allow(File).to receive(:file?).with('c:/path/msbuild.exe').and_return(true)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'finds msbuild.exe' do
|
70
|
+
expect(described_class.find).to eq('c:/path/msbuild.exe')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'does not exist' do
|
75
|
+
before do
|
76
|
+
allow(File).to receive(:exist?).with('c:/path/msbuild.exe').and_return(false)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'finds nothing' do
|
80
|
+
expect { described_class.find }.to raise_error('No compatible MSBuild build tool was found')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'Registry',
|
88
|
+
skip: ('Windows Registry not available on this platform' unless defined?(::Win32::Registry)) do
|
14
89
|
before do
|
15
90
|
allow(::Win32::Registry::HKEY_LOCAL_MACHINE).to receive(:open).and_yield('MSBuildToolsPath' => 'path')
|
16
91
|
end
|
17
92
|
|
18
|
-
it '
|
19
|
-
described_class.find
|
93
|
+
it 'searches the registry for known MSBuild versions' do
|
94
|
+
described_class.find rescue nil # rubocop:disable Style/RescueModifier
|
20
95
|
expect(::Win32::Registry::HKEY_LOCAL_MACHINE).to have_received(:open).at_least(:once)
|
21
96
|
end
|
22
97
|
|
23
|
-
context 'key not found' do
|
98
|
+
context 'Registry key not found' do
|
24
99
|
before do
|
25
100
|
allow(::Win32::Registry::HKEY_LOCAL_MACHINE).to receive(:open).and_raise(::Win32::Registry::Error.new(3))
|
26
101
|
end
|
27
102
|
|
28
103
|
it 'finds nothing' do
|
29
|
-
expect
|
104
|
+
expect { described_class.find }.to raise_error('No compatible MSBuild build tool was found')
|
30
105
|
end
|
31
106
|
end
|
32
107
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
108
|
+
describe 'MSBuild executable' do
|
109
|
+
context 'exists' do
|
110
|
+
before do
|
111
|
+
allow(File).to receive(:exist?).with('path/msbuild.exe').and_return(true)
|
112
|
+
end
|
37
113
|
|
38
|
-
|
39
|
-
|
114
|
+
it 'finds msbuild.exe' do
|
115
|
+
expect(described_class.find).to eq('path/msbuild.exe')
|
116
|
+
end
|
40
117
|
end
|
41
|
-
end
|
42
118
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
119
|
+
context 'does not exist' do
|
120
|
+
before do
|
121
|
+
allow(File).to receive(:exist?).with('path/msbuild.exe').and_return(false)
|
122
|
+
end
|
47
123
|
|
48
|
-
|
49
|
-
|
124
|
+
it 'finds nothing' do
|
125
|
+
expect { described_class.find }.to raise_error('No compatible MSBuild build tool was found')
|
126
|
+
end
|
50
127
|
end
|
51
128
|
end
|
52
129
|
end
|
53
130
|
|
54
|
-
context '
|
55
|
-
|
131
|
+
context 'mono' do
|
132
|
+
before do
|
133
|
+
allow(described_class).to receive(:require).with('win32/registry').and_raise(LoadError)
|
134
|
+
allow(Open3).to receive(:capture2).with('vswhere.exe', any_args).and_raise(Errno::ENOENT)
|
135
|
+
end
|
56
136
|
|
57
|
-
context '
|
137
|
+
context 'not installed' do
|
58
138
|
before do
|
59
139
|
allow(Open3).to receive(:capture2).with('mono', '--version').and_raise(Errno::ENOENT)
|
60
140
|
end
|
61
141
|
|
62
|
-
it '
|
63
|
-
expect { described_class.find }.to raise_error('
|
142
|
+
it 'finds nothing' do
|
143
|
+
expect { described_class.find }.to raise_error('No compatible MSBuild build tool was found')
|
64
144
|
end
|
65
145
|
end
|
66
146
|
|
67
|
-
context '
|
147
|
+
context 'installed' do
|
68
148
|
before do
|
69
149
|
allow(Open3).to receive(:capture2).with('mono', '--version').and_return(mono_version)
|
70
150
|
end
|
71
151
|
|
72
|
-
context '
|
152
|
+
context 'fails' do
|
73
153
|
let(:mono_version) do
|
74
154
|
[
|
75
155
|
'mono crashed',
|
@@ -77,8 +157,17 @@ describe Rake::Funnel::Support::MSBuild::BuildTool do
|
|
77
157
|
]
|
78
158
|
end
|
79
159
|
|
80
|
-
|
81
|
-
|
160
|
+
before do
|
161
|
+
allow(described_class).to receive(:warn)
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'finds nothing' do
|
165
|
+
expect { described_class.find }.to raise_error('No compatible MSBuild build tool was found')
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'warns about the crash' do
|
169
|
+
described_class.find rescue nil # rubocop:disable Style/RescueModifier
|
170
|
+
expect(described_class).to have_received(:warn).with(/^Could not determine mono version:/)
|
82
171
|
end
|
83
172
|
end
|
84
173
|
|
@@ -90,7 +179,7 @@ describe Rake::Funnel::Support::MSBuild::BuildTool do
|
|
90
179
|
]
|
91
180
|
end
|
92
181
|
|
93
|
-
it '
|
182
|
+
it 'finds xbuild' do
|
94
183
|
expect(described_class.find).to eq('xbuild')
|
95
184
|
end
|
96
185
|
end
|
@@ -103,7 +192,7 @@ describe Rake::Funnel::Support::MSBuild::BuildTool do
|
|
103
192
|
]
|
104
193
|
end
|
105
194
|
|
106
|
-
it '
|
195
|
+
it 'finds msbuild' do
|
107
196
|
expect(described_class.find).to eq('msbuild')
|
108
197
|
end
|
109
198
|
end
|
@@ -1,6 +1,4 @@
|
|
1
|
-
# rubocop:disable RSpec/FilePath
|
2
|
-
|
3
|
-
describe Rake::Funnel::Support::MSDeploy::RegistryPatch do
|
1
|
+
describe Rake::Funnel::Support::MSDeploy::RegistryPatch do # rubocop:disable RSpec/FilePath
|
4
2
|
before do
|
5
3
|
# rubocop:disable RSpec/AnyInstance
|
6
4
|
allow_any_instance_of(described_class).to receive(:warn)
|
@@ -11,7 +11,7 @@ describe Rake::Funnel::Support::Timing::Report do
|
|
11
11
|
subject.render
|
12
12
|
end
|
13
13
|
|
14
|
-
shared_examples_for
|
14
|
+
shared_examples_for 'report' do
|
15
15
|
it 'should separator lines' do
|
16
16
|
expect($stdout).to have_received(:puts)
|
17
17
|
.with(Regexp.new('-' * described_class::HEADER_WIDTH)).exactly(4).times
|
@@ -49,7 +49,7 @@ describe Rake::Funnel::Support::Timing::Report do
|
|
49
49
|
describe 'empty report', include: Rake::Funnel::Support::Timing do
|
50
50
|
let(:stats) { Rake::Funnel::Support::Timing::Statistics.new }
|
51
51
|
|
52
|
-
it_behaves_like
|
52
|
+
it_behaves_like 'report'
|
53
53
|
end
|
54
54
|
|
55
55
|
describe 'report for 2 tasks' do
|
@@ -60,7 +60,7 @@ describe Rake::Funnel::Support::Timing::Report do
|
|
60
60
|
s
|
61
61
|
end
|
62
62
|
|
63
|
-
it_behaves_like
|
63
|
+
it_behaves_like 'report'
|
64
64
|
|
65
65
|
it 'should print each task' do
|
66
66
|
expect($stdout).to have_received(:puts).with(/^foo/)
|
@@ -95,7 +95,7 @@ describe Rake::Funnel::Support::Timing::Report do
|
|
95
95
|
diff + described_class::SPACE
|
96
96
|
end
|
97
97
|
|
98
|
-
shared_examples_for
|
98
|
+
shared_examples_for 'padding' do
|
99
99
|
it 'should pad headers' do
|
100
100
|
expect($stdout).to have_received(:puts)
|
101
101
|
.with(Regexp.new("^#{subject.columns[0].header}\\s{#{header_space}}#{subject.columns[1].header}"))
|
@@ -113,13 +113,13 @@ describe Rake::Funnel::Support::Timing::Report do
|
|
113
113
|
context 'task names are shorter than headers' do
|
114
114
|
let(:task_name) { :a }
|
115
115
|
|
116
|
-
it_behaves_like
|
116
|
+
it_behaves_like 'padding'
|
117
117
|
end
|
118
118
|
|
119
119
|
context 'task names are longer than headers' do
|
120
120
|
let(:task_name) { :aaaaaaaaaaaa }
|
121
121
|
|
122
|
-
it_behaves_like
|
122
|
+
it_behaves_like 'padding'
|
123
123
|
end
|
124
124
|
end
|
125
125
|
end
|
@@ -4,15 +4,15 @@ describe Rake::Funnel::Tasks::Timing do
|
|
4
4
|
before do
|
5
5
|
Rake.application = nil
|
6
6
|
Rake::Task.clear
|
7
|
-
|
8
|
-
# rubocop:disable RSpec/ExpectInHook
|
9
|
-
expect(define_tasks).to be
|
10
|
-
expect(subject).to be
|
11
|
-
# rubocop:enable RSpec/ExpectInHook
|
12
7
|
end
|
13
8
|
|
14
9
|
let(:define_tasks) { task :task }
|
15
10
|
|
11
|
+
subject! do
|
12
|
+
define_tasks
|
13
|
+
described_class.new
|
14
|
+
end
|
15
|
+
|
16
16
|
after do
|
17
17
|
subject.reset!
|
18
18
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rake-funnel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.22.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Groß
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: configatron
|
@@ -81,6 +81,7 @@ extra_rdoc_files: []
|
|
81
81
|
files:
|
82
82
|
- ".rspec"
|
83
83
|
- ".simplecov"
|
84
|
+
- CHANGELOG.md
|
84
85
|
- Gemfile
|
85
86
|
- README.md
|
86
87
|
- lib/rake/funnel.rb
|
@@ -233,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
233
234
|
version: '0'
|
234
235
|
requirements: []
|
235
236
|
rubyforge_project:
|
236
|
-
rubygems_version: 2.
|
237
|
+
rubygems_version: 2.7.3
|
237
238
|
signing_key:
|
238
239
|
specification_version: 4
|
239
240
|
summary: A build pipeline targeted at .NET projects. Supports environment configuration
|