techinform 1.4.8 → 1.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/gempush.yml +30 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +20 -0
- data/README.md +2 -2
- data/lib/backup/backup.rb +2 -1
- data/lib/backup/db_backup.rb +1 -1
- data/lib/bzip2_selector.rb +7 -0
- data/lib/techinform.rb +15 -9
- data/lib/techinform/backup.rb +2 -1
- data/lib/techinform/sync/rails_exclude_files +2 -1
- data/lib/techinform/version.rb +1 -1
- data/techinform.gemspec +4 -4
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 183e41f8f63575678f62a93a9272e12ffe466065f5fcac85f83294dff4af6aba
|
4
|
+
data.tar.gz: 4565a5f143d018ca3990e7718044d816ee292d98c2b3876a89edf7d63e3c8267
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 969add1f0314c3e7b4f0e715efddab7cabcf481147d98839993fb38455742f775c0114aa2aea4c2eb1f1586e798faa78075f45813852b544b49bdce8339d8873
|
7
|
+
data.tar.gz: d9851e6fdac255d5c5e7b07b3b78525eecbd9350e201f6378bd9261ecaf893fad19cc02c189edffc2f394681365ae4318642ea64014150c41b80d8bf11e9cbc6
|
@@ -0,0 +1,30 @@
|
|
1
|
+
name: Ruby Gem
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
build:
|
11
|
+
name: Build + Publish
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
|
14
|
+
steps:
|
15
|
+
- uses: actions/checkout@v2
|
16
|
+
- name: Set up Ruby 2.7
|
17
|
+
uses: actions/setup-ruby@v1
|
18
|
+
with:
|
19
|
+
version: 2.7.x
|
20
|
+
|
21
|
+
- name: Publish to RubyGems
|
22
|
+
run: |
|
23
|
+
mkdir -p $HOME/.gem
|
24
|
+
touch $HOME/.gem/credentials
|
25
|
+
chmod 0600 $HOME/.gem/credentials
|
26
|
+
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
27
|
+
gem build *.gemspec
|
28
|
+
gem push *.gem
|
29
|
+
env:
|
30
|
+
GEM_HOST_API_KEY: ${{secrets.RUBYGEMS_AUTH_TOKEN}}
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.7.1
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
### 1.6.1
|
2
|
+
|
3
|
+
- Do not sync releases folder in case of rails backup sync
|
4
|
+
|
5
|
+
### 1.6.0
|
6
|
+
|
7
|
+
- Adds --delete option on backup sync (via rsync)
|
8
|
+
|
9
|
+
### 1.5.2
|
10
|
+
|
11
|
+
- Version bump with minor text changes
|
12
|
+
|
13
|
+
### 1.5.1
|
14
|
+
|
15
|
+
- Use parallel version of bzip2 - lbzip2 - if installed
|
16
|
+
- Use DBUSER environment variable as database user insted of USER
|
17
|
+
|
18
|
+
### 1.5.0
|
19
|
+
|
20
|
+
Change progress display - now correctly shows percents
|
data/README.md
CHANGED
@@ -17,7 +17,7 @@ Install gem yourself as:
|
|
17
17
|
|
18
18
|
* mysqldump - for mysql database dumps
|
19
19
|
* gpg2 - backup encryption support
|
20
|
-
* bzip2 - backup compression support
|
20
|
+
* bzip2 - backup compression support (prefer lbzip2 if installed)
|
21
21
|
* rsync - syncing backups
|
22
22
|
|
23
23
|
## Configuration
|
@@ -28,7 +28,7 @@ Available variables:
|
|
28
28
|
|
29
29
|
DEBUG=true # Print debug information on commands run
|
30
30
|
GPGKEY=< email | key id > # Enables encryption and encrypt with specific public key via gpg2. gpg2 should be installed
|
31
|
-
|
31
|
+
DBUSER=root # User for database access
|
32
32
|
PASSWORD=password # Password for database access
|
33
33
|
|
34
34
|
## Usage
|
data/lib/backup/backup.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'date'
|
2
2
|
require_relative '../techinform/defaults'
|
3
3
|
require 'highline'
|
4
|
+
require 'bzip2_selector'
|
4
5
|
|
5
6
|
class Backup
|
6
7
|
attr_reader :dry_run, :quiet
|
@@ -60,7 +61,7 @@ class Backup
|
|
60
61
|
if encrypt?
|
61
62
|
"| gpg2 --encrypt #{"--compress-algo=bzip2" if compress?} --recipient=#{ENV['GPGKEY']}"
|
62
63
|
else
|
63
|
-
"| bzip2" if compress?
|
64
|
+
"| #{bzip2}" if compress?
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
data/lib/backup/db_backup.rb
CHANGED
@@ -5,7 +5,7 @@ class DbBackup < Backup
|
|
5
5
|
|
6
6
|
def initialize user: nil, database: nil, password: nil, compress: true, host: nil, encrypt: nil
|
7
7
|
super compress: compress, encrypt: encrypt
|
8
|
-
user = ENV['
|
8
|
+
user = ENV['DBUSER'] if user.nil?
|
9
9
|
password = ENV['PASSWORD'] if password.nil?
|
10
10
|
@password, @user, @database, @host = password, user, database, host
|
11
11
|
ensure_path unless database.nil?
|
data/lib/techinform.rb
CHANGED
@@ -2,12 +2,15 @@ require 'techinform/version'
|
|
2
2
|
require 'techinform/projects'
|
3
3
|
require_relative 'techinform/backup'
|
4
4
|
require 'thor'
|
5
|
+
require 'bzip2_selector'
|
6
|
+
|
5
7
|
|
6
8
|
module Techinform
|
7
9
|
class CLI < Thor
|
8
10
|
desc 'restore [type] [absolute_filename or database to select file] [dbname]', 'Restore database from backup; if no absolute filename given, will present select menu to choose file'
|
9
|
-
def restore(type, filename, dbname, just_decrypt = false)
|
11
|
+
def restore(type, filename, dbname = nil, just_decrypt = false)
|
10
12
|
require 'highline'
|
13
|
+
dbname = filename if dbname.nil?
|
11
14
|
if !File.exist?(filename)
|
12
15
|
cli = HighLine.new
|
13
16
|
path = type == 'pg' ? PostgreBackup.new(database: filename).restore_path : MysqlBackup.new(database: filename).restore_path
|
@@ -15,28 +18,31 @@ module Techinform
|
|
15
18
|
end
|
16
19
|
encrypted = filename.split('.').last == 'gpg'
|
17
20
|
if type == 'pg'
|
18
|
-
puts "Restoring postgres backup to database #{dbname}..."
|
19
21
|
if encrypted && just_decrypt
|
20
|
-
|
22
|
+
puts "Decrypting postgres backup of #{filename}..."
|
23
|
+
`pv --wait #{filename} | gpg2 --decrypt | #{bzip2} > #{File.basename(filename, '.*') + '.bz2'}`
|
21
24
|
elsif encrypted
|
22
|
-
|
25
|
+
puts "Restoring postgres backup to database #{dbname}..."
|
26
|
+
`pv --wait #{filename} | gpg2 --decrypt | psql #{dbname} > /dev/null`
|
23
27
|
else
|
24
|
-
`
|
28
|
+
`pv --wait #{filename} | #{bunzip2} | psql #{dbname} > /dev/null`
|
25
29
|
end
|
26
30
|
else
|
27
|
-
puts "Restoring mysql backup to database #{dbname}..."
|
28
31
|
if encrypted && just_decrypt
|
29
|
-
|
32
|
+
puts "Decrypting mysql backup of #{filename}..."
|
33
|
+
`pv --wait #{filename} | gpg2 --decrypt | #{bzip2} > #{File.basename(filename, '.*') + '.bz2'}`
|
30
34
|
elsif encrypted
|
31
|
-
|
35
|
+
puts "Restoring mysql backup to database #{dbname}..."
|
36
|
+
`pv --wait #{filename} | gpg2 --decrypt | mysql#{" -u#{ENV['DBUSER']}" if !ENV['DBUSER'].nil?}#{" -p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
|
32
37
|
else
|
33
|
-
`
|
38
|
+
`pv --wait #{filename} | #{bunzip2} | mysql#{" -u#{ENV['DBUSER']}" if !ENV['DBUSER'].nil?}#{" -p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
|
34
39
|
end
|
35
40
|
end
|
36
41
|
end
|
37
42
|
|
38
43
|
desc 'decrypt [type] [absolute_filename or database to select file]', 'Decrypt file from backup; if no absolute filename given, will present select menu to choose file'
|
39
44
|
def decrypt(type, filename)
|
45
|
+
puts "lbzip2 is not found. Single-threaded bzip2 will be used. Consider installing lbzip2" if bzip2 == 'bzip2'
|
40
46
|
restore(type, filename, nil, true)
|
41
47
|
end
|
42
48
|
|
data/lib/techinform/backup.rb
CHANGED
@@ -47,10 +47,11 @@ module Techinform
|
|
47
47
|
end
|
48
48
|
|
49
49
|
desc 'sync [server] [type] [ipaddr | dnsname]', 'Sync backups from remote server'
|
50
|
+
option :delete, type: :boolean, default: false, desc: 'Mirror files (delete nonexistent) on sync'
|
50
51
|
def sync(server, type, ipaddr)
|
51
52
|
location = Techinform.backups_syncing_location(server, type)
|
52
53
|
`mkdir -p #{location}`
|
53
|
-
system("rsync -avz #{"--exclude-from=#{"#{File.dirname(__FILE__)}/sync/rails_exclude_files"}" if type == 'rails'} backup@#{ipaddr}::#{type} #{location}")
|
54
|
+
system("rsync -avz #{'--delete' if options[:delete]} #{"--exclude-from=#{"#{File.dirname(__FILE__)}/sync/rails_exclude_files"}" if type == 'rails'} backup@#{ipaddr}::#{type} #{location}")
|
54
55
|
end
|
55
56
|
end
|
56
57
|
end
|
data/lib/techinform/version.rb
CHANGED
data/techinform.gemspec
CHANGED
@@ -16,11 +16,11 @@ Gem::Specification.new do |spec|
|
|
16
16
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
17
17
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
18
18
|
if spec.respond_to?(:metadata)
|
19
|
-
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
19
|
+
# spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
20
20
|
|
21
21
|
spec.metadata["homepage_uri"] = spec.homepage
|
22
|
-
spec.metadata["source_code_uri"] = "https://github.com/
|
23
|
-
spec.metadata["changelog_uri"] = "https://github.com/
|
22
|
+
spec.metadata["source_code_uri"] = "https://github.com/alexey-chernikov/techinform"
|
23
|
+
spec.metadata["changelog_uri"] = "https://github.com/alexey-chernikov/techinform/CHANGELOG.md"
|
24
24
|
else
|
25
25
|
raise "RubyGems 2.0 or newer is required to protect against " \
|
26
26
|
"public gem pushes."
|
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
|
|
38
38
|
spec.add_dependency 'thor', '~> 0.20'
|
39
39
|
spec.add_dependency 'highline', '~> 2.0'
|
40
40
|
|
41
|
-
spec.add_development_dependency 'bundler', '~> 1
|
41
|
+
spec.add_development_dependency 'bundler', '~> 2.1'
|
42
42
|
spec.add_development_dependency 'rake', '~> 13.0.1'
|
43
43
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
44
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: techinform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Chernikov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1
|
47
|
+
version: '2.1'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1
|
54
|
+
version: '2.1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,8 +90,10 @@ executables:
|
|
90
90
|
extensions: []
|
91
91
|
extra_rdoc_files: []
|
92
92
|
files:
|
93
|
+
- ".github/workflows/gempush.yml"
|
93
94
|
- ".gitignore"
|
94
95
|
- ".ruby-version"
|
96
|
+
- CHANGELOG.md
|
95
97
|
- CODE_OF_CONDUCT.md
|
96
98
|
- Gemfile
|
97
99
|
- README.md
|
@@ -107,6 +109,7 @@ files:
|
|
107
109
|
- lib/backup/files_backup.rb
|
108
110
|
- lib/backup/mysql_backup.rb
|
109
111
|
- lib/backup/postgre_backup.rb
|
112
|
+
- lib/bzip2_selector.rb
|
110
113
|
- lib/techinform.rb
|
111
114
|
- lib/techinform/backup.rb
|
112
115
|
- lib/techinform/defaults.rb
|
@@ -118,10 +121,9 @@ homepage: https://techinform.dev
|
|
118
121
|
licenses:
|
119
122
|
- MIT
|
120
123
|
metadata:
|
121
|
-
allowed_push_host: https://rubygems.org
|
122
124
|
homepage_uri: https://techinform.dev
|
123
|
-
source_code_uri: https://github.com/
|
124
|
-
changelog_uri: https://github.com/
|
125
|
+
source_code_uri: https://github.com/alexey-chernikov/techinform
|
126
|
+
changelog_uri: https://github.com/alexey-chernikov/techinform/CHANGELOG.md
|
125
127
|
post_install_message:
|
126
128
|
rdoc_options: []
|
127
129
|
require_paths:
|
@@ -137,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
139
|
- !ruby/object:Gem::Version
|
138
140
|
version: '0'
|
139
141
|
requirements: []
|
140
|
-
rubygems_version: 3.
|
142
|
+
rubygems_version: 3.1.4
|
141
143
|
signing_key:
|
142
144
|
specification_version: 4
|
143
145
|
summary: Console tools, useful at Techinform
|