techinform 1.4.8 → 1.6.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 +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
|