shipitron 1.2.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.buildkite/pipeline.yml +94 -0
  3. data/.dockerignore +1 -0
  4. data/.gitattributes +1 -0
  5. data/.gitignore +1 -0
  6. data/.rspec +1 -0
  7. data/Deskfile +15 -0
  8. data/Dockerfile +40 -15
  9. data/Dockerfile.release +29 -6
  10. data/Dockerfile.staging +70 -0
  11. data/Gemfile +2 -0
  12. data/README.md +53 -15
  13. data/docker-compose.yml +54 -0
  14. data/lib/shipitron.rb +19 -2
  15. data/lib/shipitron/cli.rb +42 -42
  16. data/lib/shipitron/client.rb +9 -0
  17. data/lib/shipitron/client/bootstrap_application.rb +1 -0
  18. data/lib/shipitron/client/create_ecs_services.rb +7 -7
  19. data/lib/shipitron/client/deploy_application.rb +2 -0
  20. data/lib/shipitron/client/ensure_deploy_not_running.rb +2 -1
  21. data/lib/shipitron/client/fetch_clusters.rb +1 -0
  22. data/lib/shipitron/client/force_deploy.rb +1 -0
  23. data/lib/shipitron/client/generate_deploy.rb +41 -0
  24. data/lib/shipitron/client/load_application_config.rb +17 -0
  25. data/lib/shipitron/client/load_templates.rb +1 -0
  26. data/lib/shipitron/client/register_ecs_task_definitions.rb +5 -5
  27. data/lib/shipitron/client/run_ecs_tasks.rb +101 -72
  28. data/lib/shipitron/docker_image.rb +4 -1
  29. data/lib/shipitron/find_docker_volume_name.rb +68 -0
  30. data/lib/shipitron/git_info.rb +57 -0
  31. data/lib/shipitron/mustache_yaml_parser.rb +12 -8
  32. data/lib/shipitron/s3_copy.rb +46 -0
  33. data/lib/shipitron/server/deploy_application.rb +2 -0
  34. data/lib/shipitron/server/docker/build_image.rb +4 -1
  35. data/lib/shipitron/server/docker/configure.rb +46 -10
  36. data/lib/shipitron/server/docker/push_image.rb +3 -0
  37. data/lib/shipitron/server/docker/run_build_script.rb +17 -10
  38. data/lib/shipitron/server/download_build_cache.rb +11 -3
  39. data/lib/shipitron/server/fetch_deploy.rb +50 -0
  40. data/lib/shipitron/server/git/clone_local_copy.rb +4 -5
  41. data/lib/shipitron/server/git/update_cache.rb +2 -1
  42. data/lib/shipitron/server/run_post_build.rb +40 -1
  43. data/lib/shipitron/server/transform_cli_args.rb +4 -0
  44. data/lib/shipitron/server/update_ecs_task_definitions.rb +2 -1
  45. data/lib/shipitron/server/upload_build_cache.rb +10 -9
  46. data/lib/shipitron/version.rb +1 -1
  47. data/scripts/docker-entrypoint.sh +37 -3
  48. data/scripts/release-entrypoint.sh +20 -0
  49. data/shipitron.gemspec +11 -8
  50. data/test.yml +5 -0
  51. metadata +78 -25
  52. data/build_dev.sh +0 -27
@@ -1,3 +1,3 @@
1
1
  module Shipitron
2
- VERSION = '1.2.0'
2
+ VERSION = '1.4.0'
3
3
  end
@@ -1,5 +1,26 @@
1
1
  #!/bin/sh
2
- set -e
2
+
3
+ set -euo pipefail
4
+
5
+ su-exec ${FIXUID:?Missing FIXUID var}:${FIXGID:?Missing FIXGID var} fixuid
6
+
7
+ chown_dir() {
8
+ dir=$1
9
+ if [[ -d ${dir} ]] && [[ "$(stat -c %u:%g ${dir})" != "${FIXUID}:${FIXGID}" ]]; then
10
+ echo chown $dir
11
+ chown shipitron:shipitron $dir
12
+ fi
13
+ }
14
+
15
+ chown_dir /home/shipitron
16
+ chown_dir /usr/local/bundle
17
+
18
+ if [ "$1" = 'bundle' ]; then
19
+ set -- su-exec shipitron "$@"
20
+ exec "$@"
21
+ elif [ "$1" = 'rake' ] && [ "$2" = 'release' ]; then
22
+ exec "$@"
23
+ fi
3
24
 
4
25
  if [ -n "$USE_BUNDLE_EXEC" ]; then
5
26
  BINARY="bundle exec shipitron"
@@ -7,10 +28,23 @@ else
7
28
  BINARY=shipitron
8
29
  fi
9
30
 
10
- if ${BINARY} help "$1" 2>&1 | grep -q "shipitron $1"; then
31
+ if [ "$(ls -A /usr/local/bundle/bin)" = '' ]; then
32
+ echo 'command not in path and bundler not initialized'
33
+ echo 'running bundle install'
34
+ su-exec shipitron bundle install
35
+ else
36
+ su-exec shipitron bash -c 'bundle check || bundle install'
37
+ fi
38
+
39
+ # ${BINARY} help "$1"
40
+
41
+ if ls /usr/local/bundle/bin | grep -q "\b$1\b"; then
42
+ set -- su-exec shipitron bundle exec "$@"
43
+
44
+ elif ${BINARY} help "$1" 2>&1 | grep -q "shipitron $1"; then
11
45
  set -- su-exec shipitron ${BINARY} "$@"
12
46
 
13
- if [ -n "$FOG_LOCAL" ]; then
47
+ if [ -n "${FOG_LOCAL:-}" ]; then
14
48
  chown -R shipitron:shipitron /fog
15
49
  fi
16
50
  fi
@@ -0,0 +1,20 @@
1
+ #!/bin/sh
2
+
3
+ set -euo pipefail
4
+
5
+ if [ -n "$USE_BUNDLE_EXEC" ]; then
6
+ BINARY="bundle exec shipitron"
7
+ else
8
+ BINARY=shipitron
9
+ fi
10
+
11
+ # ${BINARY} help "$1"
12
+
13
+ if ls /usr/local/bundle/bin | grep -q "\b$1\b"; then
14
+ set -- su-exec shipitron bundle exec "$@"
15
+
16
+ elif ${BINARY} help "$1" 2>&1 | grep -q "shipitron $1"; then
17
+ set -- su-exec shipitron ${BINARY} "$@"
18
+ fi
19
+
20
+ exec "$@"
data/shipitron.gemspec CHANGED
@@ -17,23 +17,26 @@ 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'
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', '~> 3.5'
23
- spec.add_runtime_dependency 'metaractor', '~> 0.5'
22
+ spec.add_runtime_dependency 'aws-sdk-s3', '~> 1.96'
23
+ spec.add_runtime_dependency 'hashie', '~> 4.1'
24
+ spec.add_runtime_dependency 'metaractor', '~> 3.1'
24
25
  spec.add_runtime_dependency 'diplomat', '~> 2.0'
25
- spec.add_runtime_dependency 'fog-aws', '~> 2.0'
26
+ spec.add_runtime_dependency 'fog-aws', '~> 3.6'
26
27
  spec.add_runtime_dependency 'mime-types', '~> 3.1'
27
28
  spec.add_runtime_dependency 'minitar', '~> 0.6'
28
29
  spec.add_runtime_dependency 'mustache', '~> 1.0'
29
30
  spec.add_runtime_dependency 'tty-command', '~> 0.7'
30
31
  spec.add_runtime_dependency 'tty-table', '~> 0.9'
31
32
  spec.add_runtime_dependency 'pastel', '~> 0.7'
33
+ spec.add_runtime_dependency 'excon', '~> 0.82'
34
+ spec.add_runtime_dependency 'rugged', '~> 1.0'
32
35
 
33
- spec.add_development_dependency "bundler", "~> 1.16"
34
- spec.add_development_dependency "rake", "~> 12.3"
35
- spec.add_development_dependency "pry-byebug", "~> 3.5"
36
- spec.add_development_dependency "rspec", "~> 3.7"
36
+ spec.add_development_dependency "bundler", "~> 2.1"
37
+ spec.add_development_dependency "rake", "~> 13.0"
38
+ spec.add_development_dependency "pry-byebug", "~> 3.9"
39
+ spec.add_development_dependency "rspec", "~> 3.10"
37
40
  spec.add_development_dependency "fivemat", "~> 1.3"
38
41
  spec.add_development_dependency "fog-local", "~> 0.4"
39
42
  end
data/test.yml ADDED
@@ -0,0 +1,5 @@
1
+ version: '3.8'
2
+ services:
3
+ specs:
4
+ volumes:
5
+ - "/var/lib/buildkite-agent/buildkite-agent:/usr/local/bin/buildkite-agent"
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.2.0
4
+ version: 1.4.0
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: 2018-09-11 00:00:00.000000000 Z
11
+ date: 2021-06-29 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.20'
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.20'
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: aws-sdk-ecs
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,34 +38,48 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: aws-sdk-s3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.96'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.96'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: hashie
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '3.5'
61
+ version: '4.1'
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '3.5'
68
+ version: '4.1'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: metaractor
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '0.5'
75
+ version: '3.1'
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '0.5'
82
+ version: '3.1'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: diplomat
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +100,14 @@ dependencies:
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '2.0'
103
+ version: '3.6'
90
104
  type: :runtime
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '2.0'
110
+ version: '3.6'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: mime-types
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -178,62 +192,90 @@ dependencies:
178
192
  - - "~>"
179
193
  - !ruby/object:Gem::Version
180
194
  version: '0.7'
195
+ - !ruby/object:Gem::Dependency
196
+ name: excon
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '0.82'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '0.82'
209
+ - !ruby/object:Gem::Dependency
210
+ name: rugged
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '1.0'
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '1.0'
181
223
  - !ruby/object:Gem::Dependency
182
224
  name: bundler
183
225
  requirement: !ruby/object:Gem::Requirement
184
226
  requirements:
185
227
  - - "~>"
186
228
  - !ruby/object:Gem::Version
187
- version: '1.16'
229
+ version: '2.1'
188
230
  type: :development
189
231
  prerelease: false
190
232
  version_requirements: !ruby/object:Gem::Requirement
191
233
  requirements:
192
234
  - - "~>"
193
235
  - !ruby/object:Gem::Version
194
- version: '1.16'
236
+ version: '2.1'
195
237
  - !ruby/object:Gem::Dependency
196
238
  name: rake
197
239
  requirement: !ruby/object:Gem::Requirement
198
240
  requirements:
199
241
  - - "~>"
200
242
  - !ruby/object:Gem::Version
201
- version: '12.3'
243
+ version: '13.0'
202
244
  type: :development
203
245
  prerelease: false
204
246
  version_requirements: !ruby/object:Gem::Requirement
205
247
  requirements:
206
248
  - - "~>"
207
249
  - !ruby/object:Gem::Version
208
- version: '12.3'
250
+ version: '13.0'
209
251
  - !ruby/object:Gem::Dependency
210
252
  name: pry-byebug
211
253
  requirement: !ruby/object:Gem::Requirement
212
254
  requirements:
213
255
  - - "~>"
214
256
  - !ruby/object:Gem::Version
215
- version: '3.5'
257
+ version: '3.9'
216
258
  type: :development
217
259
  prerelease: false
218
260
  version_requirements: !ruby/object:Gem::Requirement
219
261
  requirements:
220
262
  - - "~>"
221
263
  - !ruby/object:Gem::Version
222
- version: '3.5'
264
+ version: '3.9'
223
265
  - !ruby/object:Gem::Dependency
224
266
  name: rspec
225
267
  requirement: !ruby/object:Gem::Requirement
226
268
  requirements:
227
269
  - - "~>"
228
270
  - !ruby/object:Gem::Version
229
- version: '3.7'
271
+ version: '3.10'
230
272
  type: :development
231
273
  prerelease: false
232
274
  version_requirements: !ruby/object:Gem::Requirement
233
275
  requirements:
234
276
  - - "~>"
235
277
  - !ruby/object:Gem::Version
236
- version: '3.7'
278
+ version: '3.10'
237
279
  - !ruby/object:Gem::Dependency
238
280
  name: fivemat
239
281
  requirement: !ruby/object:Gem::Requirement
@@ -262,7 +304,7 @@ dependencies:
262
304
  - - "~>"
263
305
  - !ruby/object:Gem::Version
264
306
  version: '0.4'
265
- description:
307
+ description:
266
308
  email:
267
309
  - ryan@outstand.com
268
310
  executables:
@@ -270,25 +312,31 @@ executables:
270
312
  extensions: []
271
313
  extra_rdoc_files: []
272
314
  files:
315
+ - ".buildkite/pipeline.yml"
273
316
  - ".dockerignore"
317
+ - ".gitattributes"
274
318
  - ".gitignore"
275
319
  - ".rspec"
320
+ - Deskfile
276
321
  - Dockerfile
277
322
  - Dockerfile.release
323
+ - Dockerfile.staging
278
324
  - Gemfile
279
325
  - LICENSE
280
326
  - README.md
281
327
  - Rakefile
282
- - build_dev.sh
328
+ - docker-compose.yml
283
329
  - exe/shipitron
284
330
  - lib/shipitron.rb
285
331
  - lib/shipitron/cli.rb
332
+ - lib/shipitron/client.rb
286
333
  - lib/shipitron/client/bootstrap_application.rb
287
334
  - lib/shipitron/client/create_ecs_services.rb
288
335
  - lib/shipitron/client/deploy_application.rb
289
336
  - lib/shipitron/client/ensure_deploy_not_running.rb
290
337
  - lib/shipitron/client/fetch_clusters.rb
291
338
  - lib/shipitron/client/force_deploy.rb
339
+ - lib/shipitron/client/generate_deploy.rb
292
340
  - lib/shipitron/client/load_application_config.rb
293
341
  - lib/shipitron/client/load_templates.rb
294
342
  - lib/shipitron/client/register_ecs_task_definitions.rb
@@ -299,10 +347,13 @@ files:
299
347
  - lib/shipitron/ecs_client.rb
300
348
  - lib/shipitron/ecs_task_def.rb
301
349
  - lib/shipitron/fetch_bucket.rb
350
+ - lib/shipitron/find_docker_volume_name.rb
351
+ - lib/shipitron/git_info.rb
302
352
  - lib/shipitron/logger.rb
303
353
  - lib/shipitron/mustache_yaml_parser.rb
304
354
  - lib/shipitron/parse_templates.rb
305
355
  - lib/shipitron/post_build.rb
356
+ - lib/shipitron/s3_copy.rb
306
357
  - lib/shipitron/server/deploy_application.rb
307
358
  - lib/shipitron/server/docker/build_image.rb
308
359
  - lib/shipitron/server/docker/configure.rb
@@ -312,6 +363,7 @@ files:
312
363
  - lib/shipitron/server/ecs_task_defs/map_parsed_templates.rb
313
364
  - lib/shipitron/server/ecs_task_defs/update_from_params.rb
314
365
  - lib/shipitron/server/ecs_task_defs/update_in_place.rb
366
+ - lib/shipitron/server/fetch_deploy.rb
315
367
  - lib/shipitron/server/git/clone_local_copy.rb
316
368
  - lib/shipitron/server/git/configure.rb
317
369
  - lib/shipitron/server/git/download_cache.rb
@@ -327,11 +379,13 @@ files:
327
379
  - lib/shipitron/smash.rb
328
380
  - lib/shipitron/version.rb
329
381
  - scripts/docker-entrypoint.sh
382
+ - scripts/release-entrypoint.sh
330
383
  - shipitron.gemspec
384
+ - test.yml
331
385
  homepage: https://github.com/outstand/shipitron
332
386
  licenses: []
333
387
  metadata: {}
334
- post_install_message:
388
+ post_install_message:
335
389
  rdoc_options: []
336
390
  require_paths:
337
391
  - lib
@@ -346,9 +400,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
346
400
  - !ruby/object:Gem::Version
347
401
  version: '0'
348
402
  requirements: []
349
- rubyforge_project:
350
- rubygems_version: 2.7.6
351
- signing_key:
403
+ rubygems_version: 3.1.6
404
+ signing_key:
352
405
  specification_version: 4
353
406
  summary: A deployment tool for use with Docker and ECS.
354
407
  test_files: []
data/build_dev.sh DELETED
@@ -1,27 +0,0 @@
1
- #!/bin/bash
2
- set -e -x
3
-
4
- build_image=outstand/shipitron:dev
5
- dockerfile=Dockerfile
6
- bundler_data_dir=cache
7
-
8
- tar_container=''
9
-
10
- function cleanup {
11
- if [ -n "$tar_container" ]; then
12
- docker rm -fv ${tar_container}
13
- fi
14
-
15
- rm -f ${bundler_data_dir}/cidfile
16
- }
17
-
18
- trap cleanup EXIT
19
-
20
- build_args=''
21
- mkdir -p ${bundler_data_dir}
22
-
23
- docker build -t ${build_image} -f ${dockerfile} ${build_args} .
24
-
25
- docker run -t --cidfile=${bundler_data_dir}/cidfile -w /usr/local/bundle ${build_image} tar -zcf /tmp/bundler-data.tar.gz .
26
- tar_container=$(cat ${bundler_data_dir}/cidfile)
27
- docker cp ${tar_container}:/tmp/bundler-data.tar.gz ${bundler_data_dir}/bundler-data.tar.gz