container_ship 0.1.1 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b7ae1e6c79b424625cdfd5f12eacc00fd546ec046151606984a76c5d50cc489
4
- data.tar.gz: 1691ee2c77d5f0ddf8064b4966abc2a326ad748615ec5f1b935037d3bc23b38a
3
+ metadata.gz: 81784b5cc4c7f154050767adc86bfa44c61da90de8c3acfe7675317e3c05e8af
4
+ data.tar.gz: 568d9db35b31697a1892b9f2aaefd26f5c673a872ffda6541dd5ff64ae817a80
5
5
  SHA512:
6
- metadata.gz: 4a11192e9091856be8e69fea92399a8e97977a8a8778bb5b6671162c9d149380938d3f5162418277e05a77f28c2c472c8cf2e37054150a40752ee82f90976485
7
- data.tar.gz: 06543a4fd7906c378acd0a8e3f3d4c6725a594672ad6175f3fc215c769a7cdf30e52e7832a87f2b9889e783218debf9bd0eafc32d9249ba653b0db3476bf8a9a
6
+ metadata.gz: 437ddc8b6e673f3a8a76ab4c16e371539cf99a6bfcab0a25257a2a8c1a644d723f7fdb18797612af2061f598910abc3da9cbcecac2b17777127dfa48ba79d0f1
7
+ data.tar.gz: 8c4d1bd691fc124e83e4335b93e3dd16f70bf97886d46c687167c81b0ebf5c22314faae41a07bbe1f948757452f459bbcaa004c0c82c6403bf9fe18293c5a256
data/.circleci/config.yml CHANGED
@@ -17,7 +17,7 @@ git statusrestore_bundle_cache: &restore_bundle_cache
17
17
  jobs:
18
18
  build:
19
19
  docker:
20
- - image: circleci/ruby
20
+ - image: circleci/ruby:2.7.2
21
21
  steps:
22
22
  - checkout
23
23
  - *restore_bundle_cache
@@ -29,7 +29,7 @@ jobs:
29
29
  - vendor/bundle
30
30
  rubocop:
31
31
  docker:
32
- - image: circleci/ruby
32
+ - image: circleci/ruby:2.7.2
33
33
  steps:
34
34
  - checkout
35
35
  - *restore_bundle_cache
@@ -38,7 +38,7 @@ jobs:
38
38
  - run: bundle exec rubocop
39
39
  rspec:
40
40
  docker:
41
- - image: circleci/ruby
41
+ - image: circleci/ruby:2.7.2
42
42
  steps:
43
43
  - checkout
44
44
  - *restore_bundle_cache
@@ -0,0 +1,38 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: monthly
7
+ time: "11:00"
8
+ timezone: Asia/Tokyo
9
+ open-pull-requests-limit: 20
10
+ reviewers:
11
+ - avexbesuke
12
+ - amatotsuji
13
+ - yuta-sanada0089
14
+ allow:
15
+ - dependency-type: direct
16
+ - dependency-type: indirect
17
+ ignore:
18
+ - dependency-name: codecov
19
+ versions:
20
+ - ">= 0.2.14.a, < 0.2.15"
21
+ - dependency-name: aws-partitions
22
+ versions:
23
+ - 1.431.0
24
+ - 1.433.0
25
+ - 1.437.0
26
+ - 1.448.0
27
+ - dependency-name: i18n
28
+ versions:
29
+ - 1.8.10
30
+ - dependency-name: aws-sigv4
31
+ versions:
32
+ - 1.2.3
33
+ - dependency-name: aws-eventstream
34
+ versions:
35
+ - 1.1.1
36
+ - dependency-name: aws-sdk-core
37
+ versions:
38
+ - 3.112.0
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /vendor/
9
10
 
10
11
  # rspec failure tracking
11
12
  .rspec_status
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- container_ship (0.1.1)
4
+ container_ship (0.1.4)
5
5
  aws-sdk-cloudwatchlogs
6
6
  aws-sdk-ecs
7
7
  thor
@@ -15,37 +15,57 @@ GEM
15
15
  minitest (~> 5.1)
16
16
  tzinfo (~> 1.1)
17
17
  zeitwerk (~> 2.2, >= 2.2.2)
18
- addressable (2.7.0)
18
+ addressable (2.8.0)
19
19
  public_suffix (>= 2.0.2, < 5.0)
20
- ast (2.4.1)
21
- aws-eventstream (1.1.0)
22
- aws-partitions (1.365.0)
23
- aws-sdk-cloudwatchlogs (1.36.0)
24
- aws-sdk-core (~> 3, >= 3.99.0)
20
+ ast (2.4.2)
21
+ aws-eventstream (1.2.0)
22
+ aws-partitions (1.560.0)
23
+ aws-sdk-cloudwatchlogs (1.52.0)
24
+ aws-sdk-core (~> 3, >= 3.127.0)
25
25
  aws-sigv4 (~> 1.1)
26
- aws-sdk-core (3.105.0)
26
+ aws-sdk-core (3.127.0)
27
27
  aws-eventstream (~> 1, >= 1.0.2)
28
- aws-partitions (~> 1, >= 1.239.0)
28
+ aws-partitions (~> 1, >= 1.525.0)
29
29
  aws-sigv4 (~> 1.1)
30
30
  jmespath (~> 1.0)
31
- aws-sdk-ecs (1.68.0)
32
- aws-sdk-core (~> 3, >= 3.99.0)
31
+ aws-sdk-ecs (1.96.0)
32
+ aws-sdk-core (~> 3, >= 3.127.0)
33
33
  aws-sigv4 (~> 1.1)
34
- aws-sigv4 (1.2.2)
34
+ aws-sigv4 (1.4.0)
35
35
  aws-eventstream (~> 1, >= 1.0.2)
36
- codecov (0.2.10)
37
- json
38
- simplecov
36
+ codecov (0.6.0)
37
+ simplecov (>= 0.15, < 0.22)
39
38
  coderay (1.1.3)
40
- concurrent-ruby (1.1.7)
41
- diff-lcs (1.4.4)
42
- docile (1.3.2)
43
- faraday (1.0.1)
44
- multipart-post (>= 1.2, < 3)
39
+ concurrent-ruby (1.1.9)
40
+ diff-lcs (1.5.0)
41
+ docile (1.3.5)
42
+ faraday (1.10.0)
43
+ faraday-em_http (~> 1.0)
44
+ faraday-em_synchrony (~> 1.0)
45
+ faraday-excon (~> 1.1)
46
+ faraday-httpclient (~> 1.0)
47
+ faraday-multipart (~> 1.0)
48
+ faraday-net_http (~> 1.0)
49
+ faraday-net_http_persistent (~> 1.0)
50
+ faraday-patron (~> 1.0)
51
+ faraday-rack (~> 1.0)
52
+ faraday-retry (~> 1.0)
53
+ ruby2_keywords (>= 0.0.4)
54
+ faraday-em_http (1.0.0)
55
+ faraday-em_synchrony (1.0.0)
56
+ faraday-excon (1.1.0)
45
57
  faraday-http-cache (2.2.0)
46
58
  faraday (>= 0.8)
47
- ffi (1.13.1)
48
- formatador (0.2.5)
59
+ faraday-httpclient (1.0.1)
60
+ faraday-multipart (1.0.3)
61
+ multipart-post (>= 1.2, < 3)
62
+ faraday-net_http (1.0.1)
63
+ faraday-net_http_persistent (1.2.0)
64
+ faraday-patron (1.0.0)
65
+ faraday-rack (1.0.0)
66
+ faraday-retry (1.0.3)
67
+ ffi (1.15.5)
68
+ formatador (1.1.0)
49
69
  github_changelog_generator (1.15.2)
50
70
  activesupport
51
71
  faraday-http-cache
@@ -54,13 +74,13 @@ GEM
54
74
  rainbow (>= 2.2.1)
55
75
  rake (>= 10.0)
56
76
  retriable (~> 3.0)
57
- guard (2.16.2)
77
+ guard (2.18.0)
58
78
  formatador (>= 0.2.4)
59
79
  listen (>= 2.7, < 4.0)
60
80
  lumberjack (>= 1.0.12, < 2.0)
61
81
  nenv (~> 0.1)
62
82
  notiffany (~> 0.0)
63
- pry (>= 0.9.12)
83
+ pry (>= 0.13.0)
64
84
  shellany (~> 0.0)
65
85
  thor (>= 0.18.1)
66
86
  guard-compat (1.2.1)
@@ -68,82 +88,84 @@ GEM
68
88
  guard (~> 2.1)
69
89
  guard-compat (~> 1.1)
70
90
  rspec (>= 2.99.0, < 4.0)
71
- guard-rubocop (1.3.0)
91
+ guard-rubocop (1.4.0)
72
92
  guard (~> 2.0)
73
- rubocop (~> 0.20)
74
- i18n (1.8.5)
93
+ rubocop (< 2.0)
94
+ i18n (1.10.0)
75
95
  concurrent-ruby (~> 1.0)
76
- jmespath (1.4.0)
77
- json (2.3.1)
78
- listen (3.2.1)
96
+ jmespath (1.6.0)
97
+ listen (3.7.1)
79
98
  rb-fsevent (~> 0.10, >= 0.10.3)
80
99
  rb-inotify (~> 0.9, >= 0.9.10)
81
100
  lumberjack (1.2.8)
82
101
  method_source (1.0.0)
83
- minitest (5.14.2)
102
+ minitest (5.15.0)
84
103
  multi_json (1.15.0)
85
104
  multipart-post (2.1.1)
86
105
  nenv (0.3.0)
87
106
  notiffany (0.1.3)
88
107
  nenv (~> 0.1)
89
108
  shellany (~> 0.0)
90
- octokit (4.18.0)
109
+ octokit (4.22.0)
91
110
  faraday (>= 0.9)
92
111
  sawyer (~> 0.8.0, >= 0.5.3)
93
- parallel (1.19.2)
94
- parser (2.7.1.4)
112
+ parallel (1.20.1)
113
+ parser (3.1.1.0)
95
114
  ast (~> 2.4.1)
96
- pry (0.13.1)
115
+ pry (0.14.1)
97
116
  coderay (~> 1.1)
98
117
  method_source (~> 1.0)
99
118
  public_suffix (4.0.6)
100
- rainbow (3.0.0)
101
- rake (13.0.1)
102
- rb-fsevent (0.10.4)
119
+ rainbow (3.1.1)
120
+ rake (13.0.6)
121
+ rb-fsevent (0.11.1)
103
122
  rb-inotify (0.10.1)
104
123
  ffi (~> 1.0)
105
- regexp_parser (1.7.1)
124
+ regexp_parser (2.2.1)
106
125
  retriable (3.1.2)
107
- rexml (3.2.4)
108
- rspec (3.9.0)
109
- rspec-core (~> 3.9.0)
110
- rspec-expectations (~> 3.9.0)
111
- rspec-mocks (~> 3.9.0)
112
- rspec-core (3.9.2)
113
- rspec-support (~> 3.9.3)
114
- rspec-expectations (3.9.2)
126
+ rexml (3.2.5)
127
+ rspec (3.11.0)
128
+ rspec-core (~> 3.11.0)
129
+ rspec-expectations (~> 3.11.0)
130
+ rspec-mocks (~> 3.11.0)
131
+ rspec-core (3.11.0)
132
+ rspec-support (~> 3.11.0)
133
+ rspec-expectations (3.11.0)
115
134
  diff-lcs (>= 1.2.0, < 2.0)
116
- rspec-support (~> 3.9.0)
117
- rspec-mocks (3.9.1)
135
+ rspec-support (~> 3.11.0)
136
+ rspec-mocks (3.11.0)
118
137
  diff-lcs (>= 1.2.0, < 2.0)
119
- rspec-support (~> 3.9.0)
120
- rspec-support (3.9.3)
121
- rubocop (0.90.0)
138
+ rspec-support (~> 3.11.0)
139
+ rspec-support (3.11.0)
140
+ rubocop (1.12.1)
122
141
  parallel (~> 1.10)
123
- parser (>= 2.7.1.1)
142
+ parser (>= 3.0.0.0)
124
143
  rainbow (>= 2.2.2, < 4.0)
125
- regexp_parser (>= 1.7)
144
+ regexp_parser (>= 1.8, < 3.0)
126
145
  rexml
127
- rubocop-ast (>= 0.3.0, < 1.0)
146
+ rubocop-ast (>= 1.2.0, < 2.0)
128
147
  ruby-progressbar (~> 1.7)
129
- unicode-display_width (>= 1.4.0, < 2.0)
130
- rubocop-ast (0.3.0)
131
- parser (>= 2.7.1.4)
132
- ruby-progressbar (1.10.1)
148
+ unicode-display_width (>= 1.4.0, < 3.0)
149
+ rubocop-ast (1.4.1)
150
+ parser (>= 2.7.1.5)
151
+ ruby-progressbar (1.11.0)
152
+ ruby2_keywords (0.0.5)
133
153
  sawyer (0.8.2)
134
154
  addressable (>= 2.3.5)
135
155
  faraday (> 0.8, < 2.0)
136
156
  shellany (0.0.1)
137
- simplecov (0.19.0)
157
+ simplecov (0.21.2)
138
158
  docile (~> 1.1)
139
159
  simplecov-html (~> 0.11)
140
- simplecov-html (0.12.2)
141
- thor (1.0.1)
160
+ simplecov_json_formatter (~> 0.1)
161
+ simplecov-html (0.12.3)
162
+ simplecov_json_formatter (0.1.4)
163
+ thor (1.2.1)
142
164
  thread_safe (0.3.6)
143
- tzinfo (1.2.7)
165
+ tzinfo (1.2.9)
144
166
  thread_safe (~> 0.1)
145
- unicode-display_width (1.7.0)
146
- zeitwerk (2.4.0)
167
+ unicode-display_width (2.1.0)
168
+ zeitwerk (2.4.2)
147
169
 
148
170
  PLATFORMS
149
171
  ruby
@@ -162,4 +184,4 @@ DEPENDENCIES
162
184
  simplecov
163
185
 
164
186
  BUNDLED WITH
165
- 2.0.2
187
+ 2.2.17
@@ -16,8 +16,10 @@ module ContainerShip
16
16
  end
17
17
 
18
18
  desc 'exec CLUSTER_NAME SERVICE_NAME ENVIRONMENT BUILD_NUMBER', 'exec specified task'
19
+ method_option 'timeout', desc: 'Timeout seconds for executing the task. Default 5 minutes.'
19
20
  def exec(cluster_name, service_name, environment, build_number)
20
- Command::ExecCommand.new.run(cluster_name, service_name, environment, build_number)
21
+ timeout = options['timeout']&.to_i || 300
22
+ Command::ExecCommand.new.run(cluster_name, service_name, environment, build_number, timeout: timeout)
21
23
  end
22
24
 
23
25
  desc 'version', 'display gem version'
@@ -17,7 +17,7 @@ module ContainerShip
17
17
  include Modules::Ecs
18
18
  include Modules::PrintTask
19
19
 
20
- def run(cluster_name, task_name, environment, build_number)
20
+ def run(cluster_name, task_name, environment, build_number, timeout: nil)
21
21
  task_definition = TaskDefinition.new(cluster_name, 'tasks', task_name, environment, build_number)
22
22
 
23
23
  push_image task_definition
@@ -31,7 +31,7 @@ module ContainerShip
31
31
  end
32
32
 
33
33
  exit_status = print_around_task('Waiting task is completed... ') do
34
- wait_task task_definition, task_arn
34
+ wait_task task_definition, task_arn, timeout: timeout
35
35
  end
36
36
 
37
37
  show_log task_definition, task_arn
@@ -5,7 +5,9 @@ module ContainerShip
5
5
  module Modules
6
6
  module Docker
7
7
  def push_image(task_definition)
8
+ puts "docker build -t \"#{task_definition.image_name}:#{task_definition.build_number}\" ."
8
9
  sh "docker build -t \"#{task_definition.image_name}:#{task_definition.build_number}\" ."
10
+ puts "docker push #{task_definition.image_name}:#{task_definition.build_number}"
9
11
  sh "docker push #{task_definition.image_name}:#{task_definition.build_number}"
10
12
  end
11
13
 
@@ -13,8 +15,9 @@ module ContainerShip
13
15
 
14
16
  def sh(command)
15
17
  status = nil
16
- Open3.popen3(command) do |_i, o, _e, w|
18
+ Open3.popen3(command) do |_i, o, e, w|
17
19
  o.each { |line| puts line }
20
+ e.each { |line| puts line }
18
21
  status = w.value
19
22
  end
20
23
  exit(status.exitstatus) unless status.success?
@@ -23,15 +23,16 @@ module ContainerShip
23
23
  aws_ecs_client
24
24
  .run_task(
25
25
  cluster: task_definition.full_cluster_name,
26
- task_definition: "#{task_definition.full_name}:#{revision}"
26
+ task_definition: "#{task_definition.full_name}:#{revision}",
27
+ **task_definition.run_task_options
27
28
  )
28
29
  .tasks
29
30
  .first
30
31
  .task_arn
31
32
  end
32
33
 
33
- def wait_task(task_definition, task_arn)
34
- do_every_5_seconds do
34
+ def wait_task(task_definition, task_arn, timeout: nil)
35
+ do_every_5_seconds(timeout: timeout) do
35
36
  aws_ecs_client.describe_tasks(cluster: task_definition.full_cluster_name, tasks: [task_arn])
36
37
  .tasks
37
38
  .first
@@ -47,16 +48,21 @@ module ContainerShip
47
48
  @aws_ecs_client ||= Aws::ECS::Client.new
48
49
  end
49
50
 
50
- def do_every_5_seconds
51
- count = 0
51
+ def do_every_5_seconds(timeout: nil)
52
+ timeout ||= 300 # default is 5 minutes
53
+ start = Time.now
52
54
  loop do
53
55
  sleep 3
54
56
  print '.'
55
57
  exit_status = yield
56
- count += 1
58
+ elapsed = Time.now - start
59
+ if elapsed > timeout
60
+ puts "Timeout! elapsed: #{elapsed} seconds"
61
+ return 124
62
+ end
57
63
  next if exit_status.nil?
58
- return 124 if count > 60
59
64
 
65
+ puts "exit_code of wait_task is #{exit_status}"
60
66
  return exit_status
61
67
  end
62
68
  end
@@ -49,6 +49,14 @@ module ContainerShip
49
49
  "#{prefix}/#{full_name}/#{task_arn.split('/').last}"
50
50
  end
51
51
 
52
+ def run_task_options
53
+ @run_task_options ||= if File.exist?(run_task_options_path)
54
+ JSON.parse(File.read(run_task_options_path), symbolize_names: true)
55
+ else
56
+ {}
57
+ end
58
+ end
59
+
52
60
  private
53
61
 
54
62
  def task_definition_hash
@@ -62,5 +70,9 @@ module ContainerShip
62
70
  def main_container_definition
63
71
  task_definition_hash[:container_definitions].find { |definition| definition[:essential] }
64
72
  end
73
+
74
+ def run_task_options_path
75
+ File.join('.container_ship', @cluster_name, @type, @name, @environment, 'run_task_options.json')
76
+ end
65
77
  end
66
78
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ContainerShip
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: container_ship
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Ueki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-07 00:00:00.000000000 Z
11
+ date: 2022-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-cloudwatchlogs
@@ -202,6 +202,7 @@ extensions: []
202
202
  extra_rdoc_files: []
203
203
  files:
204
204
  - ".circleci/config.yml"
205
+ - ".github/dependabot.yml"
205
206
  - ".gitignore"
206
207
  - ".rubocop.yml"
207
208
  - ".travis.yml"
@@ -247,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
248
  - !ruby/object:Gem::Version
248
249
  version: '0'
249
250
  requirements: []
250
- rubygems_version: 3.0.3
251
+ rubygems_version: 3.1.2
251
252
  signing_key:
252
253
  specification_version: 4
253
254
  summary: Yet another ECS deployment tool