parity 3.2.0 → 3.5.0

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
  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.