alpacabuildtool 1.0.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 +7 -0
- data/.gitignore +48 -0
- data/.rubocop.yml +12 -0
- data/.semver +6 -0
- data/.travis.yml +10 -0
- data/CHANGELOG +18 -0
- data/Gemfile +7 -0
- data/LICENSE +22 -0
- data/README.md +235 -0
- data/README.rdoc +39 -0
- data/Rakefile +74 -0
- data/alpacabuildtool.gemspec +34 -0
- data/alpacabuildtool.rdoc +5 -0
- data/alpacabuildtool.todo +9 -0
- data/bin/alpaca +142 -0
- data/features/alpaca.feature +8 -0
- data/features/step_definitions/alpaca_steps.rb +13 -0
- data/features/step_definitions/visual_studio_solutions_steps.rb +47 -0
- data/features/support/env.rb +10 -0
- data/features/visual_studio_solutions.feature +43 -0
- data/lib/alpacabuildtool.rb +4 -0
- data/lib/alpacabuildtool/application.rb +195 -0
- data/lib/alpacabuildtool/configuration.rb +209 -0
- data/lib/alpacabuildtool/data/.alpaca.conf +148 -0
- data/lib/alpacabuildtool/data/doom.flf +826 -0
- data/lib/alpacabuildtool/data/logo.jpg +0 -0
- data/lib/alpacabuildtool/entities/nuspec.rb +107 -0
- data/lib/alpacabuildtool/entities/project.rb +54 -0
- data/lib/alpacabuildtool/entities/solution.rb +104 -0
- data/lib/alpacabuildtool/entities/xml.rb +41 -0
- data/lib/alpacabuildtool/entities/xml_node.rb +75 -0
- data/lib/alpacabuildtool/log/font.rb +92 -0
- data/lib/alpacabuildtool/log/log.rb +15 -0
- data/lib/alpacabuildtool/log/rainbowify_formatter.rb +70 -0
- data/lib/alpacabuildtool/log/rainbowify_logger.rb +47 -0
- data/lib/alpacabuildtool/managers/build_manager.rb +32 -0
- data/lib/alpacabuildtool/managers/package_manager.rb +136 -0
- data/lib/alpacabuildtool/managers/report_manager.rb +33 -0
- data/lib/alpacabuildtool/managers/test_manager.rb +35 -0
- data/lib/alpacabuildtool/os.rb +29 -0
- data/lib/alpacabuildtool/package_types/project_package.rb +44 -0
- data/lib/alpacabuildtool/package_types/tool_package.rb +53 -0
- data/lib/alpacabuildtool/tools/git.rb +22 -0
- data/lib/alpacabuildtool/tools/msbuild.rb +29 -0
- data/lib/alpacabuildtool/tools/nuget.rb +49 -0
- data/lib/alpacabuildtool/tools/nunit.rb +28 -0
- data/lib/alpacabuildtool/tools/nunit_orange.rb +18 -0
- data/lib/alpacabuildtool/tools/open_cover.rb +29 -0
- data/lib/alpacabuildtool/tools/report_generator.rb +25 -0
- data/lib/alpacabuildtool/tools/tool.rb +84 -0
- data/lib/alpacabuildtool/tools/wrapper.rb +66 -0
- data/lib/alpacabuildtool/versioning/version.rb +163 -0
- data/lib/alpacabuildtool/versioning/versioning.rb +84 -0
- data/spec/lib/alpacabuildtool/configuration_spec.rb +201 -0
- data/spec/lib/alpacabuildtool/entities/xml_spec.rb +39 -0
- data/spec/lib/alpacabuildtool/versioning/version_spec.rb +86 -0
- data/spec/lib/alpacabuildtool/versioning/versioning_spec.rb +194 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/coverage.rb +26 -0
- data/test_data/sln1/.alpaca.conf +11 -0
- data/test_data/sln1/.semver +6 -0
- data/test_data/sln1/TestSolution.sln +22 -0
- data/test_data/sln1/TestSolution/App.config +6 -0
- data/test_data/sln1/TestSolution/Program.cs +16 -0
- data/test_data/sln1/TestSolution/Properties/AssemblyInfo.cs +36 -0
- data/test_data/sln1/TestSolution/TestSolution.csproj +59 -0
- data/test_data/sln2/.alpaca.conf +8 -0
- data/test_data/sln2/.semver +6 -0
- data/test_data/sln2/ProjectName/ProjectName.csproj +54 -0
- data/test_data/sln2/ProjectName/Properties/AssemblyInfo.cs +36 -0
- data/test_data/sln2/ProjectName/SomeFolderInProject/SomeClass.cs +16 -0
- data/test_data/sln2/ProjectName2/ProjectName2.csproj +58 -0
- data/test_data/sln2/ProjectName2/Properties/AssemblyInfo.cs +37 -0
- data/test_data/sln2/SolutionName.sln +34 -0
- data/test_data/sln2/Unit.Tests/Properties/AssemblyInfo.cs +36 -0
- data/test_data/sln2/Unit.Tests/SomeClassTests.cs +21 -0
- data/test_data/sln2/Unit.Tests/Unit.Tests.csproj +65 -0
- data/test_data/sln2/Unit.Tests/packages.config +4 -0
- data/test_data/sln3/TestSolution.nobuild.sln +22 -0
- data/test_data/sln3/TestSolution/App.config +6 -0
- data/test_data/sln3/TestSolution/Program.cs +16 -0
- data/test_data/sln3/TestSolution/Properties/AssemblyInfo.cs +36 -0
- data/test_data/sln3/TestSolution/TestSolution.nobuild.csproj +59 -0
- metadata +309 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'alpacabuildtool/log/rainbowify_logger'
|
|
2
|
+
|
|
3
|
+
module AlpacaBuildTool
|
|
4
|
+
##
|
|
5
|
+
# Log adds logger to any class that include it
|
|
6
|
+
module Log
|
|
7
|
+
attr_writer :log
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Method gives access to logger with lazy initialization
|
|
11
|
+
def log
|
|
12
|
+
@log ||= RainbowifyLogger.new
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
require 'logger'
|
|
3
|
+
require 'rainbow'
|
|
4
|
+
require 'rainbow/ext/string' unless String.method_defined?(:color)
|
|
5
|
+
require 'alpacabuildtool/log/font'
|
|
6
|
+
|
|
7
|
+
module AlpacaBuildTool
|
|
8
|
+
##
|
|
9
|
+
# RainbowifyFormatter provides formatting for standart
|
|
10
|
+
# ruby logger by adding colors(rainbow gem) and ASCII art headers
|
|
11
|
+
# for HEADER (6) severity
|
|
12
|
+
class RainbowifyFormatter < Logger::Formatter
|
|
13
|
+
##
|
|
14
|
+
# Provides custom logging implementation
|
|
15
|
+
#
|
|
16
|
+
# +severity+:: severity to log(HEADER, PUTS, INFO, ERROR...)
|
|
17
|
+
# +datetime+:: date time stamp
|
|
18
|
+
# +progname+:: not used here
|
|
19
|
+
# +message+:: message to log
|
|
20
|
+
def call(severity, datetime, _progname, message)
|
|
21
|
+
case severity
|
|
22
|
+
when 'HEADER' then header(message)
|
|
23
|
+
when 'PUTS' then puts(message)
|
|
24
|
+
else usual(message, severity, datetime)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def header(message)
|
|
31
|
+
font = Font.new('doom')
|
|
32
|
+
result = artify_message("\x00#{message}", font)
|
|
33
|
+
result.join("\n").gsub(/\0/, '').gsub(font.hard_blank, ' ')
|
|
34
|
+
.color(:green).bright + "\n"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def puts(message)
|
|
38
|
+
message.to_s.color(:blue).bright + "\n"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def usual(message, severity, datetime)
|
|
42
|
+
date_format = datetime.strftime('%FT%T.%L')
|
|
43
|
+
"[#{date_format}] #{severity}: #{message}".color(color(severity)) + "\n"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def color(severity)
|
|
47
|
+
case severity
|
|
48
|
+
when 'DEBUG' then :cyan
|
|
49
|
+
when 'INFO' then :green
|
|
50
|
+
when 'WARN' then :yellow
|
|
51
|
+
when 'ERROR' then :red
|
|
52
|
+
when 'FATAL' then :magenta
|
|
53
|
+
else :white
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def artify_message(msg, font)
|
|
58
|
+
result = []
|
|
59
|
+
msg.each_char do |c|
|
|
60
|
+
o = c.ord
|
|
61
|
+
o = '0' unless font.char?(o)
|
|
62
|
+
font.height.times do |j|
|
|
63
|
+
line = font[o][j]
|
|
64
|
+
result[j] = (result[j] ||= '') + line
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
result
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'logger'
|
|
2
|
+
require 'alpacabuildtool/log/rainbowify_formatter'
|
|
3
|
+
|
|
4
|
+
module AlpacaBuildTool
|
|
5
|
+
##
|
|
6
|
+
# RainbowifyLogger class is extending ruby logger
|
|
7
|
+
# with _header_ and _puts_ methods and add colors to logs
|
|
8
|
+
class RainbowifyLogger < Logger
|
|
9
|
+
##
|
|
10
|
+
# Custom severities that current logger support
|
|
11
|
+
SEVERITIES = %w(DEBUG INFO WARN ERROR FATAL PUTS HEADER)
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Creates instance of logger with STDOUT as IO object
|
|
15
|
+
# for logger and adds RainbowifyFormatter as a formatter
|
|
16
|
+
#
|
|
17
|
+
# Creates ruby logger with STDOUT object and rainbowify formatter
|
|
18
|
+
def initialize
|
|
19
|
+
super(STDOUT)
|
|
20
|
+
@formatter = RainbowifyFormatter.new
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
##
|
|
24
|
+
# Override logger.format_severity in order to use our own severities
|
|
25
|
+
def format_severity(severity)
|
|
26
|
+
SEVERITIES[severity] || 'ANY'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
##
|
|
30
|
+
# Log nice ASCII art styled header
|
|
31
|
+
#
|
|
32
|
+
# +progname+:: program name
|
|
33
|
+
# accepts &block
|
|
34
|
+
def puts(progname = nil, &block)
|
|
35
|
+
add(5, nil, progname, &block)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
##
|
|
39
|
+
# Log nice ASCII art styled header
|
|
40
|
+
#
|
|
41
|
+
# +progname+:: program name
|
|
42
|
+
# accepts &block
|
|
43
|
+
def header(progname = nil, &block)
|
|
44
|
+
add(6, nil, progname, &block)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'alpacabuildtool/tools/msbuild'
|
|
2
|
+
require 'alpacabuildtool/managers/package_manager'
|
|
3
|
+
|
|
4
|
+
module AlpacaBuildTool
|
|
5
|
+
##
|
|
6
|
+
# BuildManager provides methods to build *.sln solutions
|
|
7
|
+
class BuildManager
|
|
8
|
+
##
|
|
9
|
+
# Creates an instance
|
|
10
|
+
#
|
|
11
|
+
# +solution+:: solution to be used to configure build manager and to be
|
|
12
|
+
# built later
|
|
13
|
+
def initialize(solution)
|
|
14
|
+
@solution = solution
|
|
15
|
+
@package_manager = PackageManager.new(@solution)
|
|
16
|
+
@build_tool = MSBuild.new(@solution.configuration['MSBuild'])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Build solution
|
|
21
|
+
#
|
|
22
|
+
# +debug+:: set to build in debug mode
|
|
23
|
+
# +update_version:: set to update AssemblyInfo.cs files for all solution
|
|
24
|
+
# projects
|
|
25
|
+
def build(debug, update_version)
|
|
26
|
+
@package_manager.restore_packages
|
|
27
|
+
build_version = @solution.build_version
|
|
28
|
+
@solution.update_projects_version(build_version) if update_version
|
|
29
|
+
@build_tool.build(@solution.file, debug)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
require 'alpacabuildtool/entities/nuspec'
|
|
2
|
+
require 'alpacabuildtool/package_types/project_package'
|
|
3
|
+
require 'alpacabuildtool/package_types/tool_package'
|
|
4
|
+
require 'alpacabuildtool/tools/nuget'
|
|
5
|
+
require 'alpacabuildtool/tools/git'
|
|
6
|
+
require 'fileutils'
|
|
7
|
+
|
|
8
|
+
module AlpacaBuildTool
|
|
9
|
+
##
|
|
10
|
+
# PackageManager provides package management methods for solution
|
|
11
|
+
class PackageManager < Nuget
|
|
12
|
+
##
|
|
13
|
+
# Defines where packages used by alpaca should be downloaded
|
|
14
|
+
DOWNLOAD_DIR = File.join(File.expand_path('~'), '.download/')
|
|
15
|
+
|
|
16
|
+
##
|
|
17
|
+
# Creates an instance
|
|
18
|
+
# Use Nuget as package management tool
|
|
19
|
+
#
|
|
20
|
+
# +solution+:: solution to be used to configure build manager and to be
|
|
21
|
+
# used further
|
|
22
|
+
def initialize(solution)
|
|
23
|
+
@solution = solution
|
|
24
|
+
super(@solution.configuration['Nuget'])
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# Returns named tool configured from current solution
|
|
29
|
+
#
|
|
30
|
+
# +name+:: tool name
|
|
31
|
+
# +*args+:: arguments for tool creation
|
|
32
|
+
#
|
|
33
|
+
# package_manager.get('NUnit')
|
|
34
|
+
# # => #<AlpacaBuildTool:NUnit **>
|
|
35
|
+
# package_manager.get('OpenCover', @test_tool)
|
|
36
|
+
# # => #<AlpacaBuildTool:OpenCover @tool=..NUnit..**>
|
|
37
|
+
def get(name, *args)
|
|
38
|
+
config = @solution.configuration[name]
|
|
39
|
+
AlpacaBuildTool.const_get(name).new(config, *args) do
|
|
40
|
+
exe_pattern = File.join(DOWNLOAD_DIR, '**', config['exe'])
|
|
41
|
+
unless Dir.glob(exe_pattern).any?
|
|
42
|
+
id, pre = config['package_id'], config['pre_release'] || false
|
|
43
|
+
install(id, DOWNLOAD_DIR, pre)
|
|
44
|
+
end
|
|
45
|
+
Dir.glob(exe_pattern).first
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
##
|
|
50
|
+
# Restore packages for solution
|
|
51
|
+
def restore_packages
|
|
52
|
+
if Dir.glob(File.dirname(@solution.file) + '/**/packages.config').empty?
|
|
53
|
+
log.info 'no packages.config discovered'
|
|
54
|
+
return
|
|
55
|
+
end
|
|
56
|
+
restore(@solution.file)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
##
|
|
60
|
+
# Create and push if requested nuget package
|
|
61
|
+
#
|
|
62
|
+
# +config+:: package configuration from solution local configuration
|
|
63
|
+
# +version+:: package version to be created
|
|
64
|
+
# +options+:: hash with packaging options
|
|
65
|
+
# <tt>options[:debug] = true</tt> is to create packages from debug mode<br\>
|
|
66
|
+
# <tt>options[:push] = true</tt> is to push packages after they are created
|
|
67
|
+
# <br\>
|
|
68
|
+
# <tt>options[:force] = true</tt> is to create/push packages even if it has
|
|
69
|
+
# no changes
|
|
70
|
+
def create_package(config, version, options)
|
|
71
|
+
config = generate_config(config, version)
|
|
72
|
+
project = @solution.project(config['project'])
|
|
73
|
+
changes, changelog = package_changes(config, project.dir)
|
|
74
|
+
log.info "#{config['id']} unchanged..." unless changes
|
|
75
|
+
return unless changes || options[:force]
|
|
76
|
+
generate_package(project, config, options[:debug], changelog)
|
|
77
|
+
push_packages(config) if options[:push]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
private
|
|
81
|
+
|
|
82
|
+
def generate_config(config, version)
|
|
83
|
+
common = @solution.configuration['all_packages'] || {}
|
|
84
|
+
common.merge(config).merge('version' => version)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def package_changes(config, project_dir)
|
|
88
|
+
FileUtils.rm_rf File.join(DOWNLOAD_DIR, config['id'])
|
|
89
|
+
begin
|
|
90
|
+
changes, changelog = latest_package_changes(config, project_dir)
|
|
91
|
+
rescue
|
|
92
|
+
changes = Git.changes(project_dir)
|
|
93
|
+
end
|
|
94
|
+
new_changes = "#{Git.revision}\n---#{config['version']}---\n#{changes}\n"
|
|
95
|
+
[changes != '', new_changes + (changelog || ['']).reduce(:+)]
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def latest_package_changes(config, project_dir)
|
|
99
|
+
install(config['id'], DOWNLOAD_DIR, config['version'].include?('-'),
|
|
100
|
+
true, config['source'])
|
|
101
|
+
file = File.join(DOWNLOAD_DIR, config['id'], 'CHANGES.txt')
|
|
102
|
+
changelog = IO.readlines(file)
|
|
103
|
+
commit_id = changelog.shift.gsub(/\n/, '')
|
|
104
|
+
[Git.changes(project_dir, commit_id), changelog]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def generate_package(project, config, debug, changelog)
|
|
108
|
+
package = typed_package(config['type'], config['id'], project, debug)
|
|
109
|
+
write_mandatory_files(package, config, changelog)
|
|
110
|
+
write_optional_file(package.files[2], config)
|
|
111
|
+
pack(*package.options)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def typed_package(type, id, project, debug)
|
|
115
|
+
AlpacaBuildTool.const_get("#{type.capitalize}Package")
|
|
116
|
+
.new(id, project, debug)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def write_mandatory_files(package, config, changelog)
|
|
120
|
+
File.write(package.files[0], Nuspec.new(config, package.add_files?).to_s)
|
|
121
|
+
File.write(package.files[1], changelog)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def write_optional_file(file, config)
|
|
125
|
+
File.write(file, config['readme']) if config['readme']
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def push_packages(config)
|
|
129
|
+
output_dir = @configuration['commands']['pack']['OutputDirectory']
|
|
130
|
+
file = File.join(output_dir, "#{config['id']}.#{config['version']}")
|
|
131
|
+
push("#{file}.nupkg", config['source'])
|
|
132
|
+
symbols = "#{file}.symbols.nupkg"
|
|
133
|
+
push(symbols, config['symbol_source']) if File.exist?(symbols)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'alpacabuildtool/tools/nunit_orange'
|
|
2
|
+
require 'alpacabuildtool/tools/report_generator'
|
|
3
|
+
require 'alpacabuildtool/managers/package_manager'
|
|
4
|
+
|
|
5
|
+
module AlpacaBuildTool
|
|
6
|
+
##
|
|
7
|
+
# ReportManager provides methods to convert test results to reports
|
|
8
|
+
class ReportManager
|
|
9
|
+
##
|
|
10
|
+
# Creates an instance
|
|
11
|
+
#
|
|
12
|
+
# +solution+:: solution to be used to configure reports manager
|
|
13
|
+
def initialize(solution)
|
|
14
|
+
package_manager = PackageManager.new(solution)
|
|
15
|
+
@test_tool = package_manager.get('NUnitOrange')
|
|
16
|
+
@coverage_tool = package_manager.get('ReportGenerator')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Convert results to reports
|
|
21
|
+
#
|
|
22
|
+
# +type+:: type of results to be converted(tests, coverage, all)
|
|
23
|
+
def convert(type)
|
|
24
|
+
case type
|
|
25
|
+
when 'tests' then @test_tool.convert
|
|
26
|
+
when 'coverage' then @coverage_tool.convert
|
|
27
|
+
when 'all'
|
|
28
|
+
@test_tool.convert
|
|
29
|
+
@coverage_tool.convert
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'alpacabuildtool/tools/nunit'
|
|
2
|
+
require 'alpacabuildtool/tools/open_cover'
|
|
3
|
+
require 'alpacabuildtool/managers/package_manager'
|
|
4
|
+
|
|
5
|
+
module AlpacaBuildTool
|
|
6
|
+
##
|
|
7
|
+
# TestManager provides methods to test *.sln solutions
|
|
8
|
+
class TestManager
|
|
9
|
+
##
|
|
10
|
+
# Creates an instance
|
|
11
|
+
#
|
|
12
|
+
# +solution+:: solution to be used to configure test manager
|
|
13
|
+
def initialize(solution)
|
|
14
|
+
package_manager = PackageManager.new(solution)
|
|
15
|
+
@test_tool = package_manager.get('NUnit')
|
|
16
|
+
@coverage_tool = package_manager.get('OpenCover', @test_tool)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Test list of projects
|
|
21
|
+
#
|
|
22
|
+
# +test_projects+:: list of projects with tests
|
|
23
|
+
# +coverage+:: set to run coverage
|
|
24
|
+
# +debug+:: set to run tests with debug configuration
|
|
25
|
+
def test(test_projects, coverage = false, debug = false)
|
|
26
|
+
test_projects.each do |project|
|
|
27
|
+
if coverage
|
|
28
|
+
@coverage_tool.call { |tool| tool.test(project.file, debug) }
|
|
29
|
+
else
|
|
30
|
+
@test_tool.test(project.file, debug)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'rbconfig'
|
|
2
|
+
|
|
3
|
+
module AlpacaBuildTool
|
|
4
|
+
##
|
|
5
|
+
# Os provides methods to simplify defining host os
|
|
6
|
+
module Os
|
|
7
|
+
##
|
|
8
|
+
# Returns host os as :windows, :macosx, :linux or :unix
|
|
9
|
+
def self.os
|
|
10
|
+
@os ||= (
|
|
11
|
+
host_os = RbConfig::CONFIG['host_os']
|
|
12
|
+
get_os(host_os)
|
|
13
|
+
)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.get_os(host_os)
|
|
17
|
+
case host_os
|
|
18
|
+
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/ then :windows
|
|
19
|
+
when /darwin|mac os/ then :macosx
|
|
20
|
+
when /linux/ then :linux
|
|
21
|
+
when /solaris|bsd/ then :unix
|
|
22
|
+
else
|
|
23
|
+
fail "unknown os: #{host_os.inspect}"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private_class_method :get_os
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module AlpacaBuildTool
|
|
2
|
+
##
|
|
3
|
+
# ProjectPackage provides configuration of normal nuget packages created
|
|
4
|
+
# from projects
|
|
5
|
+
class ProjectPackage
|
|
6
|
+
##
|
|
7
|
+
# Creates an instance
|
|
8
|
+
#
|
|
9
|
+
# +package_id+:: not used in current class, but need to be here for
|
|
10
|
+
# consistent interface with other package types
|
|
11
|
+
# +project+:: project to be used to create a package
|
|
12
|
+
# +debug+:: is debug configuration should be used to create a package
|
|
13
|
+
def initialize(_, project, debug)
|
|
14
|
+
@nuspec_file = File.join(project.dir, "#{project.name}.nuspec")
|
|
15
|
+
@readme_file = File.join(project.dir, 'README.txt')
|
|
16
|
+
@changelog_file = File.join(project.dir, 'CHANGES.txt')
|
|
17
|
+
@file = project.file
|
|
18
|
+
@debug = debug
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# Returns array of files: *.nuspec, CHANGELOG.txt, README.txt
|
|
23
|
+
def files
|
|
24
|
+
[@nuspec_file, @changelog_file, @readme_file]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# Returns options to be passed to Nuget.pack
|
|
29
|
+
def options
|
|
30
|
+
[@file, @debug ? 'Debug' : 'Release']
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
##
|
|
34
|
+
# Returns true so Nuspec file creation process will store readme and
|
|
35
|
+
# changelog files into <files/> entry
|
|
36
|
+
#
|
|
37
|
+
# This is required for normal packages as they are created from *.csproj
|
|
38
|
+
# but adding them for :tool packages cause missing all other files as
|
|
39
|
+
# :tool package is created from folder and not *.csproj
|
|
40
|
+
def add_files?
|
|
41
|
+
true
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|