detroit 0.3.0 → 0.4.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/.index +59 -0
- data/EXAMPLE.md +66 -64
- data/{HISTORY.rdoc → HISTORY.md} +32 -5
- data/{COPYING.rdoc → LICENSE.txt} +0 -0
- data/README.md +142 -0
- data/bin/detroit +1 -1
- data/lib/detroit.rb +112 -40
- data/lib/detroit.yml +44 -29
- data/lib/detroit/assembly.rb +49 -193
- data/lib/detroit/basic_tool.rb +200 -0
- data/lib/detroit/basic_utils.rb +66 -0
- data/lib/detroit/core_ext.rb +2 -136
- data/lib/detroit/{tool/core_ext → core_ext}/facets.rb +3 -0
- data/lib/detroit/{tool/core_ext → core_ext}/filetest.rb +0 -0
- data/lib/detroit/{tool/core_ext → core_ext}/shell_extensions.rb +0 -0
- data/lib/detroit/{tool/core_ext → core_ext}/to_actual_filename.rb +0 -0
- data/lib/detroit/{tool/core_ext → core_ext}/to_console.rb +1 -0
- data/lib/detroit/{tool/core_ext → core_ext}/to_list.rb +0 -0
- data/lib/detroit/{tool/core_ext → core_ext}/to_yamlfrag.rb +0 -0
- data/lib/detroit/{tool/core_ext → core_ext}/unfold_paragraphs.rb +0 -0
- data/lib/detroit/{tool/email_utils.rb → email_utils.rb} +3 -1
- data/lib/detroit/exec.rb +55 -0
- data/lib/detroit/project.rb +134 -0
- data/lib/detroit/ruby_utils.rb +29 -0
- data/lib/detroit/{tool/shell_utils.rb → shell_utils.rb} +10 -5
- data/lib/detroit/toolchain.rb +6 -0
- data/lib/detroit/toolchain/cli.rb +320 -0
- data/lib/detroit/toolchain/config.rb +223 -0
- data/lib/detroit/toolchain/runner.rb +678 -0
- data/lib/detroit/toolchain/script.rb +248 -0
- data/lib/detroit/toolchain/worker.rb +84 -0
- data/man/detroit.1 +116 -0
- data/man/detroit.1.html +171 -0
- data/man/detroit.1.ronn +99 -0
- metadata +90 -51
- data/.ruby +0 -44
- data/README.rdoc +0 -132
- data/lib/detroit/application.rb +0 -463
- data/lib/detroit/assembly_system.rb +0 -80
- data/lib/detroit/config.rb +0 -203
- data/lib/detroit/control.rb +0 -129
- data/lib/detroit/custom.rb +0 -102
- data/lib/detroit/dsl.rb +0 -55
- data/lib/detroit/service.rb +0 -78
- data/lib/detroit/standard_assembly.rb +0 -51
- data/lib/detroit/tool.rb +0 -295
- data/lib/detroit/tool/core_ext.rb +0 -3
- data/lib/detroit/tool/project_utils.rb +0 -41
@@ -0,0 +1,248 @@
|
|
1
|
+
module Detroit
|
2
|
+
|
3
|
+
module Toolchain
|
4
|
+
|
5
|
+
# Assembly::Script models an *Assembly file* with it's collection of
|
6
|
+
# tool configurations.
|
7
|
+
#
|
8
|
+
class Script
|
9
|
+
|
10
|
+
# Load Assembly file.
|
11
|
+
def self.load(input, project=nil)
|
12
|
+
new(:file=>input,:project=>project)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Project instance.
|
16
|
+
attr :project
|
17
|
+
|
18
|
+
# Hash table of tool configuration.
|
19
|
+
attr :tools
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
#
|
24
|
+
def initialize(options={}, &block)
|
25
|
+
@project = options[:project]
|
26
|
+
|
27
|
+
@tools = {}
|
28
|
+
|
29
|
+
if options[:file]
|
30
|
+
initialize_file(options[:file])
|
31
|
+
end
|
32
|
+
|
33
|
+
if block
|
34
|
+
instance_eval(&block)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Inititalize from assembly file.
|
39
|
+
#
|
40
|
+
def initialize_file(file)
|
41
|
+
@file = (String === file ? File.new(file) : file)
|
42
|
+
|
43
|
+
case File.extname(@file.path)
|
44
|
+
when '.rb'
|
45
|
+
instance_eval(@file.read, @file.path)
|
46
|
+
when '.yml', '.yaml'
|
47
|
+
@tools = YAML.load(erb(@file.read))
|
48
|
+
else
|
49
|
+
text = @file.read
|
50
|
+
if /^---/ =~ text
|
51
|
+
@tools = YAML.load(erb(text))
|
52
|
+
else
|
53
|
+
instance_eval(text, @file.path)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
public
|
59
|
+
|
60
|
+
# Ecapsulate a set of tools within a specific track.
|
61
|
+
#
|
62
|
+
def track(name, &block)
|
63
|
+
@_track = name
|
64
|
+
instance_eval(&block)
|
65
|
+
@_track = nil
|
66
|
+
end
|
67
|
+
|
68
|
+
# Configure a tool.
|
69
|
+
#
|
70
|
+
def tool(name, settings={}, &block)
|
71
|
+
settings[:track] = @_track if @_track
|
72
|
+
if block
|
73
|
+
block_context = BlockContext.new(&block)
|
74
|
+
settings.update(block_context.settings)
|
75
|
+
end
|
76
|
+
@tools[name.to_s] = settings.rekey(&:to_s)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Define a custom tool. A custom tool has no tool class.
|
80
|
+
# Instead, the configuration itself defines the procedure.
|
81
|
+
#
|
82
|
+
def custom(name, &block)
|
83
|
+
context = CustomContext.new(&block)
|
84
|
+
settings = context.settings
|
85
|
+
@tools[name.to_s] = settings.rekey(&:to_s)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Access to project metadata.
|
89
|
+
#
|
90
|
+
# FIXME: Use factory method
|
91
|
+
def project
|
92
|
+
@project ||= Project.new
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
# Capitalized tool names called as methods
|
98
|
+
# can also define a tool.
|
99
|
+
def method_missing(sym, *args, &block)
|
100
|
+
tool_class = sym.to_s
|
101
|
+
case tool_class
|
102
|
+
when /^[A-Z]/
|
103
|
+
if Hash === args.last
|
104
|
+
args.last[:tool] = tool_class
|
105
|
+
else
|
106
|
+
args << {:tool=>tool_class}
|
107
|
+
end
|
108
|
+
case args.first
|
109
|
+
when String, Symbol
|
110
|
+
name = args.first
|
111
|
+
else
|
112
|
+
name = tool_class.to_s.downcase
|
113
|
+
end
|
114
|
+
tool(name, *args, &block)
|
115
|
+
else
|
116
|
+
super(sym, *args, &block)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# Process Routine document via ERB.
|
121
|
+
def erb(text)
|
122
|
+
context = ERBContext.new(project)
|
123
|
+
ERB.new(text).result(context.__binding__)
|
124
|
+
end
|
125
|
+
|
126
|
+
# ERBContext provides the clean context to process a Routine
|
127
|
+
# as an ERB template.
|
128
|
+
class ERBContext
|
129
|
+
#
|
130
|
+
def initialize(project)
|
131
|
+
@project = project
|
132
|
+
end
|
133
|
+
|
134
|
+
# Access to a clean binding.
|
135
|
+
def __binding__
|
136
|
+
binding
|
137
|
+
end
|
138
|
+
|
139
|
+
# Provide access to project data.
|
140
|
+
def project
|
141
|
+
@project
|
142
|
+
end
|
143
|
+
|
144
|
+
#
|
145
|
+
def method_missing(name, *args)
|
146
|
+
if project.respond_to?(name)
|
147
|
+
project.__send__(name, *args)
|
148
|
+
elsif project.metadata.respond_to?(name)
|
149
|
+
project.metadata.__send__(name, *args)
|
150
|
+
else
|
151
|
+
super(name, *args)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
#
|
157
|
+
class BlockContext
|
158
|
+
#
|
159
|
+
attr :settings
|
160
|
+
|
161
|
+
#
|
162
|
+
def initialize(&b)
|
163
|
+
@settings = {}
|
164
|
+
b.arity == 1 ? b.call(self) : instance_eval(&b)
|
165
|
+
end
|
166
|
+
|
167
|
+
#
|
168
|
+
def set(name, value=nil, &block)
|
169
|
+
if block
|
170
|
+
block_context = BlockContext.new
|
171
|
+
block.call(block_context)
|
172
|
+
@settings[name.to_s] = block_context.settings
|
173
|
+
else
|
174
|
+
@settings[name.to_s] = value
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
#
|
179
|
+
def method_missing(symbol, value=nil, *args)
|
180
|
+
case name = symbol.to_s
|
181
|
+
when /=$/
|
182
|
+
@settings[name.chomp('=')] = value
|
183
|
+
else
|
184
|
+
return super(symbol, value, *args) unless args.empty?
|
185
|
+
if value
|
186
|
+
@settings[name.to_s] = value
|
187
|
+
else
|
188
|
+
@settings[name.to_s]
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
#
|
195
|
+
class CustomContext
|
196
|
+
#
|
197
|
+
attr :settings
|
198
|
+
#
|
199
|
+
def initialize(&b)
|
200
|
+
@settings = {}
|
201
|
+
b.arity == 0 ? instance_eval(&b) : b.call(self)
|
202
|
+
end
|
203
|
+
#
|
204
|
+
def method_missing(s,a=nil,*x,&b)
|
205
|
+
case s.to_s
|
206
|
+
when /=$/
|
207
|
+
@settings[s.to_s.chomp('=').to_sym] = b ? b : a
|
208
|
+
else
|
209
|
+
return @settings[s] unless a
|
210
|
+
@settings[s] = b ? b : a
|
211
|
+
end
|
212
|
+
end
|
213
|
+
def respond_to?(s)
|
214
|
+
@settings.key?(s.to_sym)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
end
|
219
|
+
|
220
|
+
# NOTE: This is problematic, because an Assembly file should know from
|
221
|
+
# what file it was derived.
|
222
|
+
|
223
|
+
#
|
224
|
+
DOMAIN = "rubyworks.github.com/detroit,2011-05-27"
|
225
|
+
|
226
|
+
# TODO: If using Psych rather than Syck, then define a domain type.
|
227
|
+
|
228
|
+
#if defined?(Psych) #RUBY_VERSION >= '1.9'
|
229
|
+
# YAML::add_domain_type(DOMAIN, "assembly") do |type, hash|
|
230
|
+
# Assembly.load(hash)
|
231
|
+
# end
|
232
|
+
#else
|
233
|
+
YAML::add_builtin_type("assembly") do |type, value|
|
234
|
+
value
|
235
|
+
#case value
|
236
|
+
#when String
|
237
|
+
# Assembly.eval(value)
|
238
|
+
#when Hash
|
239
|
+
# Assembly.new(value)
|
240
|
+
#else
|
241
|
+
# raise "ERROR: Invalid Assembly"
|
242
|
+
#end
|
243
|
+
end
|
244
|
+
#end
|
245
|
+
|
246
|
+
end
|
247
|
+
|
248
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module Detroit
|
2
|
+
|
3
|
+
module Toolchain
|
4
|
+
|
5
|
+
# TODO: Need to work on how to limit a service's groups per-assembly.
|
6
|
+
|
7
|
+
##
|
8
|
+
# Service class wraps a Tool instance when it is made part of an assembly.
|
9
|
+
#
|
10
|
+
# TODO: Perhpas a better name would be `Link`, as in "chain link"?
|
11
|
+
#
|
12
|
+
class Worker
|
13
|
+
|
14
|
+
attr :key
|
15
|
+
attr :track
|
16
|
+
attr :priority
|
17
|
+
attr :active
|
18
|
+
attr :tool
|
19
|
+
#attr :options
|
20
|
+
|
21
|
+
# Set the priority. Priority determines the order which
|
22
|
+
# services on the same stop are run.
|
23
|
+
#
|
24
|
+
def priority=(integer)
|
25
|
+
@priority = integer.to_i
|
26
|
+
end
|
27
|
+
|
28
|
+
# Set the tracks a service will be available on.
|
29
|
+
#
|
30
|
+
def track=(list)
|
31
|
+
@track = list.to_list
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
def active=(boolean)
|
36
|
+
@active = !!boolean
|
37
|
+
end
|
38
|
+
|
39
|
+
# Create new wrapper.
|
40
|
+
#
|
41
|
+
def initialize(key, tool_class, options)
|
42
|
+
@key = key
|
43
|
+
|
44
|
+
## set defaults
|
45
|
+
@track = nil
|
46
|
+
@priority = 0
|
47
|
+
@active = true
|
48
|
+
|
49
|
+
self.active = options.delete('active') if !options['active'].nil?
|
50
|
+
self.track = options.delete('track') if options.key?('track')
|
51
|
+
self.priority = options.delete('priority') if options.key?('priority')
|
52
|
+
|
53
|
+
@tool = tool_class.new(options)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Does the tool handle the given assembly station?
|
57
|
+
#
|
58
|
+
# If `true` is returned than the station is handled by a method
|
59
|
+
# in the tool with the same name.
|
60
|
+
#
|
61
|
+
# If a symbol is returned then the station is handled, but via
|
62
|
+
# the method named by the returned symbol.
|
63
|
+
#
|
64
|
+
# @return [Boolean,Symbol]
|
65
|
+
def stop?(station, stop=nil)
|
66
|
+
@tool.assemble?(station.to_sym, :destination=>stop.to_sym)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Run the service assembly station procedure.
|
70
|
+
#
|
71
|
+
def invoke(station, stop=nil)
|
72
|
+
@tool.assemble(station.to_sym, :destination=>stop.to_sym)
|
73
|
+
end
|
74
|
+
|
75
|
+
#
|
76
|
+
def inspect
|
77
|
+
"<#{self.class}:#{object_id} @key='#{key}'>"
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
data/man/detroit.1
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
.\" generated with Ronn/v0.7.3
|
2
|
+
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
|
+
.
|
4
|
+
.TH "DETROIT" "1" "January 2014" "" "Detroit"
|
5
|
+
.
|
6
|
+
.SH "NAME"
|
7
|
+
\fBdetroit\fR \- a life\-cycle build tool
|
8
|
+
.
|
9
|
+
.SH "DESCRIPTION"
|
10
|
+
Detroit is a software production management aid\. Detroit utilizes a life\-cycle methodology to help developers prepare and release software in a clear, repeatable, linear fashion\. While programmed in and well suited to Ruby projects, Detroit can utilized for any build requirements\.
|
11
|
+
.
|
12
|
+
.SH "USAGE"
|
13
|
+
To utilize Detroit add a \fBToolchain\fR file to your project\'s root directory\. In this file add instantiation of tools, configured to your projects build requirements\. Toolchain files can be written in YAML or Ruby\.
|
14
|
+
.
|
15
|
+
.P
|
16
|
+
For example to generate RDoc\'s for a project, a tool might be defined:
|
17
|
+
.
|
18
|
+
.IP "" 4
|
19
|
+
.
|
20
|
+
.nf
|
21
|
+
|
22
|
+
rdoc:
|
23
|
+
tool: rdoc
|
24
|
+
files:
|
25
|
+
\- lib
|
26
|
+
\- \'[A\-Z]*\.*\'
|
27
|
+
main: README\.md
|
28
|
+
.
|
29
|
+
.fi
|
30
|
+
.
|
31
|
+
.IP "" 0
|
32
|
+
.
|
33
|
+
.P
|
34
|
+
See the online User Guide \fIhttp://wiki\.rubyworks\.github\.com/detroit\fR for more details on creating toolchain files\.
|
35
|
+
.
|
36
|
+
.P
|
37
|
+
Once a toolchain file is in place, the \fBdetroit\fR command line tool can be used to invoke the tools\. For example, to generate documentation:
|
38
|
+
.
|
39
|
+
.IP "" 4
|
40
|
+
.
|
41
|
+
.nf
|
42
|
+
|
43
|
+
$ detroit document
|
44
|
+
.
|
45
|
+
.fi
|
46
|
+
.
|
47
|
+
.IP "" 0
|
48
|
+
.
|
49
|
+
.P
|
50
|
+
This will run through all standard stations up to and including \fBdocument\fR\. Since the RDoc tool we configured above defines a document job, it would be run in due course\.
|
51
|
+
.
|
52
|
+
.SH "OPTIONS"
|
53
|
+
These are the available options for the \fBdetroit\fR command line tool\.
|
54
|
+
.
|
55
|
+
.IP "\(bu" 4
|
56
|
+
\fB\-m\fR, \fB\-\-multitask\fR Run work elements in parallel\.
|
57
|
+
.
|
58
|
+
.IP "\(bu" 4
|
59
|
+
\fB\-S\fR, \fB\-\-skip=SERVICE\fR Skip a service\.
|
60
|
+
.
|
61
|
+
.IP "\(bu" 4
|
62
|
+
\fB\-s\fR, \fB\-\-system=NAME\fR Select assembly system\. Default is \'standard\'\.
|
63
|
+
.
|
64
|
+
.IP "\(bu" 4
|
65
|
+
\fB\-t\fR, \fB\-\-toolchain=FILE\fR Use specific toolchain file(s)\.
|
66
|
+
.
|
67
|
+
.IP "\(bu" 4
|
68
|
+
\fB\-F\fR, \fB\-\-force\fR Force operations\.
|
69
|
+
.
|
70
|
+
.IP "\(bu" 4
|
71
|
+
\fB\-\-trace\fR Run in TRACE mode\.
|
72
|
+
.
|
73
|
+
.IP "\(bu" 4
|
74
|
+
\fB\-\-trial\fR Run in TRIAL mode (no disk writes)\.
|
75
|
+
.
|
76
|
+
.IP "\(bu" 4
|
77
|
+
\fB\-\-verbose\fR Provide extra output\.
|
78
|
+
.
|
79
|
+
.IP "\(bu" 4
|
80
|
+
\fB\-q\fR, \fB\-\-quiet\fR Run silently\.
|
81
|
+
.
|
82
|
+
.IP "\(bu" 4
|
83
|
+
\fB\-I=PATH\fR Add directory to $LOAD_PATH
|
84
|
+
.
|
85
|
+
.IP "\(bu" 4
|
86
|
+
\fB\-\-debug\fR Run with $DEBUG set to true\.
|
87
|
+
.
|
88
|
+
.IP "\(bu" 4
|
89
|
+
\fB\-\-warn\fR Run with $VERBOSE set to true\.
|
90
|
+
.
|
91
|
+
.IP "\(bu" 4
|
92
|
+
\fB\-\-help [TOOL]\fR Display this help message\.
|
93
|
+
.
|
94
|
+
.IP "\(bu" 4
|
95
|
+
\fB\-c\fR, \fB\-\-config=TOOL\fR Produce a configuration template\.
|
96
|
+
.
|
97
|
+
.IP "" 0
|
98
|
+
.
|
99
|
+
.SH "RESOURCES"
|
100
|
+
.
|
101
|
+
.IP "\(bu" 4
|
102
|
+
Homepage \fIhttp://rubyworks\.github\.com/detroit\fR
|
103
|
+
.
|
104
|
+
.IP "\(bu" 4
|
105
|
+
Development \fIhttp://github\.com/rubyworks/detroit\fR
|
106
|
+
.
|
107
|
+
.IP "\(bu" 4
|
108
|
+
Mailing List \fIhttp://googlegroups\.com/group/rubyworks\-mailinglist\fR
|
109
|
+
.
|
110
|
+
.IP "" 0
|
111
|
+
.
|
112
|
+
.SH "COPYRIGHT"
|
113
|
+
Copyright (c) 2011 Rubyworks
|
114
|
+
.
|
115
|
+
.P
|
116
|
+
Detroit is distributable in accordance with the terms of the GPL v3 license\.
|
data/man/detroit.1.html
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv='content-type' value='text/html;charset=utf8'>
|
5
|
+
<meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
|
6
|
+
<title>detroit(1) - a life-cycle build tool</title>
|
7
|
+
<style type='text/css' media='all'>
|
8
|
+
/* style: man */
|
9
|
+
body#manpage {margin:0}
|
10
|
+
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
|
11
|
+
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
|
12
|
+
.mp h2 {margin:10px 0 0 0}
|
13
|
+
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
|
14
|
+
.mp h3 {margin:0 0 0 4ex}
|
15
|
+
.mp dt {margin:0;clear:left}
|
16
|
+
.mp dt.flush {float:left;width:8ex}
|
17
|
+
.mp dd {margin:0 0 0 9ex}
|
18
|
+
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
|
19
|
+
.mp pre {margin-bottom:20px}
|
20
|
+
.mp pre+h2,.mp pre+h3 {margin-top:22px}
|
21
|
+
.mp h2+pre,.mp h3+pre {margin-top:5px}
|
22
|
+
.mp img {display:block;margin:auto}
|
23
|
+
.mp h1.man-title {display:none}
|
24
|
+
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
|
25
|
+
.mp h2 {font-size:16px;line-height:1.25}
|
26
|
+
.mp h1 {font-size:20px;line-height:2}
|
27
|
+
.mp {text-align:justify;background:#fff}
|
28
|
+
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
|
29
|
+
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
|
30
|
+
.mp u {text-decoration:underline}
|
31
|
+
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
|
32
|
+
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
|
33
|
+
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
|
34
|
+
.mp b.man-ref {font-weight:normal;color:#434241}
|
35
|
+
.mp pre {padding:0 4ex}
|
36
|
+
.mp pre code {font-weight:normal;color:#434241}
|
37
|
+
.mp h2+pre,h3+pre {padding-left:0}
|
38
|
+
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
|
39
|
+
ol.man-decor {width:100%}
|
40
|
+
ol.man-decor li.tl {text-align:left}
|
41
|
+
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
|
42
|
+
ol.man-decor li.tr {text-align:right;float:right}
|
43
|
+
</style>
|
44
|
+
</head>
|
45
|
+
<!--
|
46
|
+
The following styles are deprecated and will be removed at some point:
|
47
|
+
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
|
48
|
+
|
49
|
+
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
|
50
|
+
.man-navigation should be used instead.
|
51
|
+
-->
|
52
|
+
<body id='manpage'>
|
53
|
+
<div class='mp' id='man'>
|
54
|
+
|
55
|
+
<div class='man-navigation' style='display:none'>
|
56
|
+
<a href="#NAME">NAME</a>
|
57
|
+
<a href="#DESCRIPTION">DESCRIPTION</a>
|
58
|
+
<a href="#USAGE">USAGE</a>
|
59
|
+
<a href="#OPTIONS">OPTIONS</a>
|
60
|
+
<a href="#RESOURCES">RESOURCES</a>
|
61
|
+
<a href="#COPYRIGHT">COPYRIGHT</a>
|
62
|
+
</div>
|
63
|
+
|
64
|
+
<ol class='man-decor man-head man head'>
|
65
|
+
<li class='tl'>detroit(1)</li>
|
66
|
+
<li class='tc'>Detroit</li>
|
67
|
+
<li class='tr'>detroit(1)</li>
|
68
|
+
</ol>
|
69
|
+
|
70
|
+
<h2 id="NAME">NAME</h2>
|
71
|
+
<p class="man-name">
|
72
|
+
<code>detroit</code> - <span class="man-whatis">a life-cycle build tool</span>
|
73
|
+
</p>
|
74
|
+
|
75
|
+
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
76
|
+
|
77
|
+
<p>Detroit is a software production management aid. Detroit utilizes a
|
78
|
+
life-cycle methodology to help developers prepare and release software
|
79
|
+
in a clear, repeatable, linear fashion. While programmed in and well
|
80
|
+
suited to Ruby projects, Detroit can utilized for any build requirements.</p>
|
81
|
+
|
82
|
+
<h2 id="USAGE">USAGE</h2>
|
83
|
+
|
84
|
+
<p>To utilize Detroit add a <code>Toolchain</code> file to your project's root directory.
|
85
|
+
In this file add instantiation of tools, configured to your projects build
|
86
|
+
requirements. Toolchain files can be written in YAML or Ruby.</p>
|
87
|
+
|
88
|
+
<p>For example to generate RDoc's for a project, a tool might be defined:</p>
|
89
|
+
|
90
|
+
<pre><code>rdoc:
|
91
|
+
tool: rdoc
|
92
|
+
files:
|
93
|
+
- lib
|
94
|
+
- '[A-Z]*.*'
|
95
|
+
main: README.md
|
96
|
+
</code></pre>
|
97
|
+
|
98
|
+
<p>See the online <a href="http://wiki.rubyworks.github.com/detroit">User Guide</a> for
|
99
|
+
more details on creating toolchain files.</p>
|
100
|
+
|
101
|
+
<p>Once a toolchain file is in place, the <code>detroit</code> command line tool can be used
|
102
|
+
to invoke the tools. For example, to generate documentation:</p>
|
103
|
+
|
104
|
+
<pre><code>$ detroit document
|
105
|
+
</code></pre>
|
106
|
+
|
107
|
+
<p>This will run through all standard stations up to and including <code>document</code>.
|
108
|
+
Since the RDoc tool we configured above defines a document job, it would be
|
109
|
+
run in due course.</p>
|
110
|
+
|
111
|
+
<h2 id="OPTIONS">OPTIONS</h2>
|
112
|
+
|
113
|
+
<p>These are the available options for the <code>detroit</code> command line tool.</p>
|
114
|
+
|
115
|
+
<ul>
|
116
|
+
<li><p><code>-m</code>, <code>--multitask</code>
|
117
|
+
Run work elements in parallel.</p></li>
|
118
|
+
<li><p><code>-S</code>, <code>--skip=SERVICE</code>
|
119
|
+
Skip a service.</p></li>
|
120
|
+
<li><p><code>-s</code>, <code>--system=NAME</code>
|
121
|
+
Select assembly system. Default is 'standard'.</p></li>
|
122
|
+
<li><p><code>-t</code>, <code>--toolchain=FILE</code>
|
123
|
+
Use specific toolchain file(s).</p></li>
|
124
|
+
<li><p><code>-F</code>, <code>--force</code>
|
125
|
+
Force operations.</p></li>
|
126
|
+
<li><p><code>--trace</code>
|
127
|
+
Run in TRACE mode.</p></li>
|
128
|
+
<li><p><code>--trial</code>
|
129
|
+
Run in TRIAL mode (no disk writes).</p></li>
|
130
|
+
<li><p><code>--verbose</code>
|
131
|
+
Provide extra output.</p></li>
|
132
|
+
<li><p><code>-q</code>, <code>--quiet</code>
|
133
|
+
Run silently.</p></li>
|
134
|
+
<li><p><code>-I=PATH</code>
|
135
|
+
Add directory to $LOAD_PATH</p></li>
|
136
|
+
<li><p><code>--debug</code>
|
137
|
+
Run with $DEBUG set to true.</p></li>
|
138
|
+
<li><p><code>--warn</code>
|
139
|
+
Run with $VERBOSE set to true.</p></li>
|
140
|
+
<li><p><code>--help [TOOL]</code>
|
141
|
+
Display this help message.</p></li>
|
142
|
+
<li><p><code>-c</code>, <code>--config=TOOL</code>
|
143
|
+
Produce a configuration template.</p></li>
|
144
|
+
</ul>
|
145
|
+
|
146
|
+
|
147
|
+
<h2 id="RESOURCES">RESOURCES</h2>
|
148
|
+
|
149
|
+
<ul>
|
150
|
+
<li><a href="http://rubyworks.github.com/detroit">Homepage</a></li>
|
151
|
+
<li><a href="http://github.com/rubyworks/detroit">Development</a></li>
|
152
|
+
<li><a href="http://googlegroups.com/group/rubyworks-mailinglist">Mailing List</a></li>
|
153
|
+
</ul>
|
154
|
+
|
155
|
+
|
156
|
+
<h2 id="COPYRIGHT">COPYRIGHT</h2>
|
157
|
+
|
158
|
+
<p>Copyright (c) 2011 Rubyworks</p>
|
159
|
+
|
160
|
+
<p>Detroit is distributable in accordance with the terms of the GPL v3 license.</p>
|
161
|
+
|
162
|
+
|
163
|
+
<ol class='man-decor man-foot man foot'>
|
164
|
+
<li class='tl'></li>
|
165
|
+
<li class='tc'>January 2014</li>
|
166
|
+
<li class='tr'>detroit(1)</li>
|
167
|
+
</ol>
|
168
|
+
|
169
|
+
</div>
|
170
|
+
</body>
|
171
|
+
</html>
|