ecs_deployer 0.1.11 → 0.1.12

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
  SHA1:
3
- metadata.gz: f39f6fb29ced22c5963b3de48db83c401289d556
4
- data.tar.gz: 6088d0a59625590d39742ab54898427ca51150a7
3
+ metadata.gz: e60347cf25748e10ebd8fb31c60a16bcb7c744f0
4
+ data.tar.gz: 70df50d8c38bafe0637bc36baf59dff095faeb92
5
5
  SHA512:
6
- metadata.gz: 33720d4303bc71e4b47ab5ee364513a323a3c847399e19ef3a6a734724a0d9bb43f193723e64b76516b81087e32a5c1f67524f7a92a853c2f82500abaf896371
7
- data.tar.gz: adcea48cfb981cc8743105667bb48cdfb285e763ba84c40290d402c8aeb6283d296c0e86b14d69f41e57d7d9b53724c781bf0a3e163ef28828da75f91b5bcf62
6
+ metadata.gz: 96b2e854dc1c9dbf9a789ceba7e24fc97913fdaed3fdc54f85616e7fe159acaa44e63a9a3211a2961d911e744b7189683f29912fc9a36e859463f50da3aa6d77
7
+ data.tar.gz: 927248da5b5c2aaee7f92012455155fb6f3a8380ce28ae05b4afac6dc88e81d858b5b336e55296813f4f75bebf80893500c44eb827f24a1fa278bcfd26c73ebe
data/.rubocop.yml ADDED
@@ -0,0 +1,26 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'tmp/**/*'
4
+ Style/Documentation:
5
+ Enabled: false
6
+ Style/ExtraSpacing:
7
+ Enabled: false
8
+ Style/FrozenStringLiteralComment:
9
+ Enabled: false
10
+ Metrics/AbcSize:
11
+ Max: 20
12
+ Metrics/BlockLength:
13
+ Enabled: false
14
+ Metrics/ClassLength:
15
+ Enabled: false
16
+ Metrics/LineLength:
17
+ Enabled: false
18
+ Metrics/MethodLength:
19
+ CountComments: false
20
+ Max: 64
21
+ Metrics/ModuleLength:
22
+ Enabled: false
23
+ Security/YAMLLoad:
24
+ Enabled: false
25
+ Style/SpaceAroundOperators:
26
+ Enabled: false
data/README.md CHANGED
@@ -59,9 +59,11 @@ Encrypted values must be enclosed in `${XXX}`.
59
59
 
60
60
  Values are decrypted when task is created.
61
61
 
62
- ## Usage (API)
62
+ ## Usage
63
63
 
64
- This sample file is in `example/fixtures/task.yml`.
64
+ ### API
65
+
66
+ This sample file is in `spec/fixtures/task.yml`.
65
67
 
66
68
  ```
67
69
  ecs_deployer = EcsDeployer::Client.new
@@ -69,29 +71,29 @@ ecs_deployer.register_task('development.yml')
69
71
  ecs_deployer.update_service('cluster', 'development')
70
72
  ```
71
73
 
72
- ## Usage (CLI)
74
+ ### CLI
73
75
 
74
- ### Register a new task
76
+ #### Register new task
75
77
 
76
78
  ```
77
79
  $ bundle exec ecs_deployer task-register --path=example/fixtures/task.yml
78
80
  ```
79
81
 
80
- ### Encrypt environment value
82
+ #### Encrypt environment value
81
83
 
82
84
  ```
83
85
  $ bundle exec ecs_deployer encrypt --master-key=master --value='test'
84
86
  Encrypted value: ${xxx}
85
87
  ```
86
88
 
87
- ### Decrypt encironment value
89
+ #### Decrypt encironment value
88
90
 
89
91
  ```
90
92
  $ bundle exec ecs_deployer decrypt --value='${xxx}'
91
93
  Decrypted value: xxx
92
94
  ```
93
95
 
94
- ### Update a service
96
+ #### Update service
95
97
 
96
98
  ```
97
99
  $ bundle exec ecs_deployer update-service --cluster=xxx --service=xxx --wait --timeout=600
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "ecs_deployer"
3
+ require 'bundler/setup'
4
+ require 'ecs_deployer'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "ecs_deployer"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start(__FILE__)
data/ecs_deployer.gemspec CHANGED
@@ -4,38 +4,40 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'ecs_deployer/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "ecs_deployer"
7
+ spec.name = 'ecs_deployer'
8
8
  spec.version = EcsDeployer::VERSION
9
- spec.authors = ["naomichi-y"]
10
- spec.email = ["n.yamakita@gmail.com"]
9
+ spec.authors = ['naomichi-y']
10
+ spec.email = ['n.yamakita@gmail.com']
11
11
 
12
- spec.summary = %q{Deploy application to ECS.}
13
- spec.description = %q{This package provides the service deployment function of ECS.}
14
- spec.homepage = "https://github.com/naomichi-y/ecs_deployer"
12
+ spec.summary = 'Deploy application to ECS.'
13
+ spec.description = 'This package provides the service deployment function of ECS.'
14
+ spec.homepage = 'https://github.com/naomichi-y/ecs_deployer'
15
15
 
16
16
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
17
  # to allow pushing to a single host or delete this section to allow pushing to any host.
18
18
  if spec.respond_to?(:metadata)
19
- # spec.metadata['allowed_push_host'] = ""
19
+ # spec.metadata['allowed_push_host'] = ''
20
20
  else
21
- raise "RubyGems 2.0 or newer is required to protect against " \
22
- "public gem pushes."
21
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
22
+ 'public gem pushes.'
23
23
  end
24
24
 
25
25
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
26
26
  f.match(%r{^(test|spec|features)/})
27
27
  end
28
- spec.bindir = "exe"
28
+ spec.bindir = 'exe'
29
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
- spec.require_paths = ["lib"]
30
+ spec.require_paths = ['lib']
31
31
 
32
- spec.add_dependency "runtime_command"
33
- spec.add_dependency "oj"
34
- spec.add_dependency "thor"
35
- spec.add_dependency "aws-sdk"
36
- spec.add_dependency "aws_config"
37
- spec.add_dependency "json_spec"
38
- spec.add_development_dependency "bundler", "~> 1.14"
39
- spec.add_development_dependency "rake", "~> 10.0"
40
- spec.add_development_dependency "rspec", "~> 3.0"
32
+ spec.add_dependency 'runtime_command'
33
+ spec.add_dependency 'oj'
34
+ spec.add_dependency 'thor'
35
+ spec.add_dependency 'aws-sdk'
36
+ spec.add_dependency 'aws_config'
37
+ spec.add_development_dependency 'bundler', '~> 1.13'
38
+ spec.add_development_dependency 'rake', '~> 10.0'
39
+ spec.add_development_dependency 'rspec', '~> 3.0'
40
+ spec.add_development_dependency 'json_spec'
41
+ spec.add_development_dependency 'rubocop'
42
+ spec.add_development_dependency 'simplecov'
41
43
  end
data/example/sample.rb CHANGED
@@ -5,4 +5,4 @@ path = File.expand_path('../spec/fixtures/task.yml', File.dirname(File.realpath(
5
5
 
6
6
  deployer = EcsDeployer::Client.new
7
7
  deployer.register_task(path)
8
- #deployer.update_service('sandbox', 'production')
8
+ # deployer.update_service('sandbox', 'production')
@@ -2,9 +2,11 @@ require 'yaml'
2
2
  require 'oj'
3
3
  require 'aws-sdk'
4
4
  require 'runtime_command'
5
+ require 'base64'
5
6
 
6
7
  module EcsDeployer
7
8
  class Client
9
+ LOG_SEPARATOR = '-' * 96
8
10
  PAULING_INTERVAL = 20
9
11
  DEPLOY_TIMEOUT = 600
10
12
  ENCRYPT_PATTERN = /^\${(.+)}$/
@@ -25,32 +27,29 @@ module EcsDeployer
25
27
  # @param [String] value
26
28
  # @return [String]
27
29
  def encrypt(master_key, value)
28
- begin
29
- encode = @kms.encrypt(key_id: "alias/#{master_key}", plaintext: value)
30
- "${#{Base64.strict_encode64(encode.ciphertext_blob)}}"
31
- rescue => e
32
- raise KmsEncryptError.new(e.to_s)
33
- end
30
+ encode = @kms.encrypt(key_id: "alias/#{master_key}", plaintext: value)
31
+ "${#{Base64.strict_encode64(encode.ciphertext_blob)}}"
32
+ rescue => e
33
+ raise KmsEncryptError, e.to_s
34
34
  end
35
35
 
36
36
  # @param [String] value
37
37
  # @return [String]
38
38
  def decrypt(value)
39
- if match = value.match(ENCRYPT_PATTERN)
40
- begin
41
- @kms.decrypt(ciphertext_blob: Base64.strict_decode64(match[1])).plaintext
42
- rescue => e
43
- raise KmsDecryptError.new(e.to_s)
44
- end
45
- else
46
- raise KmsDecryptError.new('Encrypted string is invalid.')
39
+ match = value.match(ENCRYPT_PATTERN)
40
+ raise KmsDecryptError, 'Encrypted string is invalid.' unless match
41
+
42
+ begin
43
+ @kms.decrypt(ciphertext_blob: Base64.strict_decode64(match[1])).plaintext
44
+ rescue => e
45
+ raise KmsDecryptError, e.to_s
47
46
  end
48
47
  end
49
48
 
50
49
  # @param [String] path
51
50
  # @return [String]
52
51
  def register_task(path)
53
- raise IOError.new("File does not exist. [#{path}]") if !File.exist?(path)
52
+ raise IOError, "File does not exist. [#{path}]" unless File.exist?(path)
54
53
 
55
54
  register_task_hash(YAML.load(File.read(path)))
56
55
  end
@@ -61,11 +60,11 @@ module EcsDeployer
61
60
  task_definition = Oj.load(Oj.dump(task_definition), symbol_keys: true)
62
61
  decrypt_environment_variables!(task_definition)
63
62
 
64
- result = @cli.register_task_definition({
63
+ result = @cli.register_task_definition(
65
64
  container_definitions: task_definition[:container_definitions],
66
65
  family: task_definition[:family],
67
66
  task_role_arn: task_definition[:task_role_arn]
68
- })
67
+ )
69
68
 
70
69
  @family = result[:task_definition][:family]
71
70
  @revision = result[:task_definition][:revision]
@@ -78,23 +77,23 @@ module EcsDeployer
78
77
  def register_clone_task(cluster, service)
79
78
  detected_service = false
80
79
 
81
- result = @cli.describe_services({
80
+ result = @cli.describe_services(
82
81
  cluster: cluster,
83
82
  services: [service]
84
- })
83
+ )
85
84
 
86
85
  result[:services].each do |svc|
87
- if svc[:service_name] == service
88
- result = @cli.describe_task_definition({
89
- task_definition: svc[:task_definition]
90
- })
91
- @new_task_definition_arn = register_task_hash(result[:task_definition].to_hash)
92
- detected_service = true
93
- break
94
- end
86
+ next unless svc[:service_name] == service
87
+
88
+ result = @cli.describe_task_definition(
89
+ task_definition: svc[:task_definition]
90
+ )
91
+ @new_task_definition_arn = register_task_hash(result[:task_definition].to_hash)
92
+ detected_service = true
93
+ break
95
94
  end
96
95
 
97
- raise ServiceNotFoundError.new("'#{service}' service is not found.") unless detected_service
96
+ raise ServiceNotFoundError, "'#{service}' service is not found." unless detected_service
98
97
 
99
98
  @new_task_definition_arn
100
99
  end
@@ -106,101 +105,118 @@ module EcsDeployer
106
105
  def update_service(cluster, service, wait = true, timeout = DEPLOY_TIMEOUT)
107
106
  register_clone_task(cluster, service) if @new_task_definition_arn.nil?
108
107
 
109
- result = @cli.update_service({
108
+ result = @cli.update_service(
110
109
  cluster: cluster,
111
110
  service: service,
112
111
  task_definition: @family + ':' + @revision.to_s
113
- })
112
+ )
114
113
  wait_for_deploy(cluster, service, timeout) if wait
115
114
  result.service.service_arn
116
115
  end
117
116
 
118
117
  private
118
+
119
119
  # @param [Hash] task_definition
120
120
  def decrypt_environment_variables!(task_definition)
121
- raise TaskDefinitionValidateError.new('\'container_definition\' is undefined.') unless task_definition.has_key?(:container_definitions)
121
+ raise TaskDefinitionValidateError, '\'container_definition\' is undefined.' unless task_definition.key?(:container_definitions)
122
122
  task_definition[:container_definitions].each do |container_definition|
123
- next unless container_definition.has_key?(:environment)
123
+ next unless container_definition.key?(:environment)
124
124
 
125
125
  container_definition[:environment].each do |environment|
126
- if match = environment[:value].match(ENCRYPT_PATTERN)
127
- environment[:value] = decrypt(match[0])
128
- end
126
+ match = environment[:value].match(ENCRYPT_PATTERN)
127
+ environment[:value] = decrypt(match[0]) if match
129
128
  end
130
129
  end
131
130
  end
132
131
 
133
132
  # @param [String] cluster
134
133
  # @param [String] service
135
- # @param [Fixnum] timeout
136
- def wait_for_deploy(cluster, service, timeout)
137
- detected_service = false
138
-
139
- result = @cli.describe_services({
134
+ # @return [Aws::ECS::Types::Service]
135
+ def service_status(cluster, service)
136
+ status = nil
137
+ result = @cli.describe_services(
140
138
  cluster: cluster,
141
139
  services: [service]
142
- })
140
+ )
143
141
  result[:services].each do |svc|
144
142
  next unless svc[:service_name] == service
145
- detected_service = true
143
+ status = svc
144
+ break
145
+ end
146
146
 
147
- result = @cli.describe_task_definition({
148
- task_definition: svc[:task_definition]
149
- })
150
-
151
- if svc[:desired_count] > 0
152
- running_new_task = false
153
- wait_time = 0
154
- @command.puts 'Start deploing...'
155
-
156
- begin
157
- sleep(PAULING_INTERVAL)
158
- wait_time += PAULING_INTERVAL
159
-
160
- # Get current tasks
161
- result = @cli.list_tasks({
162
- cluster: cluster,
163
- service_name: service,
164
- desired_status: 'RUNNING'
165
- })
166
-
167
- raise TaskNotFoundError.new('Desired count is 0.') if result[:task_arns].size == 0
168
-
169
- new_running_count = 0
170
- result = @cli.describe_tasks({
171
- tasks: result[:task_arns],
172
- cluster: cluster
173
- })
174
-
175
- result[:tasks].each do |task|
176
- new_running_count += 1 if @new_task_definition_arn == task[:task_definition_arn]
177
- end
178
-
179
- current_running_count = result[:tasks].size
180
-
181
- if current_running_count == new_running_count
182
- @command.puts "Service update succeeded. [#{new_running_count}/#{current_running_count}]"
183
- @command.puts "New task definition: #{@new_task_definition_arn}"
184
-
185
- running_new_task = true
186
-
187
- else
188
- @command.puts "Deploying... [#{new_running_count}/#{current_running_count}] (#{wait_time} seconds elapsed)"
189
- @command.puts "New task: #{@new_task_definition_arn}"
190
- @command.puts 'You can stop process with Ctrl+C. Deployment will continue.'
191
-
192
- if wait_time > timeout
193
- @command.puts "New task definition: #{@new_task_definition_arn}"
194
- raise DeployTimeoutError.new('Service is being updating, but process is timed out.')
195
- end
196
- end
197
- end while !running_new_task
198
- end
147
+ raise ServiceNotFoundError, "'#{service}' service is not found." if status.nil?
199
148
 
200
- break
149
+ status
150
+ end
151
+
152
+ # @param [String] cluster
153
+ # @param [String] service
154
+ # @return [Hash]
155
+ def deploy_status(cluster, service)
156
+ # Get current tasks
157
+ result = @cli.list_tasks(
158
+ cluster: cluster,
159
+ service_name: service,
160
+ desired_status: 'RUNNING'
161
+ )
162
+
163
+ raise TaskRunningError, 'Running task not found.' if result[:task_arns].size.zero?
164
+
165
+ result = @cli.describe_tasks(
166
+ cluster: cluster,
167
+ tasks: result[:task_arns]
168
+ )
169
+
170
+ new_running_count = 0
171
+ task_status_logs = ''
172
+
173
+ result[:tasks].each do |task|
174
+ new_running_count += 1 if @new_task_definition_arn == task[:task_definition_arn]
175
+ task_status_logs << " #{task[:task_definition_arn]} [#{task[:last_status]}]\n"
201
176
  end
202
177
 
203
- raise ServiceNotFoundError.new("'#{service}' service is not found.") unless detected_service
178
+ {
179
+ current_running_count: result[:tasks].size,
180
+ new_running_count: new_running_count,
181
+ task_status_logs: task_status_logs
182
+ }
183
+ end
184
+
185
+ # @param [String] cluster
186
+ # @param [String] service
187
+ # @param [Fixnum] timeout
188
+ def wait_for_deploy(cluster, service, timeout)
189
+ service_status = service_status(cluster, service)
190
+ raise TaskDesiredError, 'Task desired by service is 0.' if service_status[:desired_count].zero?
191
+
192
+ wait_time = 0
193
+ @command.puts 'Start deploing...'
194
+
195
+ loop do
196
+ sleep(PAULING_INTERVAL)
197
+ wait_time += PAULING_INTERVAL
198
+ result = deploy_status(cluster, service)
199
+
200
+ if result[:new_running_count] == result[:current_running_count]
201
+ @command.puts "Service update succeeded. [#{result[:new_running_count]}/#{result[:current_running_count]}]"
202
+ @command.puts "New task definition: #{@new_task_definition_arn}"
203
+
204
+ break
205
+
206
+ else
207
+ @command.puts "Deploying... [#{result[:new_running_count]}/#{result[:current_running_count]}] (#{wait_time} seconds elapsed)"
208
+ @command.puts "New task: #{@new_task_definition_arn}"
209
+ @command.puts LOG_SEPARATOR
210
+ @command.puts result[:task_status_logs]
211
+ @command.puts LOG_SEPARATOR
212
+ @command.puts 'You can stop process with Ctrl+C. Deployment will continue.'
213
+
214
+ if wait_time > timeout
215
+ @command.puts "New task definition: #{@new_task_definition_arn}"
216
+ raise DeployTimeoutError, 'Service is being updating, but process is timed out.'
217
+ end
218
+ end
219
+ end
204
220
  end
205
221
  end
206
222
  end
@@ -1,3 +1,3 @@
1
1
  module EcsDeployer
2
- VERSION = "0.1.11"
2
+ VERSION = '0.1.12'.freeze
3
3
  end
data/lib/ecs_deployer.rb CHANGED
@@ -5,8 +5,9 @@ require 'ecs_deployer/cli'
5
5
 
6
6
  module EcsDeployer
7
7
  class ServiceNotFoundError < EcsDeployer::Error; end
8
- class TaskNotFoundError < EcsDeployer::Error; end
8
+ class TaskRunningError < EcsDeployer::Error; end
9
9
  class TaskDefinitionValidateError < EcsDeployer::Error; end
10
+ class TaskDesiredError < EcsDeployer::Error; end
10
11
  class KmsEncryptError < EcsDeployer::Error; end
11
12
  class KmsDecryptError < EcsDeployer::Error; end
12
13
  class DeployTimeoutError < EcsDeployer::Error; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecs_deployer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - naomichi-y
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-13 00:00:00.000000000 Z
11
+ date: 2017-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: runtime_command
@@ -80,34 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: json_spec
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: bundler
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '1.14'
89
+ version: '1.13'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '1.14'
96
+ version: '1.13'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: rake
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +122,48 @@ dependencies:
136
122
  - - "~>"
137
123
  - !ruby/object:Gem::Version
138
124
  version: '3.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: json_spec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
139
167
  description: This package provides the service deployment function of ECS.
140
168
  email:
141
169
  - n.yamakita@gmail.com
@@ -146,7 +174,7 @@ extra_rdoc_files: []
146
174
  files:
147
175
  - ".gitignore"
148
176
  - ".rspec"
149
- - ".travis.yml"
177
+ - ".rubocop.yml"
150
178
  - Gemfile
151
179
  - README.md
152
180
  - Rakefile
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.3.0
5
- before_install: gem install bundler -v 1.14.5