cfhighlander 0.2.1.alpha.43 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +79 -153
- data/bin/cfhighlander +1 -1
- data/bin/{cfhighlander.rb → highlander.rb} +22 -27
- data/cfndsl_ext/sg.rb +2 -29
- data/hl_ext/mapping_helper.rb +4 -6
- data/lib/{cfhighlander.compiler.rb → highlander.compiler.rb} +18 -26
- data/lib/{cfhighlander.dsl.base.rb → highlander.dsl.base.rb} +2 -2
- data/lib/{cfhighlander.dsl.subcomponent.rb → highlander.dsl.component.rb} +71 -83
- data/lib/highlander.dsl.params.rb +113 -0
- data/lib/{cfhighlander.dsl.template.rb → highlander.dsl.rb} +62 -91
- data/lib/highlander.factory.rb +359 -0
- data/lib/{cfhighlander.helper.rb → highlander.helper.rb} +2 -2
- data/lib/{cfhighlander.mapproviders.rb → highlander.mapproviders.rb} +1 -1
- data/lib/{cfhighlander.publisher.rb → highlander.publisher.rb} +3 -3
- data/lib/{cfhighlander.validator.rb → highlander.validator.rb} +1 -1
- data/lib/util/zip.util.rb +1 -1
- data/templates/cfndsl.component.template.erb +1 -4
- metadata +15 -38
- data/lib/cfhighlander.dsl.params.rb +0 -108
- data/lib/cfhighlander.factory.rb +0 -45
- data/lib/cfhighlander.factory.templatefinder.rb +0 -248
- data/lib/cfhighlander.model.component.rb +0 -177
- data/lib/cfhighlander.model.templatemeta.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2db06592f56122df80f8ad27fb1bc67f8920b47a623dbd8f6343f265998efa60
|
4
|
+
data.tar.gz: fcf86ec795983ec1a73d565e49685314b88dd0bc2cc22174fa1bb41841dfbaa2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a138171e3a15cee57f1ac71a55f8c5bce7d1db15560fe5ee4c11810c0e496e81e838350754375b377f9ffca562fb75abe5b897e1a3ae4ae36af7f5ec518ecea
|
7
|
+
data.tar.gz: 8a2c7a47987d4500a074346835c65093b3e1dbbdcfbb1d7800ea3fe7d749c3ba0c3fb6e95d0fd4d89b8fe5b530d00fc9f6f57ded2b0fe863ff721319bd51f623
|
data/README.md
CHANGED
@@ -1,27 +1,24 @@
|
|
1
1
|
[![Build Status](https://travis-ci.com/theonestack/cfhighlander.svg?branch=develop)](https://travis-ci.com/theonestack/cfhighlander)
|
2
2
|
|
3
|
-
#
|
3
|
+
# Highlander
|
4
4
|
|
5
|
-
|
5
|
+
Highlander is DSL processor that enables composition and orchestration of Amazon CloudFormation templates
|
6
6
|
written using [CfnDsl](https://github.com/cfndsl/cfndsl) in an abstract way. It tries to tackle problem of merging multiple templates into master
|
7
7
|
template in an elegant way, so higher degree of template reuse can be achieved. It does so by formalising commonly
|
8
|
-
used
|
9
|
-
|
10
|
-
rather than wiring them manually in 'master' cfndsl template. For this example to
|
8
|
+
used patterns via DSL statements. For an example, passing output of one stack into other stack is achieved using
|
9
|
+
`OutputParam` highlander DSL statement, rather than wiring this parameters manually in cfndsl templates. For this example to
|
11
10
|
work, parent component will have to pull in both component rendering output values, and component pulling them in
|
12
|
-
as parameters.
|
13
|
-
|
14
|
-
with repositories from this org being one of the default sources for searching component templates.
|
11
|
+
as parameters. It also enables it's user to build component library, where components can be distributed to s3, and
|
12
|
+
consequentially references to them resolved.
|
15
13
|
|
16
|
-
Highlander DSL produces CloudFormation templates in
|
14
|
+
Highlander DSL produces CloudFormation templates in 3 phases
|
17
15
|
|
18
16
|
- Processing referenced component's configuration and resolving configuration exports
|
19
|
-
- Wiring parameters from components to their inner components
|
20
17
|
- Producing [CfnDsl](https://github.com/cfndsl/cfndsl) templates for all components and subcomponents as intermediary
|
21
18
|
step
|
22
19
|
- Producing resulting CloudFormation templates using configuration and templates generated in two previous phases.
|
23
20
|
|
24
|
-
Each phase
|
21
|
+
Each phase above is executable as stand-alone through CLI, making development of Highlander templates easier by enabling
|
25
22
|
debugging of produced configuration and cfndsl templates.
|
26
23
|
|
27
24
|
|
@@ -51,7 +48,7 @@ this file defines map used within component itself
|
|
51
48
|
- Define cfndsl template used for building CloudFormation resources
|
52
49
|
|
53
50
|
|
54
|
-
**Outer component** is component that defines other component via
|
51
|
+
**Outer component** is component that defines other component via higlander dsl `Component` statement. Defined component
|
55
52
|
is called **inner component**. Components defined under same outer component are **sibling components**
|
56
53
|
|
57
54
|
## Usage
|
@@ -61,30 +58,30 @@ For both ways, highlander is distributed as ruby gem
|
|
61
58
|
|
62
59
|
|
63
60
|
```bash
|
64
|
-
$ gem install
|
65
|
-
$
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
61
|
+
$ gem install highlander
|
62
|
+
$ highlander help
|
63
|
+
highlander commands:
|
64
|
+
highlander cfcompile component[@version] -f, --format=FORMAT # Compile Highlander component to CloudFormation templates
|
65
|
+
highlander cfpublish component[@version] -f, --format=FORMAT # Publish CloudFormation template for component, and it' referenced subcomponents
|
66
|
+
highlander configcompile component[@version] # Compile Highlander components configuration
|
67
|
+
highlander dslcompile component[@version] -f, --format=FORMAT # Compile Highlander component configuration and create cfndsl templates
|
68
|
+
highlander help [COMMAND] # Describe available commands or one specific command
|
69
|
+
highlander publish component[@version] [-v published_version] # Publish CloudFormation template for component, and it' referenced subcomponents
|
73
70
|
|
74
71
|
```
|
75
72
|
### Working directory
|
76
73
|
|
77
74
|
All templates and configuration generated are placed in `$WORKDIR/out` directory. Optionally, you can alter working directory
|
78
|
-
via `
|
75
|
+
via `HIGHLANDER_WORKDIR` environment variable.
|
79
76
|
|
80
77
|
### Commands
|
81
78
|
|
82
79
|
To get full list of options for any of cli commands use `highlander help command_name` syntax
|
83
80
|
|
84
81
|
```bash
|
85
|
-
$
|
82
|
+
$ highlander help publish
|
86
83
|
Usage:
|
87
|
-
|
84
|
+
highlander publish component[@version] [-v published_version]
|
88
85
|
|
89
86
|
Options:
|
90
87
|
[--dstbucket=DSTBUCKET] # Distribution S3 bucket
|
@@ -98,7 +95,7 @@ Publish CloudFormation template for component,
|
|
98
95
|
|
99
96
|
#### Silent mode
|
100
97
|
|
101
|
-
|
98
|
+
Highlander DSL processor has built-in support for packaging and deploying AWS Lambda functions. Some of these lambda
|
102
99
|
functions may require shell command to be executed (e.g. pulling library dependencies) prior their packaging in ZIP archive format.
|
103
100
|
Such commands are potential security risk, as they allow execution of arbitrary code, so for this reason user agreement is required
|
104
101
|
e.g:
|
@@ -139,11 +136,11 @@ cfndsl templates. Check component configuration section for more details.
|
|
139
136
|
|
140
137
|
#### dslcompile
|
141
138
|
|
142
|
-
*dslcompile* will produce intermediary cfndsl templates. This is useful for debugging
|
139
|
+
*dslcompile* will produce intermediary cfndsl templates. This is useful for debugging highlander components
|
143
140
|
|
144
141
|
#### publish
|
145
142
|
|
146
|
-
*publish* command publishes
|
143
|
+
*publish* command publishes highlander components source code to s3 location (compared to *cfpublish* which is publishing
|
147
144
|
compiled cloudformation templates). Same CLI / DSL options apply as for *cfpublish* command. Version defaults to `latest`
|
148
145
|
|
149
146
|
|
@@ -172,7 +169,7 @@ This configuration level overrides component's own config file.
|
|
172
169
|
- Outer component explicit configuration. You can pass `config` named parameter to `Component` statement, such as
|
173
170
|
|
174
171
|
```ruby
|
175
|
-
|
172
|
+
HighlanderComponent do
|
176
173
|
|
177
174
|
# ...
|
178
175
|
# some dsl code
|
@@ -260,7 +257,7 @@ Parameters block is used to define CloudFormation template parameters, and metad
|
|
260
257
|
are wired with outer or sibling components.
|
261
258
|
|
262
259
|
```ruby
|
263
|
-
|
260
|
+
HighlanderComponent do
|
264
261
|
Parameters do
|
265
262
|
##
|
266
263
|
## parameter definitions here
|
@@ -273,117 +270,81 @@ Parameter block supports following parameters
|
|
273
270
|
|
274
271
|
#### ComponentParam
|
275
272
|
|
276
|
-
`ComponentParam` - Component parameter
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
Propagated parameter will be prefixed with component name **if it is not defined as global parameter**. Otherwise,
|
281
|
-
parameter name is kept in full.
|
282
|
-
|
283
|
-
Example below demonstrates 3 different ways of providing parameter values from outer to inner component.
|
284
|
-
|
285
|
-
- Provide value explicitly
|
286
|
-
- Provide value explicitly as output of another component
|
287
|
-
- Autowire value from output of another component with the same name
|
288
|
-
- Propagate parameter to outer component
|
273
|
+
`ComponentParam` - Component parameter takes name and default value. It defines component parameter
|
274
|
+
that is not auto-wired in any way with outer component. This parameter will either use default value, or value
|
275
|
+
explicitly passed from outer component.
|
289
276
|
|
290
277
|
```ruby
|
291
278
|
|
292
|
-
# Inner Component
|
293
|
-
|
279
|
+
# Inner Component
|
280
|
+
HighlanderComponent do
|
294
281
|
Name 's3'
|
295
282
|
Parameters do
|
296
283
|
ComponentParam 'BucketName','highlander.example.com.au'
|
297
|
-
ComponentParam 'BucketName2',''
|
298
|
-
ComponentParam 'BucketName3',''
|
299
|
-
ComponentParam 'BucketName4','', isGlobal: false # default value is false
|
300
|
-
ComponentParam 'BucketName5','', isGlobal: true
|
301
284
|
end
|
302
|
-
|
303
285
|
end
|
304
|
-
|
305
286
|
```
|
306
287
|
|
307
288
|
```ruby
|
308
|
-
#
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
289
|
+
# Outer component
|
290
|
+
HighlanderComponent do
|
291
|
+
# instantiate inner component with name and template
|
292
|
+
Component template:'s3',
|
293
|
+
name:'s3',
|
294
|
+
parameters:{'BucketName' => 'outer.example.com.au'}
|
313
295
|
end
|
296
|
+
```
|
314
297
|
|
298
|
+
#### StackParam
|
315
299
|
|
316
|
-
|
317
|
-
|
300
|
+
`StackParam` - Stack parameter bubbles up to it's outer component. Outer component will either define top level parameter
|
301
|
+
with same name as inner component parameter (if parameter is defined as global), or it will be prefixed with inner component name.
|
318
302
|
|
319
|
-
Condition 'AlwaysFalse', FnEquals('true','false')
|
320
|
-
S3_Bucket :resourcetovalidateproperly do
|
321
|
-
Condition 'AlwaysFalse'
|
322
|
-
end
|
323
303
|
|
324
|
-
|
325
|
-
|
326
|
-
|
304
|
+
```ruby
|
305
|
+
# Outer component
|
306
|
+
HighlanderComponent do
|
307
|
+
Component template:'s3',name:'s3'
|
327
308
|
end
|
328
|
-
|
329
|
-
|
330
309
|
```
|
331
310
|
|
332
311
|
```ruby
|
333
|
-
#
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
312
|
+
# Inner component
|
313
|
+
HighlanderComponent do
|
314
|
+
Name 's3'
|
315
|
+
Parameters do
|
316
|
+
StackParam 'EnvironmentName','dev', isGlobal:true
|
317
|
+
StackParam 'BucketName','highlander.example.com.au', isGlobal:false
|
318
|
+
end
|
340
319
|
end
|
341
|
-
|
342
320
|
```
|
343
321
|
|
344
322
|
|
345
|
-
Example above translates to following
|
323
|
+
Example above translates to following cfndsl template in outer component
|
346
324
|
```ruby
|
347
325
|
CloudFormation do
|
348
326
|
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
Default ''
|
353
|
-
NoEcho false
|
354
|
-
end
|
355
|
-
|
356
|
-
Parameter('BucketName5') do
|
357
|
-
Type 'String'
|
358
|
-
Default ''
|
359
|
-
NoEcho false
|
327
|
+
Parameter('EnvironmentName') do
|
328
|
+
Type 'String'
|
329
|
+
Default ''
|
360
330
|
end
|
361
331
|
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
'BucketName4' => {"Ref":"s3BucketName4"},
|
378
|
-
|
379
|
-
# Reference to parameter that was propagated. isGlobal: true when defining
|
380
|
-
# parameter, so parameter name is not prefixed, but rather propagated as-is
|
381
|
-
'BucketName5' => {"Ref":"BucketName5"},
|
382
|
-
|
383
|
-
})
|
384
|
-
end
|
332
|
+
Parameter('s3BucketName') do
|
333
|
+
Type 'String'
|
334
|
+
Default 'highlander.example.com.au'
|
335
|
+
end
|
336
|
+
|
337
|
+
CloudFormation_Stack('s3') do
|
338
|
+
TemplateURL 'https://distributionbucket/dist/latest/s3.yaml'
|
339
|
+
Parameters ({
|
340
|
+
|
341
|
+
'EnvironmentName' => Ref('EnvironmentName'),
|
342
|
+
|
343
|
+
'BucketName' => Ref('s3BucketName'),
|
344
|
+
|
345
|
+
})
|
346
|
+
end
|
385
347
|
end
|
386
|
-
|
387
348
|
```
|
388
349
|
|
389
350
|
|
@@ -397,7 +358,7 @@ This DSL statements takes a full body, as Mapping name, Map key, and value key n
|
|
397
358
|
|
398
359
|
```ruby
|
399
360
|
# Inner component
|
400
|
-
|
361
|
+
HighlanderComponent do
|
401
362
|
Name 's3'
|
402
363
|
Parameters do
|
403
364
|
MappingParam 'BucketName' do
|
@@ -409,13 +370,17 @@ end
|
|
409
370
|
```
|
410
371
|
|
411
372
|
|
373
|
+
#### OutputParam
|
374
|
+
|
375
|
+
TBD
|
376
|
+
|
412
377
|
### DependsOn
|
413
378
|
|
414
379
|
`DependsOn` - this will include any globally exported libraries from given
|
415
380
|
template. E.g.
|
416
381
|
|
417
382
|
```ruby
|
418
|
-
|
383
|
+
HighlanderComponent do
|
419
384
|
Name 's3'
|
420
385
|
DependsOn 'vpc@1.0.3'
|
421
386
|
end
|
@@ -433,46 +398,7 @@ so extension methods can be consumed within cfndsl template.
|
|
433
398
|
#### Referencing
|
434
399
|
|
435
400
|
|
436
|
-
## Finding
|
437
|
-
|
438
|
-
|
439
|
-
Templates are located by default in following locations
|
440
|
-
|
441
|
-
- `$WD`
|
442
|
-
- `$WD/$componentname`
|
443
|
-
- `$WD/components/$componentname`
|
444
|
-
- `~/.cfhighlander/components/componentname/componentversion`
|
445
|
-
- `https://github.com/cfhighlander/theonestack/hl-component-$componentname` on `master` branch
|
446
|
-
|
447
|
-
Location of component templates can be given as git/github repo:
|
448
|
-
|
449
|
-
```ruby
|
450
|
-
|
451
|
-
CfhighlanderTemplate do
|
452
|
-
|
453
|
-
# pulls directly from master branch of https://github.com/theonestack/hl-component-vpc
|
454
|
-
Component name: 'vpc0', template: 'vpc'
|
455
|
-
|
456
|
-
# specify branch github.com: or github: work. You specify branch with hash
|
457
|
-
Component name: 'vpc1', template: 'github:theonestack/hl-component-vpc#master'
|
458
|
-
|
459
|
-
# you can use git over ssh
|
460
|
-
# Component name: 'vpc2', template: 'git:git@github.com:theonestack/hl-component-vpc.git'
|
461
|
-
|
462
|
-
# use git over https
|
463
|
-
Component name: 'vpc3', template: 'git:https://github.com/theonestack/hl-component-sns.git'
|
464
|
-
|
465
|
-
# specify .snapshot to always clone fresh copy
|
466
|
-
Component name: 'vpc4', template: 'git:https://github.com/theonestack/hl-component-sns.git#master.snapshot'
|
467
|
-
|
468
|
-
# by default, if not found locally, highlander will search for https://github.com/theonestack/component-$componentname
|
469
|
-
# in v${version} branch (or tag for that matter)
|
470
|
-
Component name: 'vpc5', template: 'vpc@1.0.4'
|
471
|
-
|
472
|
-
end
|
473
|
-
|
474
|
-
```
|
475
|
-
|
401
|
+
## Finding and loading components
|
476
402
|
|
477
403
|
## Rendering CloudFormation templates
|
478
404
|
|
@@ -482,4 +408,4 @@ end
|
|
482
408
|
|
483
409
|
Any extensions placed within `cfndsl_ext` folder will be
|
484
410
|
available in cfndsl templates of all components. Any extensions placed within `hl_ext` folder are
|
485
|
-
available in
|
411
|
+
available in highlander templates of all components.
|
data/bin/cfhighlander
CHANGED
@@ -9,10 +9,10 @@
|
|
9
9
|
|
10
10
|
require 'thor'
|
11
11
|
require 'rubygems'
|
12
|
-
require_relative '../lib
|
13
|
-
require_relative '../lib/
|
14
|
-
require_relative '../lib/
|
15
|
-
require_relative '../lib/
|
12
|
+
require_relative '../lib//highlander.compiler'
|
13
|
+
require_relative '../lib/highlander.factory'
|
14
|
+
require_relative '../lib/highlander.publisher'
|
15
|
+
require_relative '../lib/highlander.validator'
|
16
16
|
|
17
17
|
class HighlanderCli < Thor
|
18
18
|
|
@@ -22,15 +22,15 @@ class HighlanderCli < Thor
|
|
22
22
|
|
23
23
|
desc 'configcompile component[@version]', 'Compile Highlander components configuration'
|
24
24
|
|
25
|
-
def configcompile(
|
25
|
+
def configcompile(component_name)
|
26
26
|
|
27
27
|
# find and load component
|
28
|
-
component_loader =
|
29
|
-
component = component_loader.
|
28
|
+
component_loader = Highlander::Factory::ComponentFactory.new
|
29
|
+
component = component_loader.findComponent(component_name)
|
30
30
|
component.load
|
31
31
|
|
32
32
|
# compile cfndsl template
|
33
|
-
component_compiler =
|
33
|
+
component_compiler = Highlander::Compiler::ComponentCompiler.new(component)
|
34
34
|
component_compiler.writeConfig(true)
|
35
35
|
end
|
36
36
|
|
@@ -50,7 +50,7 @@ class HighlanderCli < Thor
|
|
50
50
|
component = build_component(options, component_name)
|
51
51
|
|
52
52
|
# compile cfndsl template
|
53
|
-
component_compiler =
|
53
|
+
component_compiler = Highlander::Compiler::ComponentCompiler.new(component)
|
54
54
|
component_compiler.silent_mode = options[:quiet]
|
55
55
|
out_format = options[:format]
|
56
56
|
component_compiler.compileCfnDsl out_format
|
@@ -75,12 +75,12 @@ class HighlanderCli < Thor
|
|
75
75
|
component = build_component(options, component_name)
|
76
76
|
|
77
77
|
# compile cloud formation
|
78
|
-
component_compiler =
|
78
|
+
component_compiler = Highlander::Compiler::ComponentCompiler.new(component)
|
79
79
|
component_compiler.silent_mode = options[:quiet]
|
80
80
|
out_format = options[:format]
|
81
81
|
component_compiler.compileCloudFormation out_format
|
82
82
|
if options[:validate]
|
83
|
-
component_validator =
|
83
|
+
component_validator = Highlander::Cloudformation::Validator.new(component)
|
84
84
|
component_validator.validate(component_compiler.cfn_template_paths, out_format)
|
85
85
|
end
|
86
86
|
component_compiler
|
@@ -103,7 +103,7 @@ class HighlanderCli < Thor
|
|
103
103
|
|
104
104
|
def cfpublish(component_name)
|
105
105
|
compiler = cfcompile(component_name)
|
106
|
-
publisher =
|
106
|
+
publisher = Highlander::Publisher::Component.new(compiler.component, false)
|
107
107
|
publisher.publishFiles(compiler.cfn_template_paths + compiler.lambda_src_paths)
|
108
108
|
end
|
109
109
|
|
@@ -117,35 +117,37 @@ class HighlanderCli < Thor
|
|
117
117
|
method_option :version, :type => :string, :required => false, :default => nil, :aliases => '-v',
|
118
118
|
:desc => 'Distribution component version, defaults to latest'
|
119
119
|
|
120
|
-
def publish(
|
120
|
+
def publish(component_name)
|
121
121
|
component_version = options[:version]
|
122
122
|
distribution_bucket = options[:dstbucket]
|
123
123
|
distribution_prefix = options[:dstprefix]
|
124
124
|
|
125
125
|
# find and load component
|
126
|
-
component_loader =
|
127
|
-
component = component_loader.
|
126
|
+
component_loader = Highlander::Factory::ComponentFactory.new
|
127
|
+
component = component_loader.findComponent(component_name)
|
128
128
|
component.version = component_version
|
129
129
|
component.distribution_bucket = distribution_bucket unless distribution_bucket.nil?
|
130
130
|
component.distribution_prefix = distribution_prefix unless distribution_prefix.nil?
|
131
131
|
component.load
|
132
132
|
|
133
|
-
publisher =
|
133
|
+
publisher = Highlander::Publisher::Component.new(component, true)
|
134
134
|
publisher.publishComponent
|
135
135
|
end
|
136
136
|
|
137
137
|
end
|
138
138
|
|
139
139
|
# build component from passed cli options
|
140
|
-
def build_component(options,
|
141
|
-
|
140
|
+
def build_component(options, component_name)
|
141
|
+
if ENV['HIGHLANDER_WORKDIR'].nil?
|
142
|
+
ENV['HIGHLANDER_WORKDIR'] = Dir.pwd
|
143
|
+
end
|
142
144
|
component_version = options[:version]
|
143
145
|
distribution_bucket = options[:dstbucket]
|
144
146
|
distribution_prefix = options[:dstprefix]
|
145
147
|
|
146
148
|
# find and load component
|
147
|
-
component_loader =
|
148
|
-
component = component_loader.
|
149
|
+
component_loader = Highlander::Factory::ComponentFactory.new
|
150
|
+
component = component_loader.findComponent(component_name)
|
149
151
|
component.version = component_version unless component_version.nil?
|
150
152
|
component.distribution_bucket = distribution_bucket unless distribution_bucket.nil?
|
151
153
|
component.distribution_prefix = distribution_prefix unless distribution_prefix.nil?
|
@@ -153,11 +155,4 @@ def build_component(options, template_name)
|
|
153
155
|
component
|
154
156
|
end
|
155
157
|
|
156
|
-
if ENV['CFHIGHLANDER_WORKDIR'].nil?
|
157
|
-
ENV['CFHIGHLANDER_WORKDIR'] = Dir.pwd
|
158
|
-
end
|
159
|
-
if ENV['HIGHLANDER_WORKDIR'].nil?
|
160
|
-
ENV['HIGHLANDER_WORKDIR'] = Dir.pwd
|
161
|
-
end
|
162
|
-
|
163
158
|
HighlanderCli.start
|