shipitron 1.2.0 → 1.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.
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