ufo 3.1.2 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/bin/commit_docs.sh +26 -0
  3. data/.circleci/config.yml +13 -0
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile.lock +6 -4
  6. data/Rakefile +7 -0
  7. data/docs/_config.yml +3 -0
  8. data/docs/_docs/conventions.md +3 -3
  9. data/docs/_docs/install.md +5 -5
  10. data/docs/_docs/settings.md +3 -3
  11. data/docs/_docs/structure.md +2 -2
  12. data/docs/_docs/tutorial-ufo-docker-build.md +1 -1
  13. data/docs/_docs/tutorial-ufo-init.md +1 -1
  14. data/docs/_docs/tutorial-ufo-ship.md +3 -7
  15. data/docs/_docs/tutorial-ufo-ships.md +2 -2
  16. data/docs/_docs/tutorial-ufo-tasks-build.md +7 -7
  17. data/docs/_docs/tutorial.md +1 -1
  18. data/docs/_docs/ufo-env.md +5 -5
  19. data/docs/_docs/ufo-tasks-register.md +0 -4
  20. data/docs/_docs/variables.md +6 -7
  21. data/docs/_includes/content.html +5 -0
  22. data/docs/_includes/css/main.css +23 -4
  23. data/docs/_includes/css/ufo.css +9 -9
  24. data/docs/_includes/reference.md +5 -0
  25. data/docs/_includes/subnav.html +16 -33
  26. data/docs/_reference/ufo-completion.md +46 -0
  27. data/docs/_reference/ufo-completion_script.md +27 -0
  28. data/docs/_reference/ufo-deploy.md +51 -0
  29. data/docs/_reference/ufo-destroy.md +34 -0
  30. data/docs/{_docs → _reference}/ufo-docker-base.md +36 -17
  31. data/docs/_reference/ufo-docker-build.md +81 -0
  32. data/docs/_reference/ufo-docker-clean.md +44 -0
  33. data/docs/_reference/ufo-docker-help.md +15 -0
  34. data/docs/_reference/ufo-docker-name.md +37 -0
  35. data/docs/_reference/ufo-docker-push.md +49 -0
  36. data/docs/_reference/ufo-docker.md +35 -0
  37. data/docs/_reference/ufo-init.md +74 -0
  38. data/docs/_reference/ufo-scale.md +30 -0
  39. data/docs/_reference/ufo-ship.md +100 -0
  40. data/docs/_reference/ufo-ships.md +77 -0
  41. data/docs/_reference/ufo-task.md +37 -0
  42. data/docs/_reference/ufo-tasks-build.md +179 -0
  43. data/docs/_reference/ufo-tasks-help.md +15 -0
  44. data/docs/_reference/ufo-tasks-register.md +29 -0
  45. data/docs/_reference/ufo-tasks.md +35 -0
  46. data/docs/_reference/ufo-upgrade3.md +23 -0
  47. data/docs/_reference/ufo-version.md +23 -0
  48. data/docs/articles.md +2 -0
  49. data/docs/docs.md +3 -3
  50. data/docs/quick-start.md +2 -2
  51. data/docs/reference.md +18 -0
  52. data/lib/ufo/cli.rb +13 -13
  53. data/lib/ufo/docker.rb +5 -5
  54. data/lib/ufo/ecr/auth.rb +6 -1
  55. data/lib/ufo/ecr/cleaner.rb +1 -1
  56. data/lib/ufo/help/completion.md +1 -1
  57. data/lib/ufo/help/completions.md +1 -1
  58. data/lib/ufo/help/deploy.md +5 -1
  59. data/lib/ufo/help/destroy.md +7 -3
  60. data/lib/ufo/help/docker.md +1 -1
  61. data/lib/ufo/help/docker/base.md +34 -4
  62. data/lib/ufo/help/docker/build.md +59 -4
  63. data/lib/ufo/help/docker/clean.md +12 -6
  64. data/lib/ufo/help/docker/name.md +10 -10
  65. data/lib/ufo/help/docker/push.md +23 -6
  66. data/lib/ufo/help/hello.md +1 -1
  67. data/lib/ufo/help/init.md +43 -5
  68. data/lib/ufo/help/scale.md +4 -3
  69. data/lib/ufo/help/ship.md +59 -8
  70. data/lib/ufo/help/ships.md +35 -9
  71. data/lib/ufo/help/task.md +1 -1
  72. data/lib/ufo/help/tasks.md +1 -1
  73. data/lib/ufo/help/tasks/build.md +155 -4
  74. data/lib/ufo/help/tasks/register.md +12 -3
  75. data/lib/ufo/ship.rb +2 -4
  76. data/lib/ufo/tasks.rb +2 -2
  77. data/lib/ufo/version.rb +1 -1
  78. data/spec/lib/ship_spec.rb +2 -1
  79. data/ufo.gemspec +3 -3
  80. metadata +44 -21
  81. data/docs/_docs/commands.md +0 -10
  82. data/docs/_docs/ufo-deploy.md +0 -30
  83. data/docs/_docs/ufo-destroy.md +0 -19
  84. data/docs/_docs/ufo-docker-build.md +0 -79
  85. data/docs/_docs/ufo-docker-clean.md +0 -27
  86. data/docs/_docs/ufo-docker-name.md +0 -15
  87. data/docs/_docs/ufo-docker-push.md +0 -43
  88. data/docs/_docs/ufo-help.md +0 -22
  89. data/docs/_docs/ufo-init.md +0 -54
  90. data/docs/_docs/ufo-scale.md +0 -21
  91. data/docs/_docs/ufo-ship.md +0 -75
  92. data/docs/_docs/ufo-ships.md +0 -52
  93. data/docs/_docs/ufo-tasks-build.md +0 -166
  94. data/lib/ufo/completion.rb +0 -15
  95. data/lib/ufo/sub.rb +0 -12
@@ -1,18 +1,44 @@
1
- Builds docker image, registers it and ships it to multiple services. This deploys the same docker image to multiple ECS services.
1
+ The `ufo ships` command allows you to deploy the *same* Docker image and task definition to multiple ECS services. It is a common pattern to have the same code base running on different roles. For example, say you have an application with 3 roles:
2
2
 
3
- Examples:
3
+ 1. web - serves web requests.
4
+ 2. worker - processes background jobs.
5
+ 3. clock - schedules background jobs.
4
6
 
5
- ufo ships hi-web hi-clock hi-worker
7
+ Instead of using the [ufo ship]({% link _reference/ufo-ship.md %}) and build and deploying the code 3 times you can instead use `ufo ships`. This will result in the *same* Docker image and *same* task definition being deployed to all 3 services. Example usage:
6
8
 
7
- By convention the task definition and service names match for each of the services you ship. If you need to override to this convention then you can specify the task definition for each service with a special syntax. In the special syntax the service and task definition is separated by a colon. Example:
9
+ ufo ships hi-web hi-worker hi-clock
8
10
 
9
- ufo ships hi-web-1:hi-web hi-clock-1 hi-worker-1
11
+ ## Shell expansion
10
12
 
11
- Here ufo will deploy to the hi-web-1 ECS Service using the hi-web task definition, but use the convention for the rest of the service.
13
+ Since the ECS service names are provided as a list you can shorten the command by using bash shell expansion 😁
14
+
15
+ ufo ships hi-{web,worker,clock}
16
+
17
+ If you're new to shell expansion, run this to understand why above works just as well:
18
+
19
+ $ echo hi-{web,worker,clock}
20
+ hi-web hi-worker hi-clock
21
+
22
+ ## Overriding convention
23
+
24
+ As explained in detail in [Conventions]({% link _docs/conventions.md %}) the task definition and service name are the same by convention. This convention also applies for each of the services being shipped in the list. The task definition and service names match for each of the services in the list. If you would like to override the convention as part of the ships command then you use a special syntax. In the special syntax the service and task definition is separated by a colon. Examples:
25
+
26
+ ufo ships hi-web-1:hi-web hi-clock-1 hi-worker-1
27
+ ufo ships hi-web-1:my-task hi-clock-1:another-task hi-worker-1:third-task
28
+
29
+ ## ufo ships Options
30
+
31
+ The `ufo ships`, `ufo ship`, `ufo deploy` command support the same options. The options are presented here again for convenience:
32
+
33
+ {% include ufo-ship-options.md %}
34
+
35
+ Note: The `--task` option is not used with the `ufo ships` command.
36
+
37
+ ## ELB Target Group
12
38
 
13
39
  For each service being deployed to, ufo will create the ECS service if the service does not yet exist on the cluster. The deploy process will prompt you for the ELB `--target-group` if you are deploying to a 'web' service that does not yet exist. Ufo determines that it is a web service by the name of the service. If the service has 'web' in the name then it is considered a web service. If it is not a web service then the `--target-group` option gets ignored.
14
40
 
15
- The prommpt can be bypassed by specifying a valid `--target-group` option or specifying the `---no-target-group-prompt` option. Examples:
41
+ The prommt can be bypassed by specifying a valid `--target-group` option or specifying the `---no-target-group-prompt` option. ## Examples
16
42
 
17
- ufo ships hi-web hi-clock hi-worker --target-group arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/hi-web/jsdlfjsdkd
18
- ufo ships hi-web hi-clock hi-worker --no-target-group-prompt
43
+ ufo ships hi-web hi-clock hi-worker --target-group arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/hi-web/jsdlfjsdkd
44
+ ufo ships hi-web hi-clock hi-worker --no-target-group-prompt
@@ -1,4 +1,4 @@
1
- Examples:
1
+ ## Examples
2
2
 
3
3
  To run a one time task with ECS:
4
4
 
@@ -1,4 +1,4 @@
1
- Examples:
1
+ ## Examples
2
2
 
3
3
  ufo tasks build
4
4
 
@@ -1,7 +1,158 @@
1
- Examples:
1
+ ## Summarized Example
2
2
 
3
- ufo tasks build
3
+ ufo tasks build
4
4
 
5
- Builds all the task defintiions.
5
+ Builds all the task defintiions. Note all the existing ufo/output generated task defintions are wiped out.
6
+
7
+ ## Explanation
8
+
9
+ The command `ufo tasks build` generates the task definitions locally and writes them to the `output/` folder. There are 2 files that it uses in order to produce the raw AWS task definitions files.
10
+
11
+ 1. ufo/templates/main.json.erb
12
+ 2. ufo/task_definitions.rb
13
+
14
+ Here's an example of each of them:
15
+
16
+ **main.json.erb**:
17
+
18
+ {
19
+ "family": "<%= @family %>",
20
+ "containerDefinitions": [
21
+ {
22
+ "name": "<%= @name %>",
23
+ "image": "<%= @image %>",
24
+ "cpu": <%= @cpu %>,
25
+ <% if @memory %>
26
+ "memory": <%= @memory %>,
27
+ <% end %>
28
+ <% if @memory_reservation %>
29
+ "memoryReservation": <%= @memory_reservation %>,
30
+ <% end %>
31
+ <% if @container_port %>
32
+ "portMappings": [
33
+ {
34
+ "containerPort": "<%= @container_port %>",
35
+ "protocol": "tcp"
36
+ }
37
+ ],
38
+ <% end %>
39
+ "command": <%= @command.to_json %>,
40
+ <% if @environment %>
41
+ "environment": <%= @environment.to_json %>,
42
+ <% end %>
43
+ <% if @awslogs_group %>
44
+ "logConfiguration": {
45
+ "logDriver": "awslogs",
46
+ "options": {
47
+ "awslogs-group": "<%= @awslogs_group %>",
48
+ "awslogs-region": "<%= @awslogs_region || 'us-east-1' %>",
49
+ "awslogs-stream-prefix": "<%= @awslogs_stream_prefix %>"
50
+ }
51
+ },
52
+ <% end %>
53
+ "essential": true
54
+ }
55
+ ]
56
+ }
57
+
58
+ **task_definitions.rb**:
59
+
60
+ ```ruby
61
+ task_definition "hi-web" do
62
+ source "main" # will use ufo/templates/main.json.erb
63
+ variables(
64
+ family: task_definition_name,
65
+ name: "web",
66
+ container_port: helper.dockerfile_port,
67
+ command: ["bin/web"]
68
+ )
69
+ end
70
+
71
+ task_definition "hi-worker" do
72
+ source "main" # will use ufo/templates/main.json.erb
73
+ variables(
74
+ family: task_definition_name,
75
+ name: "worker",
76
+ command: ["bin/worker"]
77
+ )
78
+ end
79
+
80
+ task_definition "hi-clock" do
81
+ source "main" # will use ufo/templates/main.json.erb
82
+ variables(
83
+ family: task_definition_name,
84
+ name: "clock",
85
+ command: ["bin/clock"]
86
+ )
87
+ end
88
+ ```
89
+
90
+ The shared variables are set in the variables folder:
91
+
92
+ **ufo/variables/base.rb**:
93
+
94
+ ```ruby
95
+ @image = helper.full_image_name # includes the git sha tongueroo/hi:ufo-[sha].
96
+ @cpu = 128
97
+ @memory_reservation = 256
98
+ @environment = helper.env_file(".env")
99
+ ```
100
+
101
+ **ufo/variables/production.rb**:
102
+
103
+ ```ruby
104
+ @environment = helper.env_vars(%Q{
105
+ RAILS_ENV=production
106
+ SECRET_KEY_BASE=secret
107
+ })
108
+ ```
109
+
110
+ Ufo combines the `main.json.erb` template, `task_definitions.rb` definitions, and variables in the `.ufo/variables` folder. It then generates the raw AWS formatted task definition in the `output` folder.
111
+
112
+ To build the task definitions:
113
+
114
+ ufo tasks build
115
+
116
+ You should see output similar to below:
117
+
118
+ $ ufo tasks build
119
+ Building Task Definitions...
120
+ Generating Task Definitions:
121
+ ufo/output/hi-web.json
122
+ ufo/output/hi-worker.json
123
+ ufo/output/hi-clock.json
124
+ Task Definitions built in ufo/output.
125
+ $
126
+
127
+ Let's take a look at one of the generated files: `.ufo/output/hi-web.json`.
128
+
129
+ {
130
+ "family": "hi-web",
131
+ "containerDefinitions": [
132
+ {
133
+ "name": "web",
134
+ "image": "tongueroo/hi:ufo-2017-06-11T22-22-32-a18aa30",
135
+ "cpu": 128,
136
+ "memoryReservation": 256,
137
+ "portMappings": [
138
+ {
139
+ "containerPort": "3000",
140
+ "protocol": "tcp"
141
+ }
142
+ ],
143
+ "command": [
144
+ "bin/web"
145
+ ],
146
+ "environment": [
147
+ {
148
+ "name": "RAILS_ENV",
149
+ "value": "staging"
150
+ }
151
+ ],
152
+ "essential": true
153
+ }
154
+ ]
155
+ }
156
+
157
+ If you need to modify the task definition template to suite your own needs it is super simple, just edit `main.json.erb`. No need to dive deep into internal code that builds up the task definition with some internal structure. It is all there for you to fully control.
6
158
 
7
- Note all the existing ufo/output generated task defintions are wiped out.
@@ -1,5 +1,14 @@
1
- Examples:
1
+ The `ufo tasks register` command registers all the generated task definitions in `output/` to AWS ECS. Let's run it:
2
2
 
3
- ufo tasks register
3
+ ufo tasks register
4
+
5
+ You should see something similiar to this:
6
+
7
+ hi-clock task definition registered.
8
+ hi-web task definition registered.
9
+ hi-worker task definition registered.
10
+
11
+ You can verify that the task definitions have been registered properly by viewing the AWS ECS Console Task Definitions page. You should see something similar to this:
12
+
13
+ <img src="/img/tutorials/ecs-console-task-definitions.png" class="doc-photo" />
4
14
 
5
- All the task defintiions in ufo/output registered.
@@ -99,8 +99,6 @@ module Ufo
99
99
  # ELB to drain the register container otherwise. This might cut off some requests but
100
100
  # providing this as an option that can be turned of beause I've seen deploys go way too
101
101
  # slow.
102
- puts "@options[:stop_old_tasks] #{@options[:stop_old_tasks].inspect}"
103
- puts "old_tasks.size #{old_tasks.size}"
104
102
  old_tasks.each do |task|
105
103
  puts "stopping task.task_definition_arn #{task.task_definition_arn.inspect}"
106
104
  ecs.stop_task(cluster: @cluster, task: task.task_arn, reason: reason)
@@ -358,8 +356,8 @@ module Ufo
358
356
  end
359
357
 
360
358
  def ensure_cluster_exist
361
- cluster_exist = ecs_clusters.first
362
- unless cluster_exist
359
+ cluster = ecs_clusters.first
360
+ unless cluster && cluster.status == "ACTIVE"
363
361
  message = "#{@cluster} cluster created."
364
362
  if @options[:noop]
365
363
  message = "NOOP #{message}"
@@ -3,14 +3,14 @@ module Ufo
3
3
  autoload :Builder, 'ufo/tasks/builder'
4
4
  autoload :Register, 'ufo/tasks/register'
5
5
 
6
- desc "build", "builds task definitions"
6
+ desc "build", "Build task definitions."
7
7
  long_desc Help.text("tasks:build")
8
8
  option :pretty, type: :boolean, default: true, desc: "Pretty format the json for the task definitions"
9
9
  def build
10
10
  Tasks::Builder.new(options).build
11
11
  end
12
12
 
13
- desc "register", "register all built task definitions in ufo/output"
13
+ desc "register", "Register all built task definitions in `ufo/output` folder."
14
14
  long_desc Help.text("tasks:register")
15
15
  def register
16
16
  Tasks::Register.register(:all, options)
@@ -1,3 +1,3 @@
1
1
  module Ufo
2
- VERSION = "3.1.2"
2
+ VERSION = "3.2.0"
3
3
  end
@@ -59,7 +59,8 @@ describe Ufo::Ship do
59
59
  # ensure_cluster_exist calls this and this makes sure that the cluster 'exists'
60
60
  def ecs_describe_clusters
61
61
  describe_clusters = double("ecs-describe-clusters")
62
- allow(describe_clusters).to receive(:clusters).and_return(["cluster1"])
62
+ cluster1 = OpenStruct.new(status: "ACTIVE")
63
+ allow(describe_clusters).to receive(:clusters).and_return([cluster1])
63
64
  describe_clusters
64
65
  end
65
66
 
@@ -7,8 +7,7 @@ Gem::Specification.new do |spec|
7
7
  spec.version = Ufo::VERSION
8
8
  spec.authors = ["Tung Nguyen"]
9
9
  spec.email = ["tongueroo@gmail.com"]
10
- spec.description = %q{Build Docker Containers and Ship Them to AWS ECS}
11
- spec.summary = %q{Build Docker Containers and Ship Them to AWS ECS}
10
+ spec.summary = "Build Docker Containers and Ship Them to AWS ECS"
12
11
  spec.homepage = "http://ufoships.com"
13
12
  spec.license = "MIT"
14
13
 
@@ -24,11 +23,12 @@ Gem::Specification.new do |spec|
24
23
  spec.add_dependency "aws-sdk-ecr"
25
24
  spec.add_dependency "aws-sdk-ecs"
26
25
  spec.add_dependency "aws-sdk-elasticloadbalancingv2"
26
+ spec.add_dependency "cli_markdown"
27
27
  spec.add_dependency "colorize"
28
28
  spec.add_dependency "deep_merge"
29
29
  spec.add_dependency "plissken"
30
- spec.add_dependency "thor"
31
30
  spec.add_dependency "render_me_pretty"
31
+ spec.add_dependency "thor"
32
32
 
33
33
  spec.add_development_dependency "bundler"
34
34
  spec.add_development_dependency "byebug"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ufo
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.2
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-22 00:00:00.000000000 Z
11
+ date: 2018-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-cloudwatchlogs
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: cli_markdown
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: colorize
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -123,7 +137,7 @@ dependencies:
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
- name: thor
140
+ name: render_me_pretty
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - ">="
@@ -137,7 +151,7 @@ dependencies:
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
- name: render_me_pretty
154
+ name: thor
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
157
  - - ">="
@@ -206,7 +220,7 @@ dependencies:
206
220
  - - ">="
207
221
  - !ruby/object:Gem::Version
208
222
  version: '0'
209
- description: Build Docker Containers and Ship Them to AWS ECS
223
+ description:
210
224
  email:
211
225
  - tongueroo@gmail.com
212
226
  executables:
@@ -214,6 +228,7 @@ executables:
214
228
  extensions: []
215
229
  extra_rdoc_files: []
216
230
  files:
231
+ - ".circleci/bin/commit_docs.sh"
217
232
  - ".circleci/config.yml"
218
233
  - ".gitignore"
219
234
  - ".gitmodules"
@@ -234,7 +249,6 @@ files:
234
249
  - docs/_config.yml
235
250
  - docs/_docs/auto-completion.md
236
251
  - docs/_docs/automated-cleanup.md
237
- - docs/_docs/commands.md
238
252
  - docs/_docs/conventions.md
239
253
  - docs/_docs/helpers.md
240
254
  - docs/_docs/install.md
@@ -250,20 +264,7 @@ files:
250
264
  - docs/_docs/tutorial-ufo-ships.md
251
265
  - docs/_docs/tutorial-ufo-tasks-build.md
252
266
  - docs/_docs/tutorial.md
253
- - docs/_docs/ufo-deploy.md
254
- - docs/_docs/ufo-destroy.md
255
- - docs/_docs/ufo-docker-base.md
256
- - docs/_docs/ufo-docker-build.md
257
- - docs/_docs/ufo-docker-clean.md
258
- - docs/_docs/ufo-docker-name.md
259
- - docs/_docs/ufo-docker-push.md
260
267
  - docs/_docs/ufo-env.md
261
- - docs/_docs/ufo-help.md
262
- - docs/_docs/ufo-init.md
263
- - docs/_docs/ufo-scale.md
264
- - docs/_docs/ufo-ship.md
265
- - docs/_docs/ufo-ships.md
266
- - docs/_docs/ufo-tasks-build.md
267
268
  - docs/_docs/ufo-tasks-register.md
268
269
  - docs/_docs/variables.md
269
270
  - docs/_includes/about.html
@@ -290,12 +291,35 @@ files:
290
291
  - docs/_includes/modals.html
291
292
  - docs/_includes/nav.html
292
293
  - docs/_includes/quotes.html
294
+ - docs/_includes/reference.md
293
295
  - docs/_includes/subnav.html
294
296
  - docs/_includes/summary.html
295
297
  - docs/_includes/ufo-ship-options.md
296
298
  - docs/_includes/uses.html
297
299
  - docs/_layouts/default.html
298
300
  - docs/_layouts/style.css
301
+ - docs/_reference/ufo-completion.md
302
+ - docs/_reference/ufo-completion_script.md
303
+ - docs/_reference/ufo-deploy.md
304
+ - docs/_reference/ufo-destroy.md
305
+ - docs/_reference/ufo-docker-base.md
306
+ - docs/_reference/ufo-docker-build.md
307
+ - docs/_reference/ufo-docker-clean.md
308
+ - docs/_reference/ufo-docker-help.md
309
+ - docs/_reference/ufo-docker-name.md
310
+ - docs/_reference/ufo-docker-push.md
311
+ - docs/_reference/ufo-docker.md
312
+ - docs/_reference/ufo-init.md
313
+ - docs/_reference/ufo-scale.md
314
+ - docs/_reference/ufo-ship.md
315
+ - docs/_reference/ufo-ships.md
316
+ - docs/_reference/ufo-task.md
317
+ - docs/_reference/ufo-tasks-build.md
318
+ - docs/_reference/ufo-tasks-help.md
319
+ - docs/_reference/ufo-tasks-register.md
320
+ - docs/_reference/ufo-tasks.md
321
+ - docs/_reference/ufo-upgrade3.md
322
+ - docs/_reference/ufo-version.md
299
323
  - docs/articles.md
300
324
  - docs/bin/web
301
325
  - docs/css/font-awesome/css/font-awesome.css
@@ -328,6 +352,7 @@ files:
328
352
  - docs/js/jquery.easing.min.js
329
353
  - docs/js/nav.js
330
354
  - docs/quick-start.md
355
+ - docs/reference.md
331
356
  - docs/style.css
332
357
  - exe/ufo
333
358
  - lib/template/.env
@@ -346,7 +371,6 @@ files:
346
371
  - lib/ufo/completer.rb
347
372
  - lib/ufo/completer/script.rb
348
373
  - lib/ufo/completer/script.sh
349
- - lib/ufo/completion.rb
350
374
  - lib/ufo/core.rb
351
375
  - lib/ufo/default.rb
352
376
  - lib/ufo/default/settings.yml
@@ -394,7 +418,6 @@ files:
394
418
  - lib/ufo/sequence.rb
395
419
  - lib/ufo/setting.rb
396
420
  - lib/ufo/ship.rb
397
- - lib/ufo/sub.rb
398
421
  - lib/ufo/task.rb
399
422
  - lib/ufo/tasks.rb
400
423
  - lib/ufo/tasks/builder.rb