ecs_deployer 0.1.11 → 0.1.12

Sign up to get free protection for your applications and to get access to all the features.
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