heroku_cli 0.1.2 → 0.2.1
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 +5 -5
- data/.github/workflows/ruby.yml +20 -0
- data/.ruby-version +1 -0
- data/README.md +3 -1
- data/heroku_cli.gemspec +3 -3
- data/lib/heroku_cli/base.rb +8 -4
- data/lib/heroku_cli/pg/database.rb +29 -13
- data/lib/heroku_cli/pg.rb +23 -7
- data/lib/heroku_cli/version.rb +1 -1
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7bde86920489f39c39bf2d00cb92374e1bf0de429952a1bb39ebbdd182324def
|
4
|
+
data.tar.gz: c78e49f1c81ecb0f356e9881d08705b652e8bac28807b07c1af41a588cafe525
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7a3f2180402966a71e43b24beaf125818f047bfef705d81066091df89ea591239cbbc84c52376c4e2feb26cd10686d4d62cce722a73a88dfa377c99374925d2
|
7
|
+
data.tar.gz: 0f3607f47744594c9bd6ce33b554d9f9ddc979d65efb72bf6866061b6256e70a9a9a1a7a57c7e0889fc53dabb38bf0e0f79eae5a12cb8ee516b0b3e23868fd2d
|
@@ -0,0 +1,20 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on: [push]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
build:
|
7
|
+
|
8
|
+
runs-on: ubuntu-latest
|
9
|
+
|
10
|
+
steps:
|
11
|
+
- uses: actions/checkout@v2
|
12
|
+
- name: Set up Ruby 3.2
|
13
|
+
uses: actions/setup-ruby@v1
|
14
|
+
with:
|
15
|
+
ruby-version: 3.2.x
|
16
|
+
- name: Build and test with Rake
|
17
|
+
run: |
|
18
|
+
gem install bundler
|
19
|
+
bundle install --jobs 4 --retry 3
|
20
|
+
bundle exec rake
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.2.4
|
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+

|
2
|
+
|
1
3
|
# HerokuCLI
|
2
4
|
|
3
5
|
This gem will wrap the Heroku CLI so it may be used in ruby code
|
@@ -31,7 +33,7 @@ staging = HerokuCLI.application('staging')
|
|
31
33
|
staging.pg.create_follower(production_db)
|
32
34
|
staging.pg.wait
|
33
35
|
new_db = staging.pg.followers.first
|
34
|
-
staging.promote(new_db)
|
36
|
+
staging.pg.promote(new_db, wait: true)
|
35
37
|
```
|
36
38
|
|
37
39
|
## Development
|
data/heroku_cli.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["rasmus.bergholdt@gmail.com"]
|
11
11
|
|
12
12
|
spec.summary = %q{A tiny wrapper for Heroku CLI}
|
13
|
-
spec.description = %q{Wrap the Heroku CLI to make it more
|
13
|
+
spec.description = %q{Wrap the Heroku CLI to make it more accessible from your ruby script}
|
14
14
|
spec.homepage = "https://github.com/Flightlogger/heroku_cli"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
-
spec.add_development_dependency "bundler", "~>
|
25
|
-
spec.add_development_dependency "rake", "~>
|
24
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
25
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
26
26
|
spec.add_development_dependency "rspec", "~> 3.0"
|
27
27
|
end
|
data/lib/heroku_cli/base.rb
CHANGED
@@ -6,10 +6,14 @@ module HerokuCLI
|
|
6
6
|
@application = application.is_a?(String) ? Application.new(application) : application
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
def heroku(cmd, args=nil)
|
10
|
+
if !args || args.strip.empty?
|
11
|
+
puts "heroku #{cmd} -a #{application.name}"
|
12
|
+
%x{ heroku #{cmd} -a #{application.name} }
|
13
|
+
else
|
14
|
+
puts "heroku #{cmd} -a #{application.name} -- #{args}"
|
15
|
+
%x{ heroku #{cmd} -a #{application.name} -- #{args} }
|
16
|
+
end
|
13
17
|
end
|
14
18
|
end
|
15
19
|
end
|
@@ -2,17 +2,16 @@ module HerokuCLI
|
|
2
2
|
class PG < Base
|
3
3
|
class Database
|
4
4
|
attr_reader :url_names, :info
|
5
|
+
attr_reader :pg
|
6
|
+
|
7
|
+
def initialize(info, pg = nil)
|
8
|
+
@pg = pg
|
9
|
+
parse_info(info)
|
5
10
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
info.each do |line|
|
11
|
-
k = line.split(':')[0].strip
|
12
|
-
v = line.split(':')[1..-1].join(':').strip
|
13
|
-
next if k.nil? || v.nil?
|
14
|
-
@info[k] = v
|
15
|
-
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def reload
|
14
|
+
parse_info(pg.heroku("pg:info #{url_name}")) if pg.present?
|
16
15
|
end
|
17
16
|
|
18
17
|
def url_name
|
@@ -21,6 +20,7 @@ module HerokuCLI
|
|
21
20
|
|
22
21
|
def to_s
|
23
22
|
result = ["=== #{@url_names.join(', ')}"]
|
23
|
+
result.concat([''])
|
24
24
|
result.concat(info.map { |k, v| format("%-22.22s %s", "#{k}:", v)})
|
25
25
|
result.concat([''])
|
26
26
|
result.join("\n")
|
@@ -55,11 +55,11 @@ module HerokuCLI
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def forks
|
58
|
-
info['Forks']
|
58
|
+
info['Forks']&.split(',')&.map(&:strip)
|
59
59
|
end
|
60
60
|
|
61
61
|
def forked_from
|
62
|
-
info['Forked From']
|
62
|
+
info['Forked From']&.split(',')&.map(&:strip)
|
63
63
|
end
|
64
64
|
|
65
65
|
def following
|
@@ -71,7 +71,7 @@ module HerokuCLI
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def fork?
|
74
|
-
|
74
|
+
!(main? || follower?) && forked_from&.any?
|
75
75
|
end
|
76
76
|
|
77
77
|
def follower?
|
@@ -93,6 +93,22 @@ module HerokuCLI
|
|
93
93
|
def resource_name
|
94
94
|
info['Add-on']
|
95
95
|
end
|
96
|
+
|
97
|
+
def parse_info(info)
|
98
|
+
info = info.split("\n") if info.is_a?(String)
|
99
|
+
@url_names = info.shift
|
100
|
+
@url_names = @url_names.sub('=== ','').split(',').map(&:strip)
|
101
|
+
@info = {}
|
102
|
+
info.each do |line|
|
103
|
+
next if line.strip.empty?
|
104
|
+
|
105
|
+
k = line.split(':')[0]&.strip
|
106
|
+
v = line.split(':')[1..-1]&.join(':')&.strip
|
107
|
+
next if k.nil? || v.nil?
|
108
|
+
|
109
|
+
@info[k] = v
|
110
|
+
end
|
111
|
+
end
|
96
112
|
end
|
97
113
|
end
|
98
114
|
end
|
data/lib/heroku_cli/pg.rb
CHANGED
@@ -10,33 +10,40 @@ module HerokuCLI
|
|
10
10
|
next if stdout.nil? || stdout.length.zero?
|
11
11
|
stdout = stdout.split("\n")
|
12
12
|
stdout[0] = "===#{stdout[0]}"
|
13
|
-
Database.new(stdout)
|
13
|
+
Database.new(stdout, self)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
def reload
|
19
|
+
@info = nil
|
20
|
+
end
|
21
|
+
|
18
22
|
# create a follower database
|
19
23
|
def create_follower(database, options = {})
|
20
24
|
plan = options.delete(:plan) || database.plan
|
21
|
-
heroku "addons:create heroku-postgresql:#{plan} --follow #{database.resource_name}"
|
25
|
+
heroku "addons:create heroku-postgresql:#{plan}", "--follow #{database.resource_name}"
|
22
26
|
end
|
23
27
|
|
24
28
|
# Remove the following of a database and put DB into write mode
|
25
|
-
def un_follow(database)
|
29
|
+
def un_follow(database, wait: false)
|
26
30
|
raise "Not a following database #{database.name}" unless database.follower?
|
27
|
-
|
31
|
+
|
32
|
+
heroku "pg:unfollow #{database.url_name}", "-c #{application.name}"
|
33
|
+
wait_for_follow_fork_transformation(database) if wait
|
28
34
|
end
|
29
35
|
|
30
36
|
# sets DATABASE as your DATABASE_URL
|
31
|
-
def promote(database)
|
37
|
+
def promote(database, wait: false)
|
32
38
|
raise "Database already main #{database.name}" if database.main?
|
33
|
-
|
39
|
+
|
40
|
+
un_follow(database, wait: wait) if database.follower?
|
34
41
|
heroku "pg:promote #{database.resource_name}"
|
35
42
|
end
|
36
43
|
|
37
44
|
def destroy(database)
|
38
45
|
raise "Cannot destroy #{application.name} main database" if database.main?
|
39
|
-
heroku "addons:destroy #{database.url_name} -c #{application.name}"
|
46
|
+
heroku "addons:destroy #{database.url_name}", "-c #{application.name}"
|
40
47
|
end
|
41
48
|
|
42
49
|
# Return the main database
|
@@ -58,5 +65,14 @@ module HerokuCLI
|
|
58
65
|
def wait
|
59
66
|
heroku 'pg:wait'
|
60
67
|
end
|
68
|
+
|
69
|
+
def wait_for_follow_fork_transformation(database)
|
70
|
+
while database.follower? do
|
71
|
+
puts "...wait 10 seconds for DB to change from follower to fork"
|
72
|
+
sleep 10
|
73
|
+
database.reload
|
74
|
+
puts database
|
75
|
+
end
|
76
|
+
end
|
61
77
|
end
|
62
78
|
end
|
data/lib/heroku_cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: heroku_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rasmus Bergholdt
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,15 +52,17 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
-
description: Wrap the Heroku CLI to make it more
|
55
|
+
description: Wrap the Heroku CLI to make it more accessible from your ruby script
|
56
56
|
email:
|
57
57
|
- rasmus.bergholdt@gmail.com
|
58
58
|
executables: []
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
+
- ".github/workflows/ruby.yml"
|
62
63
|
- ".gitignore"
|
63
64
|
- ".rspec"
|
65
|
+
- ".ruby-version"
|
64
66
|
- ".travis.yml"
|
65
67
|
- CODE_OF_CONDUCT.md
|
66
68
|
- Gemfile
|
@@ -82,7 +84,7 @@ homepage: https://github.com/Flightlogger/heroku_cli
|
|
82
84
|
licenses:
|
83
85
|
- MIT
|
84
86
|
metadata: {}
|
85
|
-
post_install_message:
|
87
|
+
post_install_message:
|
86
88
|
rdoc_options: []
|
87
89
|
require_paths:
|
88
90
|
- lib
|
@@ -97,10 +99,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
99
|
- !ruby/object:Gem::Version
|
98
100
|
version: '0'
|
99
101
|
requirements: []
|
100
|
-
|
101
|
-
|
102
|
-
signing_key:
|
102
|
+
rubygems_version: 3.4.19
|
103
|
+
signing_key:
|
103
104
|
specification_version: 4
|
104
105
|
summary: A tiny wrapper for Heroku CLI
|
105
106
|
test_files: []
|
106
|
-
has_rdoc:
|