shipitron 1.1.0 → 1.3.2
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 +4 -4
- data/.dockerignore +1 -0
- data/.gitattributes +1 -0
- data/.gitignore +1 -0
- data/Dockerfile +28 -5
- data/Dockerfile.release +28 -5
- data/Gemfile +1 -0
- data/README.md +48 -9
- data/build_dev.sh +1 -1
- data/docker-compose.yml +24 -0
- data/lib/shipitron/cli.rb +10 -4
- data/lib/shipitron/client.rb +9 -0
- data/lib/shipitron/client/bootstrap_application.rb +1 -0
- data/lib/shipitron/client/create_ecs_services.rb +7 -7
- data/lib/shipitron/client/deploy_application.rb +1 -0
- data/lib/shipitron/client/ensure_deploy_not_running.rb +2 -1
- data/lib/shipitron/client/fetch_clusters.rb +1 -0
- data/lib/shipitron/client/force_deploy.rb +1 -0
- data/lib/shipitron/client/load_application_config.rb +4 -0
- data/lib/shipitron/client/load_templates.rb +1 -0
- data/lib/shipitron/client/register_ecs_task_definitions.rb +5 -5
- data/lib/shipitron/client/run_ecs_tasks.rb +14 -1
- data/lib/shipitron/docker_image.rb +4 -1
- data/lib/shipitron/find_docker_volume_name.rb +68 -0
- data/lib/shipitron/git_info.rb +57 -0
- data/lib/shipitron/mustache_yaml_parser.rb +12 -8
- data/lib/shipitron/s3_copy.rb +46 -0
- data/lib/shipitron/server/deploy_application.rb +3 -0
- data/lib/shipitron/server/docker/build_image.rb +4 -1
- data/lib/shipitron/server/docker/configure.rb +46 -10
- data/lib/shipitron/server/docker/push_image.rb +3 -0
- data/lib/shipitron/server/docker/run_build_script.rb +17 -10
- data/lib/shipitron/server/download_build_cache.rb +17 -4
- data/lib/shipitron/server/git/clone_local_copy.rb +3 -4
- data/lib/shipitron/server/git/update_cache.rb +1 -0
- data/lib/shipitron/server/run_post_build.rb +40 -1
- data/lib/shipitron/server/transform_cli_args.rb +6 -0
- data/lib/shipitron/server/update_ecs_task_definitions.rb +2 -1
- data/lib/shipitron/server/upload_build_cache.rb +14 -8
- data/lib/shipitron/version.rb +1 -1
- data/scripts/docker-entrypoint.sh +9 -0
- data/shipitron.gemspec +8 -6
- metadata +53 -20
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'shipitron'
|
2
2
|
require 'shipitron/fetch_bucket'
|
3
|
+
require 'shipitron/s3_copy'
|
3
4
|
|
4
5
|
module Shipitron
|
5
6
|
module Server
|
@@ -8,20 +9,28 @@ module Shipitron
|
|
8
9
|
|
9
10
|
required :application
|
10
11
|
required :s3_cache_bucket
|
12
|
+
required :build_cache_location
|
13
|
+
required :region
|
11
14
|
|
12
15
|
def call
|
13
16
|
Logger.info "Downloading build cache from bucket #{s3_cache_bucket}"
|
14
17
|
|
15
|
-
s3_file = bucket.files.
|
18
|
+
s3_file = bucket.files.head("#{application}.build-cache.archive")
|
16
19
|
if s3_file.nil?
|
17
20
|
Logger.warn 'Build cache not found.'
|
18
21
|
return
|
19
22
|
end
|
20
23
|
|
21
|
-
build_cache = Pathname.new("/home/shipitron/#{application}
|
24
|
+
build_cache = Pathname.new("/home/shipitron/#{application}/#{build_cache_location}")
|
22
25
|
build_cache.parent.mkpath
|
23
|
-
|
24
|
-
|
26
|
+
|
27
|
+
result = S3Copy.call(
|
28
|
+
source: "s3://#{s3_cache_bucket}/#{application}.build-cache.archive",
|
29
|
+
destination: build_cache.to_s,
|
30
|
+
region: context.region
|
31
|
+
)
|
32
|
+
if result.failure?
|
33
|
+
fail_with_error!(message: 'Failed to download build cache!')
|
25
34
|
end
|
26
35
|
|
27
36
|
Logger.info 'Download complete.'
|
@@ -36,6 +45,10 @@ module Shipitron
|
|
36
45
|
context.s3_cache_bucket
|
37
46
|
end
|
38
47
|
|
48
|
+
def build_cache_location
|
49
|
+
context.build_cache_location
|
50
|
+
end
|
51
|
+
|
39
52
|
def bucket
|
40
53
|
@bucket ||= FetchBucket.call!(name: s3_cache_bucket).bucket
|
41
54
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'shipitron'
|
2
2
|
require 'shellwords'
|
3
|
+
require 'shipitron/git_info'
|
3
4
|
|
4
5
|
module Shipitron
|
5
6
|
module Server
|
@@ -22,10 +23,8 @@ module Shipitron
|
|
22
23
|
end
|
23
24
|
|
24
25
|
Logger.info 'Using this git commit:'
|
25
|
-
|
26
|
-
|
27
|
-
Logger.info `git --no-pager log --format='%aN (%h): %s' -n 1`.chomp
|
28
|
-
end
|
26
|
+
context.git_info = GitInfo.from_path(path: "/home/shipitron/#{application}")
|
27
|
+
Logger.info context.git_info.one_liner
|
29
28
|
end
|
30
29
|
|
31
30
|
private
|
@@ -25,6 +25,7 @@ module Shipitron
|
|
25
25
|
else
|
26
26
|
Logger.info 'Fetching new git commits'
|
27
27
|
FileUtils.cd('/home/shipitron/git-cache') do
|
28
|
+
`git gc --auto`
|
28
29
|
`git fetch -f #{Shellwords.escape repository_url} #{Shellwords.escape repository_branch}:#{Shellwords.escape repository_branch}`
|
29
30
|
end
|
30
31
|
end
|
@@ -9,6 +9,7 @@ module Shipitron
|
|
9
9
|
|
10
10
|
required :region
|
11
11
|
required :clusters
|
12
|
+
required :git_info
|
12
13
|
optional :post_builds
|
13
14
|
|
14
15
|
def call
|
@@ -26,7 +27,41 @@ module Shipitron
|
|
26
27
|
container_overrides: [
|
27
28
|
{
|
28
29
|
name: post_build.container_name,
|
29
|
-
command: post_build.command_ary
|
30
|
+
command: post_build.command_ary,
|
31
|
+
environment: [
|
32
|
+
{
|
33
|
+
name: "GIT_SHA",
|
34
|
+
value: git_info.sha
|
35
|
+
},
|
36
|
+
{
|
37
|
+
name: "GIT_SHORT_SHA",
|
38
|
+
value: git_info.short_sha
|
39
|
+
},
|
40
|
+
{
|
41
|
+
name: "GIT_EMAIL",
|
42
|
+
value: git_info.email
|
43
|
+
},
|
44
|
+
{
|
45
|
+
name: "GIT_NAME",
|
46
|
+
value: git_info.name
|
47
|
+
},
|
48
|
+
{
|
49
|
+
name: "GIT_MESSAGE",
|
50
|
+
value: git_info.summary
|
51
|
+
},
|
52
|
+
{
|
53
|
+
name: "GIT_TIMESTAMP",
|
54
|
+
value: git_info.timestamp
|
55
|
+
},
|
56
|
+
{
|
57
|
+
name: "GIT_BRANCH",
|
58
|
+
value: git_info.branch
|
59
|
+
},
|
60
|
+
{
|
61
|
+
name: "GIT_TAG",
|
62
|
+
value: git_info.tag
|
63
|
+
}
|
64
|
+
]
|
30
65
|
}
|
31
66
|
]
|
32
67
|
},
|
@@ -75,6 +110,10 @@ module Shipitron
|
|
75
110
|
def clusters
|
76
111
|
context.clusters
|
77
112
|
end
|
113
|
+
|
114
|
+
def git_info
|
115
|
+
context.git_info
|
116
|
+
end
|
78
117
|
end
|
79
118
|
end
|
80
119
|
end
|
@@ -12,7 +12,9 @@ module Shipitron
|
|
12
12
|
required :application
|
13
13
|
required :repository_url
|
14
14
|
optional :repository_branch
|
15
|
+
optional :registry
|
15
16
|
required :s3_cache_bucket
|
17
|
+
required :build_cache_location
|
16
18
|
required :image_name
|
17
19
|
required :named_tag
|
18
20
|
required :region
|
@@ -22,6 +24,7 @@ module Shipitron
|
|
22
24
|
optional :ecs_services
|
23
25
|
optional :ecs_service_templates
|
24
26
|
optional :build_script
|
27
|
+
optional :skip_push, default: false
|
25
28
|
optional :post_builds
|
26
29
|
|
27
30
|
before do
|
@@ -36,12 +39,15 @@ module Shipitron
|
|
36
39
|
application
|
37
40
|
repository_url
|
38
41
|
repository_branch
|
42
|
+
registry
|
39
43
|
s3_cache_bucket
|
44
|
+
build_cache_location
|
40
45
|
named_tag
|
41
46
|
region
|
42
47
|
clusters
|
43
48
|
ecs_services
|
44
49
|
build_script
|
50
|
+
skip_push
|
45
51
|
].each_with_object(cli_args) { |k, args| args[k] = context[k] }
|
46
52
|
|
47
53
|
cli_args.docker_image = DockerImage.new(name: context.image_name)
|
@@ -14,11 +14,12 @@ module Shipitron
|
|
14
14
|
required :docker_image
|
15
15
|
required :ecs_task_defs
|
16
16
|
optional :ecs_task_def_templates
|
17
|
+
optional :registry
|
17
18
|
|
18
19
|
before do
|
19
20
|
context.ecs_task_def_templates ||= []
|
20
21
|
context.templates = context.ecs_task_def_templates
|
21
|
-
context.template_context = { tag: docker_image.tag }
|
22
|
+
context.template_context = { tag: docker_image.tag, registry: context.registry }
|
22
23
|
end
|
23
24
|
|
24
25
|
organize [
|
@@ -8,21 +8,27 @@ module Shipitron
|
|
8
8
|
|
9
9
|
required :application
|
10
10
|
required :s3_cache_bucket
|
11
|
+
required :build_cache_location
|
12
|
+
required :region
|
11
13
|
|
12
14
|
def call
|
13
15
|
Logger.info "Uploading build cache to bucket #{s3_cache_bucket}"
|
14
16
|
|
15
|
-
build_cache = Pathname.new("/home/shipitron/#{application}
|
17
|
+
build_cache = Pathname.new("/home/shipitron/#{application}/#{build_cache_location}")
|
16
18
|
unless build_cache.exist?
|
17
19
|
Logger.warn 'Build cache not found.'
|
18
20
|
return
|
19
21
|
end
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
result = S3Copy.call(
|
24
|
+
source: build_cache.to_s,
|
25
|
+
destination: "s3://#{s3_cache_bucket}/#{application}.build-cache.archive",
|
26
|
+
region: context.region
|
27
|
+
)
|
28
|
+
if result.failure?
|
29
|
+
Logger.warn 'Failed to upload build cache!'
|
30
|
+
else
|
31
|
+
Logger.info 'Upload complete.'
|
26
32
|
end
|
27
33
|
end
|
28
34
|
|
@@ -35,8 +41,8 @@ module Shipitron
|
|
35
41
|
context.s3_cache_bucket
|
36
42
|
end
|
37
43
|
|
38
|
-
def
|
39
|
-
|
44
|
+
def build_cache_location
|
45
|
+
context.build_cache_location
|
40
46
|
end
|
41
47
|
end
|
42
48
|
end
|
data/lib/shipitron/version.rb
CHANGED
data/shipitron.gemspec
CHANGED
@@ -17,21 +17,23 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_runtime_dependency 'thor', '~> 0
|
20
|
+
spec.add_runtime_dependency 'thor', '~> 1.0'
|
21
21
|
spec.add_runtime_dependency 'aws-sdk-ecs', '~> 1.8'
|
22
|
-
spec.add_runtime_dependency 'hashie', '~>
|
23
|
-
spec.add_runtime_dependency 'metaractor', '~> 0
|
22
|
+
spec.add_runtime_dependency 'hashie', '~> 4.1'
|
23
|
+
spec.add_runtime_dependency 'metaractor', '~> 3.0'
|
24
24
|
spec.add_runtime_dependency 'diplomat', '~> 2.0'
|
25
|
-
spec.add_runtime_dependency 'fog-aws', '~>
|
25
|
+
spec.add_runtime_dependency 'fog-aws', '~> 3.6'
|
26
26
|
spec.add_runtime_dependency 'mime-types', '~> 3.1'
|
27
27
|
spec.add_runtime_dependency 'minitar', '~> 0.6'
|
28
28
|
spec.add_runtime_dependency 'mustache', '~> 1.0'
|
29
29
|
spec.add_runtime_dependency 'tty-command', '~> 0.7'
|
30
30
|
spec.add_runtime_dependency 'tty-table', '~> 0.9'
|
31
31
|
spec.add_runtime_dependency 'pastel', '~> 0.7'
|
32
|
+
spec.add_runtime_dependency 'excon', '~> 0.76'
|
33
|
+
spec.add_runtime_dependency 'rugged', '~> 1.0'
|
32
34
|
|
33
|
-
spec.add_development_dependency "bundler", "~> 1
|
34
|
-
spec.add_development_dependency "rake", "~>
|
35
|
+
spec.add_development_dependency "bundler", "~> 2.1"
|
36
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
35
37
|
spec.add_development_dependency "pry-byebug", "~> 3.5"
|
36
38
|
spec.add_development_dependency "rspec", "~> 3.7"
|
37
39
|
spec.add_development_dependency "fivemat", "~> 1.3"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shipitron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Schlesinger
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
19
|
+
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0
|
26
|
+
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: aws-sdk-ecs
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,28 +44,28 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '4.1'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '4.1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: metaractor
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0
|
61
|
+
version: '3.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0
|
68
|
+
version: '3.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: diplomat
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '3.6'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '3.6'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: mime-types
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,34 +178,62 @@ dependencies:
|
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0.7'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: excon
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0.76'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0.76'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: rugged
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '1.0'
|
202
|
+
type: :runtime
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '1.0'
|
181
209
|
- !ruby/object:Gem::Dependency
|
182
210
|
name: bundler
|
183
211
|
requirement: !ruby/object:Gem::Requirement
|
184
212
|
requirements:
|
185
213
|
- - "~>"
|
186
214
|
- !ruby/object:Gem::Version
|
187
|
-
version: '1
|
215
|
+
version: '2.1'
|
188
216
|
type: :development
|
189
217
|
prerelease: false
|
190
218
|
version_requirements: !ruby/object:Gem::Requirement
|
191
219
|
requirements:
|
192
220
|
- - "~>"
|
193
221
|
- !ruby/object:Gem::Version
|
194
|
-
version: '1
|
222
|
+
version: '2.1'
|
195
223
|
- !ruby/object:Gem::Dependency
|
196
224
|
name: rake
|
197
225
|
requirement: !ruby/object:Gem::Requirement
|
198
226
|
requirements:
|
199
227
|
- - "~>"
|
200
228
|
- !ruby/object:Gem::Version
|
201
|
-
version: '
|
229
|
+
version: '13.0'
|
202
230
|
type: :development
|
203
231
|
prerelease: false
|
204
232
|
version_requirements: !ruby/object:Gem::Requirement
|
205
233
|
requirements:
|
206
234
|
- - "~>"
|
207
235
|
- !ruby/object:Gem::Version
|
208
|
-
version: '
|
236
|
+
version: '13.0'
|
209
237
|
- !ruby/object:Gem::Dependency
|
210
238
|
name: pry-byebug
|
211
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -262,7 +290,7 @@ dependencies:
|
|
262
290
|
- - "~>"
|
263
291
|
- !ruby/object:Gem::Version
|
264
292
|
version: '0.4'
|
265
|
-
description:
|
293
|
+
description:
|
266
294
|
email:
|
267
295
|
- ryan@outstand.com
|
268
296
|
executables:
|
@@ -271,6 +299,7 @@ extensions: []
|
|
271
299
|
extra_rdoc_files: []
|
272
300
|
files:
|
273
301
|
- ".dockerignore"
|
302
|
+
- ".gitattributes"
|
274
303
|
- ".gitignore"
|
275
304
|
- ".rspec"
|
276
305
|
- Dockerfile
|
@@ -280,9 +309,11 @@ files:
|
|
280
309
|
- README.md
|
281
310
|
- Rakefile
|
282
311
|
- build_dev.sh
|
312
|
+
- docker-compose.yml
|
283
313
|
- exe/shipitron
|
284
314
|
- lib/shipitron.rb
|
285
315
|
- lib/shipitron/cli.rb
|
316
|
+
- lib/shipitron/client.rb
|
286
317
|
- lib/shipitron/client/bootstrap_application.rb
|
287
318
|
- lib/shipitron/client/create_ecs_services.rb
|
288
319
|
- lib/shipitron/client/deploy_application.rb
|
@@ -299,10 +330,13 @@ files:
|
|
299
330
|
- lib/shipitron/ecs_client.rb
|
300
331
|
- lib/shipitron/ecs_task_def.rb
|
301
332
|
- lib/shipitron/fetch_bucket.rb
|
333
|
+
- lib/shipitron/find_docker_volume_name.rb
|
334
|
+
- lib/shipitron/git_info.rb
|
302
335
|
- lib/shipitron/logger.rb
|
303
336
|
- lib/shipitron/mustache_yaml_parser.rb
|
304
337
|
- lib/shipitron/parse_templates.rb
|
305
338
|
- lib/shipitron/post_build.rb
|
339
|
+
- lib/shipitron/s3_copy.rb
|
306
340
|
- lib/shipitron/server/deploy_application.rb
|
307
341
|
- lib/shipitron/server/docker/build_image.rb
|
308
342
|
- lib/shipitron/server/docker/configure.rb
|
@@ -331,7 +365,7 @@ files:
|
|
331
365
|
homepage: https://github.com/outstand/shipitron
|
332
366
|
licenses: []
|
333
367
|
metadata: {}
|
334
|
-
post_install_message:
|
368
|
+
post_install_message:
|
335
369
|
rdoc_options: []
|
336
370
|
require_paths:
|
337
371
|
- lib
|
@@ -346,9 +380,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
346
380
|
- !ruby/object:Gem::Version
|
347
381
|
version: '0'
|
348
382
|
requirements: []
|
349
|
-
|
350
|
-
|
351
|
-
signing_key:
|
383
|
+
rubygems_version: 3.1.4
|
384
|
+
signing_key:
|
352
385
|
specification_version: 4
|
353
386
|
summary: A deployment tool for use with Docker and ECS.
|
354
387
|
test_files: []
|