departure 6.3.0 → 6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d491f83699ed0a2a2932822f624162223ba8a3b74c018a56fd352a00378f3368
4
- data.tar.gz: 6b6b6f192dab28cc61431e20bc7b0a35ecd76ab36a56edf5a0a59c42ae893e37
3
+ metadata.gz: 8e9b07d68819910b4f867268d8680b65677e6c11fe91b7f5c2f3a4b62cee627a
4
+ data.tar.gz: daf4792210ea603d0732fae6daebe97fcbea253960067d800495b49b6c2aa866
5
5
  SHA512:
6
- metadata.gz: 106fa1f8b21f7ab468d6774147352bb2b631398c04df2eb60b664ae520ea44dd91f76fc084ec0215ab722369ad59b3047d9ff6009767329bf26da708f50e60af
7
- data.tar.gz: 66396ee515d0a69e65eb8e39dce53d4eec89a5419886b3482f1b4276be1480cb08adf452585f09f7da48b4683e9f87a1d0b4311c6f9ab05a5801577052feb5cf
6
+ metadata.gz: 1ba37179c249db07bc0770288ff6103ee4502846488319356bb2aad94738dd5727c42fea899e97aaccb974d5e0bd6f06d475ee0f922d460ec0cc2a2a0ad95f4b
7
+ data.tar.gz: 9c5acbc1f3b3064341f371e584c3e3da4f326d9f3bfc9a32d844dccdd12bf50c4c6c4519c5742f086fbb4261e252fc31fa6c5cf5777f1d028da4e4798d127aa8
@@ -0,0 +1,45 @@
1
+ name: Test
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+ strategy:
8
+ fail-fast: false
9
+ matrix:
10
+ ruby:
11
+ - 2.5
12
+ - 2.6
13
+ - 2.7
14
+ rails:
15
+ - 5.2.0
16
+ - 6.0.0
17
+ - 6.1.0
18
+ include:
19
+ - ruby: 2.4
20
+ rails: 5.2.0
21
+ - ruby: 2.7
22
+ rails: 7.0.1
23
+ - ruby: 3.0
24
+ rails: 6.1.0
25
+ env:
26
+ PERCONA_DB_USER: root
27
+ PERCONA_DB_PASSWORD: root
28
+ RAILS_VERSION: "~> ${{ matrix.rails }}"
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@v2
32
+ - uses: ruby/setup-ruby@v1
33
+ with:
34
+ ruby-version: ${{ matrix.ruby }}
35
+ bundler-cache: true
36
+ - name: "Add Percona GPG key"
37
+ run: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 9334A25F8507EFA5
38
+ - name: "Add Percona APT repository"
39
+ run: echo "deb http://repo.percona.com/apt `lsb_release -cs` main" | sudo tee -a /etc/apt/sources.list
40
+ - run: sudo apt-get update -qq
41
+ - run: sudo apt-get install percona-toolkit
42
+ - name: Start MySQL server
43
+ run: sudo systemctl start mysql.service
44
+ - run: bin/setup
45
+ - run: bundle exec rake
data/.gitignore CHANGED
@@ -11,3 +11,4 @@
11
11
  tags
12
12
  departure_error.log
13
13
  .ruby-version
14
+ .idea/
data/CHANGELOG.md CHANGED
@@ -6,6 +6,16 @@ Please follow the format in [Keep a Changelog](http://keepachangelog.com/)
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [6.4.0] - 2020-06-23
10
+
11
+ - Support for ActiveRecord 6.1.4
12
+ - Relax mysql2 requirement to allow mysql2 0.5.4
13
+ - Support Rails 6' #upsert_all
14
+
15
+ ## [6.3.0] - 2020-06-23
16
+
17
+ - Support for ActiveRecord 6.1
18
+
9
19
  ## [6.2.0] - 2020-06-23
10
20
 
11
21
  ### Added
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
- # Departure [![Build Status](https://travis-ci.org/departurerb/departure.svg?branch=master)](https://travis-ci.org/departurerb/departure) [![Code Climate](https://codeclimate.com/github/departurerb/departure/badges/gpa.svg)](https://codeclimate.com/github/departurerb/departure) ![GitHub commits since latest release (by date)](https://img.shields.io/github/commits-since/departurerb/departure/latest/master?style=plastic)
1
+ # Departure
2
+
3
+ ![Build Status](https://img.shields.io/travis/departurerb/departure?style=for-the-badge) ![Code Climate maintainability](https://img.shields.io/codeclimate/maintainability/departurerb/departure?style=for-the-badge) ![GitHub commits since latest release (by date)](https://img.shields.io/github/commits-since/departurerb/departure/latest/master?style=for-the-badge)
2
4
 
3
5
  Departure is an **ActiveRecord connection adapter** that allows running
4
6
  **MySQL online and non-blocking DDL** through `ActiveRecord::Migration` without needing
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'bundler/setup'
4
- require 'percona_migrator'
4
+ require 'departure'
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.
data/departure.gemspec CHANGED
@@ -7,7 +7,7 @@ require 'departure/version'
7
7
 
8
8
  # This environment variable is set on CI to facilitate testing with multiple
9
9
  # versions of Rails.
10
- RAILS_DEPENDENCY_VERSION = ENV.fetch('RAILS_VERSION', ['>= 5.2.0', '<= 6.1'])
10
+ RAILS_DEPENDENCY_VERSION = ENV.fetch('RAILS_VERSION', ['>= 5.2.0', '!= 7.0.0', '< 7.1'])
11
11
 
12
12
  Gem::Specification.new do |spec|
13
13
  spec.name = 'departure'
@@ -25,9 +25,9 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_runtime_dependency 'railties', *Array(RAILS_DEPENDENCY_VERSION)
27
27
  spec.add_runtime_dependency 'activerecord', *Array(RAILS_DEPENDENCY_VERSION)
28
- spec.add_runtime_dependency 'mysql2', '>= 0.4.0', '<= 0.5.3'
28
+ spec.add_runtime_dependency 'mysql2', '>= 0.4.0', '<= 0.5.4'
29
29
 
30
- spec.add_development_dependency 'rake', '~> 10.0'
30
+ spec.add_development_dependency 'rake', '>= 10.0'
31
31
  spec.add_development_dependency 'rspec', '~> 3.4', '>= 3.4.0'
32
32
  spec.add_development_dependency 'rspec-its', '~> 1.2'
33
33
  spec.add_development_dependency 'pry-byebug'
@@ -32,7 +32,7 @@ module ForAlterStatements
32
32
  }.merge(options)
33
33
 
34
34
  td = create_table_definition(table_name)
35
- cd = td.new_column_definition(column.name, type, options)
35
+ cd = td.new_column_definition(column.name, type, **options)
36
36
  schema_creation.accept(ActiveRecord::ConnectionAdapters::ChangeColumnDefinition.new(cd, column.name))
37
37
  end
38
38
 
@@ -47,20 +47,26 @@ module ForAlterStatements
47
47
  columns_sql = "SHOW COLUMNS FROM #{quote_table_name(table_name)} LIKE #{quote(column_name)}"
48
48
  current_type = exec_query(columns_sql, 'SCHEMA').first['Type']
49
49
  td = create_table_definition(table_name)
50
- cd = td.new_column_definition(new_column_name, current_type, options)
50
+ cd = td.new_column_definition(new_column_name, current_type, **options)
51
51
  schema_creation.accept(ActiveRecord::ConnectionAdapters::ChangeColumnDefinition.new(cd, column.name))
52
52
  end
53
53
 
54
54
  def add_index_for_alter(table_name, column_name, options = {})
55
- index_name, index_type, index_columns, _,
56
- index_algorithm, index_using = add_index_options(table_name, column_name, options)
55
+ if ActiveRecord::VERSION::STRING >= '6.1'
56
+ index_definition, = add_index_options(table_name, column_name, **options)
57
57
 
58
- index_algorithm[0, 0] = ', ' if index_algorithm.present?
59
- "ADD #{index_type} INDEX #{quote_column_name(index_name)} #{index_using} (#{index_columns})#{index_algorithm}"
58
+ "ADD #{schema_creation.accept(index_definition)}"
59
+ else
60
+ index_name, index_type, index_columns, _,
61
+ index_algorithm, index_using = add_index_options(table_name, column_name, **options)
62
+ index_algorithm[0, 0] = ', ' if index_algorithm.present?
63
+
64
+ "ADD #{index_type} INDEX #{quote_column_name(index_name)} #{index_using} (#{index_columns})#{index_algorithm}"
65
+ end
60
66
  end
61
67
 
62
- def remove_index_for_alter(table_name, options = {})
63
- index_name = index_name_for_remove(table_name, options)
68
+ def remove_index_for_alter(table_name, column_name, options = {})
69
+ index_name = index_name_for_remove(table_name, column_name, options)
64
70
  "DROP INDEX #{quote_column_name(index_name)}"
65
71
  end
66
72
 
@@ -77,7 +83,7 @@ module ForAlterStatements
77
83
 
78
84
  def add_column_for_alter(table_name, column_name, type, options = {})
79
85
  td = create_table_definition(table_name)
80
- cd = td.new_column_definition(column_name, type, options)
86
+ cd = td.new_column_definition(column_name, type, **options)
81
87
  schema_creation.accept(ActiveRecord::ConnectionAdapters::AddColumnDefinition.new(cd))
82
88
  end
83
89
 
@@ -85,7 +91,7 @@ module ForAlterStatements
85
91
  "DROP COLUMN #{quote_column_name(column_name)}"
86
92
  end
87
93
 
88
- def remove_columns_for_alter(table_name, *column_names)
94
+ def remove_columns_for_alter(table_name, *column_names, **options)
89
95
  column_names.map { |column_name| remove_column_for_alter(table_name, column_name) }
90
96
  end
91
97
  end
@@ -1,6 +1,7 @@
1
1
  require 'active_record/connection_adapters/abstract_mysql_adapter'
2
2
  require 'active_record/connection_adapters/statement_pool'
3
3
  require 'active_record/connection_adapters/mysql2_adapter'
4
+ require 'active_support/core_ext/string/filters'
4
5
  require 'departure'
5
6
  require 'forwardable'
6
7
 
@@ -69,7 +70,7 @@ module ActiveRecord
69
70
 
70
71
  ADAPTER_NAME = 'Percona'.freeze
71
72
 
72
- def_delegators :mysql_adapter, :last_inserted_id, :each_hash, :set_field_encoding
73
+ def_delegators :mysql_adapter, :each_hash, :set_field_encoding
73
74
 
74
75
  def initialize(connection, _logger, connection_options, _config)
75
76
  @mysql_adapter = connection_options[:mysql_adapter]
@@ -93,9 +94,10 @@ module ActiveRecord
93
94
  execute(to_sql(sql, binds), name)
94
95
  end
95
96
 
96
- def exec_query(sql, name = 'SQL', _binds = [])
97
+ def exec_query(sql, name = 'SQL', _binds = [], **_kwargs)
97
98
  result = execute(sql, name)
98
- ActiveRecord::Result.new(result.fields, result.to_a)
99
+ fields = result.fields if defined?(result.fields)
100
+ ActiveRecord::Result.new(fields, result.to_a)
99
101
  end
100
102
 
101
103
  # Executes a SELECT query and returns an array of rows. Each row is an
@@ -107,8 +109,8 @@ module ActiveRecord
107
109
 
108
110
  # Executes a SELECT query and returns an array of record hashes with the
109
111
  # column names as keys and column values as values.
110
- def select(sql, name = nil, binds = [])
111
- exec_query(sql, name, binds)
112
+ def select(sql, name = nil, binds = [], **kwargs)
113
+ exec_query(sql, name, binds, **kwargs)
112
114
  end
113
115
 
114
116
  # Returns true, as this adapter supports migrations
@@ -129,12 +131,18 @@ module ActiveRecord
129
131
  # @param options [Hash] optional
130
132
  def add_index(table_name, column_name, options = {})
131
133
  if ActiveRecord::VERSION::STRING >= '6.1'
132
- index, algorithm, if_not_exists = add_index_options(table_name, column_name, options)
133
- create_index = CreateIndexDefinition.new(index, algorithm, if_not_exists)
134
- execute schema_creation.accept(create_index)
134
+ index_definition, = add_index_options(table_name, column_name, **options)
135
+ execute <<-SQL.squish
136
+ ALTER TABLE #{quote_table_name(index_definition.table)}
137
+ ADD #{schema_creation.accept(index_definition)}
138
+ SQL
135
139
  else
136
- index_name, index_type, index_columns, index_options = add_index_options(table_name, column_name, options)
137
- execute "ALTER TABLE #{quote_table_name(table_name)} ADD #{index_type} INDEX #{quote_column_name(index_name)} (#{index_columns})#{index_options}" # rubocop:disable Metrics/LineLength
140
+ index_name, index_type, index_columns, index_options = add_index_options(table_name, column_name, **options)
141
+ execute <<-SQL.squish
142
+ ALTER TABLE #{quote_table_name(table_name)}
143
+ ADD #{index_type} INDEX
144
+ #{quote_column_name(index_name)} (#{index_columns})#{index_options}
145
+ SQL
138
146
  end
139
147
  end
140
148
 
@@ -142,14 +150,14 @@ module ActiveRecord
142
150
  #
143
151
  # @param table_name [String, Symbol]
144
152
  # @param options [Hash] optional
145
- def remove_index(table_name, *args, **options)
146
- column_name = args.first
147
- if column_name
153
+ def remove_index(table_name, column_name = nil, **options)
154
+ if ActiveRecord::VERSION::STRING >= '6.1'
148
155
  return if options[:if_exists] && !index_exists?(table_name, column_name, **options)
149
- index_name = index_name_for_remove(table_name, column_name, **options)
156
+ index_name = index_name_for_remove(table_name, column_name, options)
150
157
  else
151
158
  index_name = index_name_for_remove(table_name, options)
152
159
  end
160
+
153
161
  execute "ALTER TABLE #{quote_table_name(table_name)} DROP INDEX #{quote_column_name(index_name)}"
154
162
  end
155
163
 
@@ -181,6 +189,10 @@ module ActiveRecord
181
189
  mysql_adapter.raw_connection.server_info[:version]
182
190
  end
183
191
 
192
+ def last_inserted_id(result)
193
+ mysql_adapter.send(:last_inserted_id, result)
194
+ end
195
+
184
196
  private
185
197
 
186
198
  attr_reader :mysql_adapter
@@ -8,10 +8,11 @@ module Departure
8
8
  # @param command_line [String]
9
9
  # @param error_log_path [String]
10
10
  # @param logger [#write_no_newline]
11
- def initialize(command_line, error_log_path, logger)
11
+ def initialize(command_line, error_log_path, logger, redirect_stderr)
12
12
  @command_line = command_line
13
13
  @error_log_path = error_log_path
14
14
  @logger = logger
15
+ @redirect_stderr = redirect_stderr
15
16
  end
16
17
 
17
18
  # Executes the command returning its status. It also prints its stdout to
@@ -35,7 +36,7 @@ module Departure
35
36
 
36
37
  private
37
38
 
38
- attr_reader :command_line, :error_log_path, :logger, :status
39
+ attr_reader :command_line, :error_log_path, :logger, :status, :redirect_stderr
39
40
 
40
41
  # Runs the command in a separate process, capturing its stdout and
41
42
  # execution status
@@ -56,11 +57,15 @@ module Departure
56
57
  end
57
58
 
58
59
  # Builds the actual command including stderr redirection to the specified
59
- # log file
60
+ # log file or stdout
60
61
  #
61
62
  # @return [String]
62
63
  def full_command
63
- "#{command_line} 2> #{error_log_path}"
64
+ if redirect_stderr
65
+ "#{command_line} 2> #{error_log_path}"
66
+ else
67
+ "#{command_line} 2>&1"
68
+ end
64
69
  end
65
70
 
66
71
  # Validates the status of the execution
@@ -1,12 +1,13 @@
1
1
  module Departure
2
2
  class Configuration
3
- attr_accessor :tmp_path, :global_percona_args, :enabled_by_default
3
+ attr_accessor :tmp_path, :global_percona_args, :enabled_by_default, :redirect_stderr
4
4
 
5
5
  def initialize
6
6
  @tmp_path = '.'.freeze
7
7
  @error_log_filename = 'departure_error.log'.freeze
8
8
  @global_percona_args = nil
9
9
  @enabled_by_default = true
10
+ @redirect_stderr = true
10
11
  end
11
12
 
12
13
  def error_log_path
@@ -6,4 +6,6 @@ module Departure
6
6
  end
7
7
  end
8
8
  end
9
+
10
+ class OriginalAdapterConnection < ConnectionBase; end
9
11
  end
@@ -81,7 +81,7 @@ module Departure
81
81
  # enabled in a previous migration.
82
82
  def reconnect_without_percona
83
83
  return unless connection_config[:adapter] == 'percona'
84
- Departure::ConnectionBase.establish_connection(connection_config.merge(adapter: original_adapter))
84
+ Departure::OriginalAdapterConnection.establish_connection(connection_config.merge(adapter: original_adapter))
85
85
  end
86
86
 
87
87
  private
@@ -15,6 +15,7 @@ module Departure
15
15
  @cli_generator = cli_generator
16
16
  @mysql_adapter = mysql_adapter
17
17
  @error_log_path = config.error_log_path
18
+ @redirect_stderr = config.redirect_stderr
18
19
  end
19
20
 
20
21
  # Executes the passed sql statement using pt-online-schema-change for ALTER
@@ -44,12 +45,12 @@ module Departure
44
45
  # @param command_line [String]
45
46
  # @return [Boolean]
46
47
  def execute(command_line)
47
- Command.new(command_line, error_log_path, logger).run
48
+ Command.new(command_line, error_log_path, logger, redirect_stderr).run
48
49
  end
49
50
 
50
51
  private
51
52
 
52
- attr_reader :logger, :cli_generator, :mysql_adapter, :error_log_path
53
+ attr_reader :logger, :cli_generator, :mysql_adapter, :error_log_path, :redirect_stderr
53
54
 
54
55
  # Checks whether the sql statement is an ALTER TABLE
55
56
  #
@@ -1,3 +1,3 @@
1
1
  module Departure
2
- VERSION = '6.3.0'.freeze
2
+ VERSION = '6.4.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: departure
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.3.0
4
+ version: 6.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilya Zayats
@@ -15,7 +15,7 @@ authors:
15
15
  autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
- date: 2021-03-17 00:00:00.000000000 Z
18
+ date: 2022-08-04 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: railties
@@ -24,9 +24,12 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 5.2.0
27
- - - "<="
27
+ - - "!="
28
+ - !ruby/object:Gem::Version
29
+ version: 7.0.0
30
+ - - "<"
28
31
  - !ruby/object:Gem::Version
29
- version: '6.1'
32
+ version: '7.1'
30
33
  type: :runtime
31
34
  prerelease: false
32
35
  version_requirements: !ruby/object:Gem::Requirement
@@ -34,9 +37,12 @@ dependencies:
34
37
  - - ">="
35
38
  - !ruby/object:Gem::Version
36
39
  version: 5.2.0
37
- - - "<="
40
+ - - "!="
38
41
  - !ruby/object:Gem::Version
39
- version: '6.1'
42
+ version: 7.0.0
43
+ - - "<"
44
+ - !ruby/object:Gem::Version
45
+ version: '7.1'
40
46
  - !ruby/object:Gem::Dependency
41
47
  name: activerecord
42
48
  requirement: !ruby/object:Gem::Requirement
@@ -44,9 +50,12 @@ dependencies:
44
50
  - - ">="
45
51
  - !ruby/object:Gem::Version
46
52
  version: 5.2.0
47
- - - "<="
53
+ - - "!="
54
+ - !ruby/object:Gem::Version
55
+ version: 7.0.0
56
+ - - "<"
48
57
  - !ruby/object:Gem::Version
49
- version: '6.1'
58
+ version: '7.1'
50
59
  type: :runtime
51
60
  prerelease: false
52
61
  version_requirements: !ruby/object:Gem::Requirement
@@ -54,9 +63,12 @@ dependencies:
54
63
  - - ">="
55
64
  - !ruby/object:Gem::Version
56
65
  version: 5.2.0
57
- - - "<="
66
+ - - "!="
67
+ - !ruby/object:Gem::Version
68
+ version: 7.0.0
69
+ - - "<"
58
70
  - !ruby/object:Gem::Version
59
- version: '6.1'
71
+ version: '7.1'
60
72
  - !ruby/object:Gem::Dependency
61
73
  name: mysql2
62
74
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +78,7 @@ dependencies:
66
78
  version: 0.4.0
67
79
  - - "<="
68
80
  - !ruby/object:Gem::Version
69
- version: 0.5.3
81
+ version: 0.5.4
70
82
  type: :runtime
71
83
  prerelease: false
72
84
  version_requirements: !ruby/object:Gem::Requirement
@@ -76,19 +88,19 @@ dependencies:
76
88
  version: 0.4.0
77
89
  - - "<="
78
90
  - !ruby/object:Gem::Version
79
- version: 0.5.3
91
+ version: 0.5.4
80
92
  - !ruby/object:Gem::Dependency
81
93
  name: rake
82
94
  requirement: !ruby/object:Gem::Requirement
83
95
  requirements:
84
- - - "~>"
96
+ - - ">="
85
97
  - !ruby/object:Gem::Version
86
98
  version: '10.0'
87
99
  type: :development
88
100
  prerelease: false
89
101
  version_requirements: !ruby/object:Gem::Requirement
90
102
  requirements:
91
- - - "~>"
103
+ - - ">="
92
104
  - !ruby/object:Gem::Version
93
105
  version: '10.0'
94
106
  - !ruby/object:Gem::Dependency
@@ -168,11 +180,11 @@ extensions: []
168
180
  extra_rdoc_files: []
169
181
  files:
170
182
  - ".codeclimate.yml"
183
+ - ".github/workflows/test.yml"
171
184
  - ".gitignore"
172
185
  - ".pryrc"
173
186
  - ".rspec"
174
187
  - ".rubocop.yml"
175
- - ".travis.yml"
176
188
  - CHANGELOG.md
177
189
  - CODE_OF_CONDUCT.md
178
190
  - Dockerfile
@@ -233,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
233
245
  - !ruby/object:Gem::Version
234
246
  version: '0'
235
247
  requirements: []
236
- rubygems_version: 3.2.3
248
+ rubygems_version: 3.3.7
237
249
  signing_key:
238
250
  specification_version: 4
239
251
  summary: pt-online-schema-change runner for ActiveRecord migrations
data/.travis.yml DELETED
@@ -1,31 +0,0 @@
1
- language: ruby
2
-
3
- rvm:
4
- - 2.5.5
5
- - 2.6.3
6
- - 2.7.0
7
-
8
- env:
9
- - RAILS_VERSION="~> 6.1.0"
10
- - RAILS_VERSION="~> 6.0.0"
11
- - RAILS_VERSION="~> 5.2.0"
12
-
13
- jobs:
14
- include:
15
- - rvm: 2.4.6
16
- env: RAILS_VERSION="~> 5.2.0"
17
-
18
- services:
19
- - mysql
20
-
21
- before_install:
22
- - travis_retry sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 8507EFA5
23
- - echo "deb http://repo.percona.com/apt `lsb_release -cs` main" | sudo tee -a /etc/apt/sources.list
24
- - sudo apt-get update -qq
25
- - sudo apt-get install percona-toolkit
26
- - gem update bundler
27
-
28
- install: bin/setup
29
-
30
- after_success:
31
- - codeclimate-test-reporter