brillo 2.0.0 → 2.1.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: 47970e828e8f6c937a127899e5776e61a35b2cefe3536d828d7ac72eb3d6a0d9
4
- data.tar.gz: 40d537dbc8e867c694e041e995f8e1143a6f732a8be04b21d4f18104a432cbe9
3
+ metadata.gz: 9c97a829dd9d79a4352fe26a35045a2a2b6a04765b12bd984ceaa9c91677edc3
4
+ data.tar.gz: b48b60da36cfe1f8831edcddbffbdcc98625ed27691714abe1467d84ef6d78c6
5
5
  SHA512:
6
- metadata.gz: 8fbe2aa30206b19a97a4012c98b9fb8269b2995646ee6fe01943a3b856033970826560cacc94ed77493ece82384e6b66e3f3ae1565665c4e62710f1522214b40
7
- data.tar.gz: 2f03f2d9a6c4e7f5facabffca66dfb822f2bdff769137632c512fcc61e1d1ff4eba6ecca011fa466b521e5574557b81dbe4f2ac6c4d4eb32527ad1783637f32a
6
+ metadata.gz: 6641ac2db5299a07ff8323572b10fade253fc398710cb931cb46ea777a0bc0077d79054f7d4920b231bdb5c1019f5a0bddbfb5f69193f2cacb48ea38266e1357
7
+ data.tar.gz: 911695fa62235e3e6780c40cd3a9d8188cd010c1ade79b135c9c67df997dcd393eea21733b9f7c562a4a27a3b38f4336fe5734a0525fe014f9d09bf29cc09202
@@ -0,0 +1,7 @@
1
+ version: 2
2
+ updates:
3
+
4
+ - package-ecosystem: "bundler"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "monthly"
@@ -0,0 +1,31 @@
1
+ name: Ruby Gem
2
+
3
+ on:
4
+ workflow_run:
5
+ workflows:
6
+ - Run Tests
7
+ branches:
8
+ - master
9
+ types:
10
+ - completed
11
+
12
+ jobs:
13
+ build:
14
+ name: Build + Publish
15
+ runs-on: ubuntu-latest
16
+ if: ${{ github.event.workflow_run.conclusion == 'success' }}
17
+ steps:
18
+ - uses: actions/checkout@v2
19
+ - name: Set up Ruby 2.6
20
+ uses: ruby/setup-ruby@v1
21
+
22
+ - name: Publish to RubyGems
23
+ run: |
24
+ mkdir -p $HOME/.gem
25
+ touch $HOME/.gem/credentials
26
+ chmod 0600 $HOME/.gem/credentials
27
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
28
+ gem build *.gemspec
29
+ gem push *.gem
30
+ env:
31
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
@@ -0,0 +1,22 @@
1
+ name: Run Tests
2
+
3
+ on:
4
+ - push
5
+ jobs:
6
+ test:
7
+ name: Run Tests
8
+ runs-on: ubuntu-latest
9
+ strategy:
10
+ fail-fast: false
11
+ matrix:
12
+ gemfile: [ rails_5.1, rails_5.2, rails_6.0, rails_6.1 ]
13
+ env:
14
+ BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - name: Set up Ruby
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ bundler-cache: true
21
+ - name: RSpec
22
+ run: bundle exec appraisal ${{ matrix.gemfile }} rspec
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.5
data/Appraisals CHANGED
@@ -1,19 +1,19 @@
1
- appraise "rails-4.2" do
2
- gem "rails", "~> 4.2.0"
1
+ appraise "rails_5.1" do
2
+ gem "rails", "~> 5.1.0"
3
3
  gem "mysql2", "~> 0.4.5"
4
4
  end
5
5
 
6
- appraise "rails-5.0" do
7
- gem "rails", "~> 5.0.0"
6
+ appraise "rails_5.2" do
7
+ gem "rails", "~> 5.2.0"
8
8
  gem "mysql2", "~> 0.4.5"
9
9
  end
10
10
 
11
- appraise "rails-5.1" do
12
- gem "rails", "~> 5.1.0"
11
+ appraise "rails_6.0" do
12
+ gem "rails", "~> 6.0.0"
13
13
  gem "mysql2", "~> 0.4.5"
14
14
  end
15
15
 
16
- appraise "rails-5.2" do
17
- gem "rails", "~> 5.2.0"
16
+ appraise "rails_6.1" do
17
+ gem "rails", "~> 6.1.0"
18
18
  gem "mysql2", "~> 0.4.5"
19
- end
19
+ end
data/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # Change Log
2
2
 
3
- ## 2.0.0 (Unreleased)
3
+ ## Unreleased
4
+
5
+ ## 2.1.0
6
+
7
+ - Added `recreate_db` config option which:
8
+ - Allows to skip dumping structures and migrations on Brillo.scrub!
9
+ - Allows to skip db recreation on Brillo.load!
10
+ - Added `filename` scrub/load option to allow changing the name of the resulting scrubbed file or file to import on the DB.
11
+ - Added config option `schema_search_path` support for Postgres so you can specify the schema (if any) on your current pg db.
12
+ - Added `keep_local` param to Brillo.load to prevent downloading a file over and over again if the filename provided is already present. (useful for test runners)
13
+
14
+ ## 2.0.0
15
+
4
16
  Upgrade to AWS SDK 3.0, reduce dependence to S3 specifically.
5
17
 
6
18
  Support ERB in brillo.yaml
@@ -10,48 +22,59 @@ Support alternative primary keys to "id"
10
22
  Fix bug where Brillo breaks when using the Octopus gem
11
23
 
12
24
  ## 1.3.1
25
+
13
26
  Disable query cacheing to reduce memory growth over time.
14
27
 
15
28
  ## 1.3.0
29
+
16
30
  Remove Caring specific scrubber code
17
31
 
18
32
  Fix Postgres load failing because of existing connection
19
33
 
20
34
  ## 1.2.2
35
+
21
36
  Fixed initializer. `Brillo.configure` pre-initialization will now work.
22
37
 
23
38
  Moved verification of config to post app initialization.
24
39
 
25
40
  ## 1.2.1
41
+
26
42
  Support S3 config [via your environment](https://github.com/aws/aws-sdk-ruby#configuration). To configure via the environment, just leave your `Brillo.config.transfer_config.{access_key_id,secret_access_key}` blank.
27
43
 
28
44
  ## 1.1.4
45
+
29
46
  Fix loading a postgres database with a password set.
30
47
 
31
48
  ## 1.1.3
49
+
32
50
  Fix bug in S3 upload path. Files were previously uploading to their local system path in S3. I.e. `bucket-name/my/rails/app/tmp/my-app-scrubbed.dmp.gz`.
33
51
 
34
52
  ## 1.1.2
53
+
35
54
  Set us-east-1 as the default region, because this is S3s default and can be accessed from other regions.
36
55
 
37
56
  ## 1.1.1
57
+
38
58
  Fixed postgres sequence not being set to MAX(id).
39
59
 
40
60
  ## 1.1.0
61
+
41
62
  **New**
63
+
42
64
  - **BREAKING** Brillo used to support loading your credentials from a YAML file at `/etc/ec2_secure_env.yml`
43
- but no longer does. It is now your responsibility to ensure the credentials are in the environment Brillo
44
- runs in.
65
+ but no longer does. It is now your responsibility to ensure the credentials are in the environment Brillo
66
+ runs in.
45
67
  - Removed the dependency on the AWS Timkay CLI, instead using the AWS gem.
46
68
  - Added support for configuring all S3 parameters in Ruby land
47
69
 
48
70
  **Fixed**
71
+
49
72
  - Fix mysql exec when no host specified
50
73
  - Fix postgres exec when no host specified
51
74
  - Fix postgres adapter reference
52
75
 
53
-
54
76
  ## 1.0.0
77
+
55
78
  First public Brillo version!
56
79
 
57
80
  ## 0.3.0
data/README.md CHANGED
@@ -1,4 +1,3 @@
1
- [![Build Status](https://travis-ci.org/bessey/brillo.svg?branch=master)](https://travis-ci.org/bessey/brillo)
2
1
  [![Gem Version](https://badge.fury.io/rb/brillo.svg)](https://badge.fury.io/rb/brillo)
3
2
 
4
3
  # Brillo
@@ -42,28 +41,35 @@ set :brillo_role, :my_batch_role
42
41
  Here's an example `brillo.yml` for IMDB:
43
42
 
44
43
  ```yaml
45
- name: imdb # Namespace the scrubbed file will occupy in S3
44
+ name: imdb # Namespace the scrubbed file will occupy in S3
45
+ compress: true # Compresses the file after scrubbing (default: true)
46
46
  explore:
47
- user: # Name of ActiveRecord class in snake_case
48
- tactic: all # Scrubbing tactic to use (see Brillo:TACTICS for choices)
49
- associations: # Associations to include in the scrub (ALL associated records included)
47
+ user: # Name of ActiveRecord class in snake_case
48
+ tactic: all # Scrubbing tactic to use (see Brillo:TACTICS for choices)
49
+ associations: # Associations to include in the scrub (ALL associated records included)
50
50
  - comments
51
51
  movie:
52
- tactic: latest # The latest tactic explores the most recent 1,000 records
52
+ tactic: latest # The latest tactic explores the most recent 1,000 records
53
53
  associations:
54
54
  - actors
55
55
  - ratings
56
- admin/note: # Corresponds to the Admin::Note class
56
+ admin/note: # Corresponds to the Admin::Note class
57
57
  tactic: all
58
- obfuscations: #
59
- user.name: name # Scrub user.name with the "name" scrubber (see Brillo::SCRUBBERS for choices)
58
+ obfuscations: #
59
+ user.name: name # Scrub user.name with the "name" scrubber (see Brillo::SCRUBBERS for choices)
60
60
  user.phone: phone
61
61
  user.email: email
62
62
  ```
63
63
 
64
64
  Brillo uses [the official aws-sdk](https://github.com/aws/aws-sdk-ruby) to communicate with S3. There [are a number of ways](https://github.com/aws/aws-sdk-ruby#configuration) to pass your S3 credentials, but the simplest is to set `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` in your environment.
65
65
 
66
- If you'd like to see the gem in use, check out the [/example_app](https://github.com/bessey/brillo/tree/master/example_app) directory.
66
+ If you'd like to see the gem in use, check out the [/example_app](https://github.com/bessey/brillo/tree/master/example_app) directory.
67
+
68
+ ### Creating a scrubbed copy of the database in production
69
+
70
+ ```bash
71
+ $ rake db:scrub
72
+ ```
67
73
 
68
74
  ### Loading a database in development
69
75
 
@@ -1,6 +1,7 @@
1
1
  name: my-app # Namespace the scrubbed file will occupy
2
2
  ## Optional configuration (with defaults shown)
3
3
  # compress: true # Enables gzip on scrub and ungzip on load
4
+ # recreate_db: true # Dump structures and migrations on scrub and recreated database on load
4
5
  #
5
6
  # obfuscations:
6
7
  # user.name: name # Scrub table.field with scrubber (see Brillo::SCRUBBERS for choices)
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_RETRY: "1"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", "~> 4.2.0"
5
+ gem "rails", "~> 6.0.0"
6
6
  gem "mysql2", "~> 0.4.5"
7
7
 
8
8
  gemspec path: "../"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", "~> 5.0.0"
5
+ gem "rails", "~> 6.1.0"
6
6
  gem "mysql2", "~> 0.4.5"
7
7
 
8
8
  gemspec path: "../"
data/lib/brillo.rb CHANGED
@@ -27,20 +27,26 @@ module Brillo
27
27
  yield config
28
28
  end
29
29
 
30
- def self.scrub!(logger: ::Logger.new(STDOUT))
30
+ def self.scrub!(logger: ::Logger.new(STDOUT), filename: nil)
31
31
  Brillo::Logger.logger = logger
32
- Scrubber.new(config).scrub!
32
+ configuration = config
33
+ configuration.app_name = filename if filename
34
+ Scrubber.new(configuration).scrub!
33
35
  end
34
36
 
35
- def self.load!(logger: ::Logger.new(STDOUT))
37
+ def self.load!(keep_local: false, logger: ::Logger.new(STDOUT), filename: nil)
36
38
  Brillo::Logger.logger = logger
37
- Loader.new(config).load!
39
+ configuration = config
40
+ configuration.app_name = filename if filename
41
+ Loader.new(configuration).load! keep_local
38
42
  end
39
43
 
40
44
  def self.config
41
45
  @config ||= begin
42
46
  static_config = YAML.load(ERB.new(File.read("#{Rails.root.to_s}/config/brillo.yml")).result).deep_symbolize_keys
43
- Config.new(static_config)
47
+ c = Config.new(static_config)
48
+ yield c if block_given?
49
+ c
44
50
  end
45
51
  end
46
52
 
@@ -4,7 +4,9 @@ module Brillo
4
4
  def load_command
5
5
  host = config["host"] ? "--host #{config["host"]}" : ""
6
6
  password = config["password"] ? "PGPASSWORD=#{config["password"]} " : ""
7
- "#{password}psql #{host} -U #{config.fetch("username")} #{config.fetch("database")}"
7
+ search_path = config["schema_search_path"] ? "PGOPTIONS=--search_path=#{config["schema_search_path"]} " : ""
8
+ inline_options = password + search_path
9
+ "#{inline_options}psql #{host} -U #{config.fetch("username")} #{config.fetch("database")}"
8
10
  end
9
11
 
10
12
  # pgdump without schema does not set sequences, so we have to do it ourselves, or the first insert
data/lib/brillo/config.rb CHANGED
@@ -1,11 +1,12 @@
1
1
  module Brillo
2
2
  class Config
3
- attr_reader :app_name, :compress, :obfuscations, :klass_association_map, :db, :transfer_config
3
+ attr_accessor :app_name, :compress, :obfuscations, :klass_association_map, :db, :transfer_config, :recreate_db
4
4
 
5
5
  def initialize(options = {})
6
6
  @app_name = options.fetch(:name)
7
7
  @klass_association_map = options[:explore] || {}
8
8
  @compress = options.fetch(:compress, true)
9
+ @recreate_db = options.fetch(:recreate_db, true)
9
10
  @transfer_config = Transferrer::Config.new(**options.fetch(:transfer, {}))
10
11
  @obfuscations = parse_obfuscations(options[:obfuscations] || {})
11
12
  rescue KeyError => e
data/lib/brillo/loader.rb CHANGED
@@ -11,13 +11,23 @@ module Brillo
11
11
  @config = config
12
12
  end
13
13
 
14
- def load!
15
- config.transferrer.download
14
+ def load!(keep_local)
15
+ download_sql(keep_local)
16
16
  recreate_db
17
17
  import_sql
18
18
  end
19
19
 
20
+ def download_sql(keep_local)
21
+ if keep_local
22
+ path = config.compress ? config.compressed_dump_path : config.dump_path
23
+ return if File.exists? path
24
+ end
25
+
26
+ config.transferrer.download
27
+ end
28
+
20
29
  def recreate_db
30
+ return unless config.recreate_db
21
31
  config.adapter.recreate_db
22
32
  end
23
33
 
@@ -16,7 +16,7 @@ module Brillo
16
16
  phone: ->(n) { n = n.split(' ').first; n && n.length > 9 ? n[0..-5] + n[-1] + n[-2] + n[-3] + n[-4] : n},
17
17
  name: ->(n) { n.downcase.split(' ').map do |word|
18
18
  word.chars.shuffle!(random: JUMBLE_PRNG.clone).join
19
- end.each(&:capitalize!).join(' ')
19
+ end.each(&:capitalize!).join(' ')
20
20
  },
21
21
  }
22
22
 
@@ -35,12 +35,17 @@ module Brillo
35
35
  def scrub!
36
36
  FileUtils.rm config.compressed_filename, force: true
37
37
  configure_polo
38
- adapter.dump_structure_and_migrations(config)
38
+ dump_structure_and_migrations
39
39
  explore_all_classes
40
40
  compress
41
41
  config.transferrer.upload
42
42
  end
43
43
 
44
+ def dump_structure_and_migrations
45
+ return unless config.recreate_db
46
+ adapter.dump_structure_and_migrations(config)
47
+ end
48
+
44
49
  def explore_all_classes
45
50
  File.open(config.dump_path, "a") do |sql_file|
46
51
  sql_file.puts(adapter.header)
@@ -1,3 +1,3 @@
1
1
  module Brillo
2
- VERSION = "2.0.0"
2
+ VERSION = "2.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brillo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Bessey
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-04 00:00:00.000000000 Z
11
+ date: 2021-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -157,9 +157,12 @@ executables: []
157
157
  extensions: []
158
158
  extra_rdoc_files: []
159
159
  files:
160
+ - ".github/dependabot.yml"
161
+ - ".github/workflows/gem-push.yml"
162
+ - ".github/workflows/run-tests.yml"
160
163
  - ".gitignore"
161
164
  - ".rspec"
162
- - ".travis.yml"
165
+ - ".ruby-version"
163
166
  - Appraisals
164
167
  - CHANGELOG.md
165
168
  - Gemfile
@@ -171,10 +174,11 @@ files:
171
174
  - brillo.gemspec
172
175
  - config/brillo-example.yml
173
176
  - config/brillo-initializer.rb
174
- - gemfiles/rails_4.2.gemfile
175
- - gemfiles/rails_5.0.gemfile
177
+ - gemfiles/.bundle/config
176
178
  - gemfiles/rails_5.1.gemfile
177
179
  - gemfiles/rails_5.2.gemfile
180
+ - gemfiles/rails_6.0.gemfile
181
+ - gemfiles/rails_6.1.gemfile
178
182
  - lib/brillo.rb
179
183
  - lib/brillo/adapter/README.md
180
184
  - lib/brillo/adapter/base.rb
@@ -215,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
215
219
  - !ruby/object:Gem::Version
216
220
  version: '0'
217
221
  requirements: []
218
- rubygems_version: 3.0.4
222
+ rubygems_version: 3.0.3
219
223
  signing_key:
220
224
  specification_version: 4
221
225
  summary: Rails database scrubber and loader, great for seeding your dev db with real
data/.travis.yml DELETED
@@ -1,27 +0,0 @@
1
- language: ruby
2
-
3
- rvm:
4
- - 2.3.1
5
- - 2.5.1
6
-
7
- gemfile:
8
- - gemfiles/rails_4.2.gemfile
9
- - gemfiles/rails_5.0.gemfile
10
- - gemfiles/rails_5.1.gemfile
11
- - gemfiles/rails_5.2.gemfile
12
-
13
- cache: bundler
14
-
15
- services:
16
- - mysql
17
-
18
- before_install:
19
- - mysql -e "create database IF NOT EXISTS brillo_test;" -uroot
20
-
21
- script:
22
- - bundle exec rspec
23
- - cd example_app; bundle exec rspec
24
-
25
- matrix:
26
- allow_failures:
27
- - gemfile: gemfiles/rails_5.2.gemfile