parity 3.2.0 → 3.5.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: 4840de61e7085008005004e7c1c6a9f59115321504596c543fe35f024db752d5
4
- data.tar.gz: 5168abae185e43bb8f2b0f32adf6e2c7613332657e17282ddead491f7fa12e45
3
+ metadata.gz: 7ee16d3e40ea984e2097512f153e70f697fc6621ace79745935fee0d8a921f77
4
+ data.tar.gz: 47b60c7616ead54c4d9f2d06757b278be7976901a43156488d6abce73e1cdfc3
5
5
  SHA512:
6
- metadata.gz: '082cda1a7eba59a61a14a970ef50b0fe544a305c3223a3135bd1ac2c172c349dfdb235cc66a2973c1731ca7da5d414d8c875f28be4b55cb1ffe354a0ffd2a0c5'
7
- data.tar.gz: 5be8e6c0cba78caa4ba1af4356674e432477629f3f6b42deb9ed3b2025a09cafb925abb6fe4b04e7ef79fa14d2c85e7686441978fb58fe4b50c612507bcad82e
6
+ metadata.gz: 1f1ac796f6f3ee3ea4ea4f7c59ba9f9ce123b22400b992bc1cc83fef6e7abddea3a505d83bd6b7935f9640249e81bfae19d1064b725a7e877e3e8f4e13ec5a9d
7
+ data.tar.gz: 1523534c0881decc98401235471ba433b44c53d023a4ab08fb639a9f318372be95dab0029fd62a1f04fa043be079d14da92d83dbd02aea1458b6848b282b8cfb
data/README.md CHANGED
@@ -8,22 +8,11 @@ Shell commands for development, staging, and production parity for Heroku apps.
8
8
  Install
9
9
  -------
10
10
 
11
- On macOS, this installs everything you need:
11
+ gem install parity
12
12
 
13
- brew tap thoughtbot/formulae
14
- brew install parity
13
+ Or bundle it in your project:
15
14
 
16
- On Debian:
17
-
18
- wget -qO - https://apt.thoughtbot.com/thoughtbot.gpg.key | sudo apt-key add -
19
- echo "deb http://apt.thoughtbot.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/thoughtbot.list
20
- sudo apt-get update
21
- sudo apt-get install parity
22
-
23
- On other systems you can:
24
-
25
- 1. Download the package for your system from the [releases page][releases]
26
- 1. Extract the tarball and place it so that `/bin` is in your `PATH`
15
+ gem "parity"
27
16
 
28
17
  [releases]: https://github.com/thoughtbot/parity/releases
29
18
 
@@ -33,10 +22,6 @@ Parity requires these command-line programs:
33
22
  heroku
34
23
  pg_restore
35
24
 
36
- On macOS, these programs are installed
37
- as Homebrew package dependencies of
38
- the `parity` Homebrew package.
39
-
40
25
  Usage
41
26
  -----
42
27
 
@@ -61,7 +46,7 @@ Push your local development database backup up to staging:
61
46
 
62
47
  staging restore development
63
48
 
64
- Deploy master to production (note that prior versions of Parity would run
49
+ Deploy main to production (note that prior versions of Parity would run
65
50
  database migrations, that's now better handled using [Heroku release phase]):
66
51
 
67
52
  production deploy
@@ -92,18 +77,18 @@ Tail a log:
92
77
  staging tail
93
78
  pr_app 1234 tail
94
79
 
95
- Use [redis-cli][2] with your `REDIS_URL` add-on:
96
-
97
- production redis-cli
98
- staging redis-cli
99
- pr_app 1234 redis-cli
100
-
101
80
  The scripts also pass through, so you can do anything with them that you can do
102
81
  with `heroku ______ --remote staging` or `heroku ______ --remote production`:
103
82
 
104
83
  watch production ps
105
84
  staging open
106
85
 
86
+ You can optionally parallelize a DB restore by passing `--parallelize`
87
+ as a flag to the `development` or `production` commands:
88
+ ```
89
+ development restore-from production --parallelize
90
+ ```
91
+
107
92
  [2]: http://redis.io/commands
108
93
 
109
94
  Convention
@@ -191,7 +176,7 @@ See guidelines in [`RELEASING.md`](RELEASING.md) for details
191
176
  License
192
177
  -------
193
178
 
194
- Parity is © 2013-2018 thoughtbot, inc.
179
+ Parity is © 2013-2021 thoughtbot, inc.
195
180
  It is free software,
196
181
  and may be redistributed under the terms specified in the [LICENSE] file.
197
182
 
data/bin/pr_app CHANGED
@@ -9,7 +9,7 @@ if ARGV.empty?
9
9
  else
10
10
  review_app_number = ARGV.first
11
11
  staging_git_remote = Open3.capture3("git remote get-url staging")[0].strip
12
- review_app_prefix = staging_git_remote.split("/").last.gsub(/\.git\Z/, "")[0, 22]
12
+ review_app_prefix = staging_git_remote.split("/").last.gsub(/\.git\Z/, "")[0, 20]
13
13
 
14
14
  exit Parity::Environment.new(
15
15
  "#{review_app_prefix}-pr-#{review_app_number}",
data/lib/parity/backup.rb CHANGED
@@ -10,6 +10,7 @@ module Parity
10
10
  def initialize(args)
11
11
  @from, @to = args.values_at(:from, :to)
12
12
  @additional_args = args[:additional_args] || BLANK_ARGUMENTS
13
+ @parallelize = args[:parallelize] || false
13
14
  end
14
15
 
15
16
  def restore
@@ -24,7 +25,9 @@ module Parity
24
25
 
25
26
  private
26
27
 
27
- attr_reader :additional_args, :from, :to
28
+ attr_reader :additional_args, :from, :to, :parallelize
29
+
30
+ alias :parallelize? :parallelize
28
31
 
29
32
  def restore_from_development
30
33
  reset_remote_database
@@ -72,7 +75,7 @@ module Parity
72
75
 
73
76
  def restore_from_local_temp_backup
74
77
  Kernel.system(
75
- "pg_restore tmp/latest.backup --verbose --clean --no-acl --no-owner "\
78
+ "pg_restore tmp/latest.backup --verbose --no-acl --no-owner "\
76
79
  "--dbname #{development_db} --jobs=#{processor_cores} "\
77
80
  "#{additional_args}",
78
81
  )
@@ -105,20 +108,20 @@ module Parity
105
108
  end
106
109
 
107
110
  def development_db
108
- YAML.load(database_yaml_file).
111
+ YAML.safe_load(database_yaml_file, aliases: true).
109
112
  fetch(DEVELOPMENT_ENVIRONMENT_KEY_NAME).
110
113
  fetch(DATABASE_KEY_NAME)
111
114
  end
112
115
 
113
116
  def database_yaml_file
114
- IO.read(DATABASE_YML_RELATIVE_PATH)
117
+ ERB.new(IO.read(DATABASE_YML_RELATIVE_PATH)).result
115
118
  end
116
119
 
117
120
  def processor_cores
118
- if ruby_version_over_2_2?
121
+ if parallelize? && ruby_version_over_2_2?
119
122
  Etc.nprocessors
120
123
  else
121
- 2
124
+ 1
122
125
  end
123
126
  end
124
127
 
@@ -41,14 +41,27 @@ module Parity
41
41
 
42
42
  def deploy
43
43
  if production?
44
- Kernel.system("git push production master")
44
+ Kernel.system("git push production #{branch_ref}")
45
45
  else
46
46
  Kernel.system(
47
- "git push #{environment} HEAD:master --force",
47
+ "git push #{environment} HEAD:#{branch_ref} --force",
48
48
  )
49
49
  end
50
50
  end
51
51
 
52
+ def branch_ref
53
+ main_ref_exists = system("git show-ref --verify --quiet refs/heads/main")
54
+ master_ref_exists = system(
55
+ "git show-ref --verify --quiet refs/heads/master",
56
+ )
57
+
58
+ if main_ref_exists && !master_ref_exists
59
+ "main"
60
+ else
61
+ "master"
62
+ end
63
+ end
64
+
52
65
  def restore
53
66
  if production? && !forced?
54
67
  $stdout.puts "Parity does not support restoring backups into your "\
@@ -57,6 +70,7 @@ module Parity
57
70
  Backup.new(
58
71
  from: arguments.first,
59
72
  to: environment,
73
+ parallelize: parallelize?,
60
74
  additional_args: additional_restore_arguments,
61
75
  ).restore
62
76
  end
@@ -72,10 +86,13 @@ module Parity
72
86
  arguments.include?("--force")
73
87
  end
74
88
 
89
+ def parallelize?
90
+ arguments.include?("--parallelize")
91
+ end
92
+
75
93
  def additional_restore_arguments
76
- (arguments.drop(1) - ["--force"] + [restore_confirmation_argument]).
77
- compact.
78
- join(" ")
94
+ (arguments.drop(1) - ["--force", "--parallelize"] +
95
+ [restore_confirmation_argument]).compact.join(" ")
79
96
  end
80
97
 
81
98
  def restore_confirmation_argument
@@ -109,16 +126,6 @@ module Parity
109
126
  )
110
127
  end
111
128
 
112
- def redis_cli
113
- Kernel.system("redis-cli", "-u", raw_redis_url)
114
- end
115
-
116
- def raw_redis_url
117
- @redis_to_go_url ||= Open3.
118
- capture3(command_for_remote("config:get REDIS_URL"))[0].
119
- strip
120
- end
121
-
122
129
  def heroku_app_name
123
130
  HerokuAppName.new(environment).to_s
124
131
  end
@@ -1,3 +1,3 @@
1
1
  module Parity
2
- VERSION = "3.2.0".freeze
2
+ VERSION = "3.5.0".freeze
3
3
  end
data/lib/parity.rb CHANGED
@@ -4,6 +4,7 @@ require "parity/heroku_app_name"
4
4
  require "parity/version"
5
5
  require "parity/environment"
6
6
  require "parity/usage"
7
+ require "erb"
7
8
  require "open3"
8
9
  require "pathname"
9
10
  require "uri"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parity
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Croak
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-04-04 00:00:00.000000000 Z
12
+ date: 2022-02-23 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: |2
15
15
  Development/staging/production parity makes it easier for
@@ -54,8 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  requirements: []
57
- rubyforge_project:
58
- rubygems_version: 2.7.6
57
+ rubygems_version: 3.1.4
59
58
  signing_key:
60
59
  specification_version: 4
61
60
  summary: Shell commands for development, staging, and production parity.