container_ship 0.1.2 → 0.1.5

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: 0db018f1ecfb3983ee58273365e051e81f6920a23eee7a2fa85335587d14a527
4
- data.tar.gz: 13cc71f918ddc296f57e1de80bd7371f8cde1e571de6376c4c469afa9e82ce86
3
+ metadata.gz: 4e4d61c12d557b710b02194829bd50f5addef1e6ec3b54a6b2a63d56f73e7b51
4
+ data.tar.gz: 5b5594d0a0ceed785efb79aee3a7e923f45afa6898facb6e95c85b975b25d3c7
5
5
  SHA512:
6
- metadata.gz: 422e4cd9a8e42beaacac3c70680456a3beee93c8afd3295be836838be21182b0479ca18a38f8554c1855e9585c8d4fe00b736d98383be4f149e7d3e75f79f802
7
- data.tar.gz: e6e164727eb88af0b947a72fa62235b10d2e159cdb1128319237351c863a6b83cfe65764afff65885293f2f6f90ac9a7769bb147fd472cf39e0cb7d54e421cab
6
+ metadata.gz: bfe5f36b3b85791da6828d95a11eb566b066da80240fd484bfcd622dde4e04ff6f6229491ea104adfccdaaf50444d7c1403f8dfa571257ff5aa6dee6d2dafc2c
7
+ data.tar.gz: 2e2a2b9a1b436f741e802c4c4a96299b546770fd669073b3c9de7a961bcde216418bb069dd11b7a0e411980ee4048a63d4698612fe17d4a337c01d335d56675e
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:2.7.2
20
+ - image: cimg/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:2.7.2
32
+ - image: cimg/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:2.7.2
41
+ - image: cimg/ruby:2.7.2
42
42
  steps:
43
43
  - checkout
44
44
  - *restore_bundle_cache
@@ -7,10 +7,6 @@ updates:
7
7
  time: "11:00"
8
8
  timezone: Asia/Tokyo
9
9
  open-pull-requests-limit: 20
10
- reviewers:
11
- - avexbesuke
12
- - amatotsuji
13
- - yuta-sanada0089
14
10
  allow:
15
11
  - dependency-type: direct
16
12
  - dependency-type: indirect
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.2)
4
+ container_ship (0.1.5)
5
5
  aws-sdk-cloudwatchlogs
6
6
  aws-sdk-ecs
7
7
  thor
@@ -15,47 +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
20
  ast (2.4.2)
21
- aws-eventstream (1.1.1)
22
- aws-partitions (1.465.0)
23
- aws-sdk-cloudwatchlogs (1.41.0)
24
- aws-sdk-core (~> 3, >= 3.112.0)
21
+ aws-eventstream (1.2.0)
22
+ aws-partitions (1.595.0)
23
+ aws-sdk-cloudwatchlogs (1.53.0)
24
+ aws-sdk-core (~> 3, >= 3.127.0)
25
25
  aws-sigv4 (~> 1.1)
26
- aws-sdk-core (3.114.1)
26
+ aws-sdk-core (3.131.1)
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
- jmespath (~> 1.0)
31
- aws-sdk-ecs (1.80.0)
32
- aws-sdk-core (~> 3, >= 3.112.0)
30
+ jmespath (~> 1, >= 1.6.1)
31
+ aws-sdk-ecs (1.99.0)
32
+ aws-sdk-core (~> 3, >= 3.127.0)
33
33
  aws-sigv4 (~> 1.1)
34
- aws-sigv4 (1.2.3)
34
+ aws-sigv4 (1.5.0)
35
35
  aws-eventstream (~> 1, >= 1.0.2)
36
- codecov (0.5.2)
36
+ codecov (0.6.0)
37
37
  simplecov (>= 0.15, < 0.22)
38
38
  coderay (1.1.3)
39
- concurrent-ruby (1.1.8)
40
- diff-lcs (1.4.4)
39
+ concurrent-ruby (1.1.10)
40
+ diff-lcs (1.5.0)
41
41
  docile (1.3.5)
42
- faraday (1.4.2)
42
+ faraday (1.10.0)
43
43
  faraday-em_http (~> 1.0)
44
44
  faraday-em_synchrony (~> 1.0)
45
45
  faraday-excon (~> 1.1)
46
+ faraday-httpclient (~> 1.0)
47
+ faraday-multipart (~> 1.0)
46
48
  faraday-net_http (~> 1.0)
47
- faraday-net_http_persistent (~> 1.1)
48
- multipart-post (>= 1.2, < 3)
49
+ faraday-net_http_persistent (~> 1.0)
50
+ faraday-patron (~> 1.0)
51
+ faraday-rack (~> 1.0)
52
+ faraday-retry (~> 1.0)
49
53
  ruby2_keywords (>= 0.0.4)
50
54
  faraday-em_http (1.0.0)
51
55
  faraday-em_synchrony (1.0.0)
52
56
  faraday-excon (1.1.0)
53
- faraday-http-cache (2.2.0)
57
+ faraday-http-cache (2.3.0)
54
58
  faraday (>= 0.8)
59
+ faraday-httpclient (1.0.1)
60
+ faraday-multipart (1.0.3)
61
+ multipart-post (>= 1.2, < 3)
55
62
  faraday-net_http (1.0.1)
56
- faraday-net_http_persistent (1.1.0)
57
- ffi (1.15.1)
58
- formatador (0.2.5)
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)
59
69
  github_changelog_generator (1.15.2)
60
70
  activesupport
61
71
  faraday-http-cache
@@ -64,13 +74,13 @@ GEM
64
74
  rainbow (>= 2.2.1)
65
75
  rake (>= 10.0)
66
76
  retriable (~> 3.0)
67
- guard (2.17.0)
77
+ guard (2.18.0)
68
78
  formatador (>= 0.2.4)
69
79
  listen (>= 2.7, < 4.0)
70
80
  lumberjack (>= 1.0.12, < 2.0)
71
81
  nenv (~> 0.1)
72
82
  notiffany (~> 0.0)
73
- pry (>= 0.9.12)
83
+ pry (>= 0.13.0)
74
84
  shellany (~> 0.0)
75
85
  thor (>= 0.18.1)
76
86
  guard-compat (1.2.1)
@@ -81,52 +91,52 @@ GEM
81
91
  guard-rubocop (1.4.0)
82
92
  guard (~> 2.0)
83
93
  rubocop (< 2.0)
84
- i18n (1.8.10)
94
+ i18n (1.10.0)
85
95
  concurrent-ruby (~> 1.0)
86
- jmespath (1.4.0)
87
- listen (3.5.1)
96
+ jmespath (1.6.1)
97
+ listen (3.7.1)
88
98
  rb-fsevent (~> 0.10, >= 0.10.3)
89
99
  rb-inotify (~> 0.9, >= 0.9.10)
90
100
  lumberjack (1.2.8)
91
101
  method_source (1.0.0)
92
- minitest (5.14.4)
102
+ minitest (5.15.0)
93
103
  multi_json (1.15.0)
94
104
  multipart-post (2.1.1)
95
105
  nenv (0.3.0)
96
106
  notiffany (0.1.3)
97
107
  nenv (~> 0.1)
98
108
  shellany (~> 0.0)
99
- octokit (4.21.0)
100
- faraday (>= 0.9)
101
- sawyer (~> 0.8.0, >= 0.5.3)
109
+ octokit (4.23.0)
110
+ faraday (>= 1, < 3)
111
+ sawyer (~> 0.9)
102
112
  parallel (1.20.1)
103
- parser (3.0.1.1)
113
+ parser (3.1.2.0)
104
114
  ast (~> 2.4.1)
105
115
  pry (0.14.1)
106
116
  coderay (~> 1.1)
107
117
  method_source (~> 1.0)
108
- public_suffix (4.0.6)
109
- rainbow (3.0.0)
110
- rake (13.0.3)
111
- rb-fsevent (0.11.0)
118
+ public_suffix (4.0.7)
119
+ rainbow (3.1.1)
120
+ rake (13.0.6)
121
+ rb-fsevent (0.11.1)
112
122
  rb-inotify (0.10.1)
113
123
  ffi (~> 1.0)
114
- regexp_parser (2.1.1)
124
+ regexp_parser (2.5.0)
115
125
  retriable (3.1.2)
116
126
  rexml (3.2.5)
117
- rspec (3.10.0)
118
- rspec-core (~> 3.10.0)
119
- rspec-expectations (~> 3.10.0)
120
- rspec-mocks (~> 3.10.0)
121
- rspec-core (3.10.1)
122
- rspec-support (~> 3.10.0)
123
- rspec-expectations (3.10.1)
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)
124
134
  diff-lcs (>= 1.2.0, < 2.0)
125
- rspec-support (~> 3.10.0)
126
- rspec-mocks (3.10.2)
135
+ rspec-support (~> 3.11.0)
136
+ rspec-mocks (3.11.1)
127
137
  diff-lcs (>= 1.2.0, < 2.0)
128
- rspec-support (~> 3.10.0)
129
- rspec-support (3.10.2)
138
+ rspec-support (~> 3.11.0)
139
+ rspec-support (3.11.0)
130
140
  rubocop (1.12.1)
131
141
  parallel (~> 1.10)
132
142
  parser (>= 3.0.0.0)
@@ -139,22 +149,22 @@ GEM
139
149
  rubocop-ast (1.4.1)
140
150
  parser (>= 2.7.1.5)
141
151
  ruby-progressbar (1.11.0)
142
- ruby2_keywords (0.0.4)
143
- sawyer (0.8.2)
152
+ ruby2_keywords (0.0.5)
153
+ sawyer (0.9.1)
144
154
  addressable (>= 2.3.5)
145
- faraday (> 0.8, < 2.0)
155
+ faraday (>= 0.17.3, < 3)
146
156
  shellany (0.0.1)
147
157
  simplecov (0.21.2)
148
158
  docile (~> 1.1)
149
159
  simplecov-html (~> 0.11)
150
160
  simplecov_json_formatter (~> 0.1)
151
161
  simplecov-html (0.12.3)
152
- simplecov_json_formatter (0.1.3)
153
- thor (1.1.0)
162
+ simplecov_json_formatter (0.1.4)
163
+ thor (1.2.1)
154
164
  thread_safe (0.3.6)
155
165
  tzinfo (1.2.9)
156
166
  thread_safe (~> 0.1)
157
- unicode-display_width (2.0.0)
167
+ unicode-display_width (2.1.0)
158
168
  zeitwerk (2.4.2)
159
169
 
160
170
  PLATFORMS
@@ -174,4 +184,4 @@ DEPENDENCIES
174
184
  simplecov
175
185
 
176
186
  BUNDLED WITH
177
- 2.1.4
187
+ 2.2.17
@@ -16,8 +16,17 @@ 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', default: 300, type: :numeric, desc: 'Timeout seconds for executing the task.'
20
+ method_option 'no_wait', default: false, type: :boolean,
21
+ desc: 'Exit without waiting for the task execution results. Default false.'
19
22
  def exec(cluster_name, service_name, environment, build_number)
20
- Command::ExecCommand.new.run(cluster_name, service_name, environment, build_number)
23
+ timeout = options['timeout']
24
+ no_wait = options['no_wait']
25
+ Command::ExecCommand.new.run(
26
+ cluster_name, service_name, environment, build_number,
27
+ timeout: timeout,
28
+ no_wait: no_wait
29
+ )
21
30
  end
22
31
 
23
32
  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, no_wait: false) # rubocop:disable Metrics/ParameterLists
21
21
  task_definition = TaskDefinition.new(cluster_name, 'tasks', task_name, environment, build_number)
22
22
 
23
23
  push_image task_definition
@@ -30,8 +30,10 @@ module ContainerShip
30
30
  run_task task_definition, revision
31
31
  end
32
32
 
33
+ return if no_wait
34
+
33
35
  exit_status = print_around_task('Waiting task is completed... ') do
34
- wait_task task_definition, task_arn
36
+ wait_task task_definition, task_arn, timeout: timeout
35
37
  end
36
38
 
37
39
  show_log task_definition, task_arn
@@ -12,9 +12,12 @@ module ContainerShip
12
12
  private
13
13
 
14
14
  def sh(command)
15
+ puts command
16
+
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.2'
4
+ VERSION = '0.1.5'
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.2
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Ueki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-03 00:00:00.000000000 Z
11
+ date: 2022-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-cloudwatchlogs
@@ -248,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
248
  - !ruby/object:Gem::Version
249
249
  version: '0'
250
250
  requirements: []
251
- rubygems_version: 3.0.3
251
+ rubygems_version: 3.1.2
252
252
  signing_key:
253
253
  specification_version: 4
254
254
  summary: Yet another ECS deployment tool