techinform 1.4.6 → 1.5.2
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 +9 -0
- data/README.md +3 -3
- 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/version.rb +1 -1
- data/techinform.gemspec +18 -5
- metadata +18 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d416aeb0ed6107b42d4e73b8f8781f3bb627c81b69c6032c2a7948de26d0fcff
|
|
4
|
+
data.tar.gz: 749b0b6306b03bf207f554196164d6b69cda2213acf4ceb766db6ee025cc5e2a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: be9cb1690472bfcad0f0957f7a094b1441305bb19d60cda1790a1aee3b97cbf197de53d91d0cd4660b0a57ef805c5cb7ee7da6046dbcd2d44c4d577244b27d31
|
|
7
|
+
data.tar.gz: 295465b890a59462c9dd5e2eefd73a3672ce5461e1d096dccc1a16db4dbc0163761a59d89caa79853b56674e1866195a7731ebc1b34b45dba57dc381c2e2199c
|
|
@@ -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
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Techinform
|
|
2
2
|
|
|
3
|
-
Collection of console tools, useful for everyday tasks in Techinform company.
|
|
3
|
+
Collection of console tools, useful for everyday tasks in Techinform Soft company (https://techinform.dev).
|
|
4
4
|
|
|
5
5
|
* All backups stored at /backups/local directory.
|
|
6
6
|
* All backup sync goes to /backups/< server name > directory.
|
|
@@ -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/version.rb
CHANGED
data/techinform.gemspec
CHANGED
|
@@ -7,11 +7,24 @@ Gem::Specification.new do |spec|
|
|
|
7
7
|
spec.name = 'techinform'
|
|
8
8
|
spec.version = Techinform::VERSION
|
|
9
9
|
spec.authors = ['Alexey Chernikov']
|
|
10
|
-
spec.email = ['alexey
|
|
10
|
+
spec.email = ['alexey@chernikov.online']
|
|
11
11
|
|
|
12
12
|
spec.summary = %q{Console tools, useful at Techinform}
|
|
13
|
-
spec.description = %q{Collection of console tools, which is useful for everyday work at Techinform.}
|
|
14
|
-
spec.homepage = 'https://techinform.
|
|
13
|
+
spec.description = %q{Collection of console tools, which is useful for everyday work at Techinform Soft ( https://techinform.dev )}
|
|
14
|
+
spec.homepage = 'https://techinform.dev'
|
|
15
|
+
|
|
16
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
|
17
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
|
18
|
+
if spec.respond_to?(:metadata)
|
|
19
|
+
# spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
|
20
|
+
|
|
21
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
|
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
|
+
else
|
|
25
|
+
raise "RubyGems 2.0 or newer is required to protect against " \
|
|
26
|
+
"public gem pushes."
|
|
27
|
+
end
|
|
15
28
|
|
|
16
29
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
17
30
|
f.match(%r{^(test|spec|features)/})
|
|
@@ -25,7 +38,7 @@ Gem::Specification.new do |spec|
|
|
|
25
38
|
spec.add_dependency 'thor', '~> 0.20'
|
|
26
39
|
spec.add_dependency 'highline', '~> 2.0'
|
|
27
40
|
|
|
28
|
-
spec.add_development_dependency 'bundler', '~> 1
|
|
29
|
-
spec.add_development_dependency 'rake', '~>
|
|
41
|
+
spec.add_development_dependency 'bundler', '~> 2.1'
|
|
42
|
+
spec.add_development_dependency 'rake', '~> 13.0.1'
|
|
30
43
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
|
31
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.5.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alexey Chernikov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-10-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thor
|
|
@@ -44,28 +44,28 @@ 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
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
61
|
+
version: 13.0.1
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
68
|
+
version: 13.0.1
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: minitest
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -80,17 +80,20 @@ dependencies:
|
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '5.0'
|
|
83
|
-
description: Collection of console tools, which is useful for everyday work at Techinform
|
|
83
|
+
description: Collection of console tools, which is useful for everyday work at Techinform
|
|
84
|
+
Soft ( https://techinform.dev )
|
|
84
85
|
email:
|
|
85
|
-
- alexey
|
|
86
|
+
- alexey@chernikov.online
|
|
86
87
|
executables:
|
|
87
88
|
- techinform
|
|
88
89
|
- ti
|
|
89
90
|
extensions: []
|
|
90
91
|
extra_rdoc_files: []
|
|
91
92
|
files:
|
|
93
|
+
- ".github/workflows/gempush.yml"
|
|
92
94
|
- ".gitignore"
|
|
93
95
|
- ".ruby-version"
|
|
96
|
+
- CHANGELOG.md
|
|
94
97
|
- CODE_OF_CONDUCT.md
|
|
95
98
|
- Gemfile
|
|
96
99
|
- README.md
|
|
@@ -106,6 +109,7 @@ files:
|
|
|
106
109
|
- lib/backup/files_backup.rb
|
|
107
110
|
- lib/backup/mysql_backup.rb
|
|
108
111
|
- lib/backup/postgre_backup.rb
|
|
112
|
+
- lib/bzip2_selector.rb
|
|
109
113
|
- lib/techinform.rb
|
|
110
114
|
- lib/techinform/backup.rb
|
|
111
115
|
- lib/techinform/defaults.rb
|
|
@@ -113,10 +117,13 @@ files:
|
|
|
113
117
|
- lib/techinform/sync/rails_exclude_files
|
|
114
118
|
- lib/techinform/version.rb
|
|
115
119
|
- techinform.gemspec
|
|
116
|
-
homepage: https://techinform.
|
|
120
|
+
homepage: https://techinform.dev
|
|
117
121
|
licenses:
|
|
118
122
|
- MIT
|
|
119
|
-
metadata:
|
|
123
|
+
metadata:
|
|
124
|
+
homepage_uri: https://techinform.dev
|
|
125
|
+
source_code_uri: https://github.com/alexey-chernikov/techinform
|
|
126
|
+
changelog_uri: https://github.com/alexey-chernikov/techinform/CHANGELOG.md
|
|
120
127
|
post_install_message:
|
|
121
128
|
rdoc_options: []
|
|
122
129
|
require_paths:
|
|
@@ -132,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
132
139
|
- !ruby/object:Gem::Version
|
|
133
140
|
version: '0'
|
|
134
141
|
requirements: []
|
|
135
|
-
rubygems_version: 3.
|
|
142
|
+
rubygems_version: 3.1.2
|
|
136
143
|
signing_key:
|
|
137
144
|
specification_version: 4
|
|
138
145
|
summary: Console tools, useful at Techinform
|