techinform 1.4.5 → 1.5.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 +9 -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 +24 -9
- data/lib/techinform/version.rb +1 -1
- data/techinform.gemspec +18 -5
- metadata +19 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 377409d470d19efcfd9028db6bdefa2071403ac78f60e2b56f67550520eb305c
|
4
|
+
data.tar.gz: 30a08875950a5c865e51bc72d9c6decc346374caf6f94253147ec50e9d640e66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73a5ca1881758fee223838342fc950b73a4c328b81ff504d273f4d240ec823cb071f5d412589c0542f99b2241704745a0c3ef9c9cca9d4420073a388153d5254
|
7
|
+
data.tar.gz: 4f0253a7eaf1d62c88d3bbee508eb3a98f226931545fed400026b0be7968574db8d470b709117eb8525866f89f26955482707cb574f2a9cc508929df8cdb2e23
|
@@ -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
|
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)
|
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,22 +18,34 @@ module Techinform
|
|
15
18
|
end
|
16
19
|
encrypted = filename.split('.').last == 'gpg'
|
17
20
|
if type == 'pg'
|
18
|
-
|
19
|
-
|
20
|
-
`
|
21
|
+
if encrypted && just_decrypt
|
22
|
+
puts "Decrypting postgres backup of #{filename}..."
|
23
|
+
`pv --wait #{filename} | gpg2 --decrypt | #{bzip2} > #{File.basename(filename, '.*') + '.bz2'}`
|
24
|
+
elsif encrypted
|
25
|
+
puts "Restoring postgres backup to database #{dbname}..."
|
26
|
+
`pv --wait #{filename} | gpg2 --decrypt | psql #{dbname} > /dev/null`
|
21
27
|
else
|
22
|
-
`
|
28
|
+
`pv --wait #{filename} | #{bunzip2} | psql #{dbname} > /dev/null`
|
23
29
|
end
|
24
30
|
else
|
25
|
-
|
26
|
-
|
27
|
-
`
|
31
|
+
if encrypted && just_decrypt
|
32
|
+
puts "Decrypting mysql backup of #{filename}..."
|
33
|
+
`pv --wait #{filename} | gpg2 --decrypt | #{bzip2} > #{File.basename(filename, '.*') + '.bz2'}`
|
34
|
+
elsif encrypted
|
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}`
|
28
37
|
else
|
29
|
-
`
|
38
|
+
`pv --wait #{filename} | #{bunzip2} | mysql#{" -u#{ENV['DBUSER']}" if !ENV['DBUSER'].nil?}#{" -p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
|
30
39
|
end
|
31
40
|
end
|
32
41
|
end
|
33
42
|
|
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'
|
44
|
+
def decrypt(type, filename)
|
45
|
+
puts "lbzip2 is not found. Single-threaded bzip2 will be used. Consider installing lbzip2" if bzip2 == 'bzip2'
|
46
|
+
restore(type, filename, nil, true)
|
47
|
+
end
|
48
|
+
|
34
49
|
desc 'deploy [project]', 'Deploy specific project'
|
35
50
|
def deploy(project)
|
36
51
|
`cd ~/projects/#{project} && git pull origin master && bundle install && cap production deploy`
|
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.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:
|
11
|
+
date: 2020-09-24 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,14 @@ 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
|
+
allowed_push_host: https://rubygems.org
|
125
|
+
homepage_uri: https://techinform.dev
|
126
|
+
source_code_uri: https://github.com/alexey-chernikov/techinform
|
127
|
+
changelog_uri: https://github.com/alexey-chernikov/techinform/CHANGELOG.md
|
120
128
|
post_install_message:
|
121
129
|
rdoc_options: []
|
122
130
|
require_paths:
|
@@ -132,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
140
|
- !ruby/object:Gem::Version
|
133
141
|
version: '0'
|
134
142
|
requirements: []
|
135
|
-
rubygems_version: 3.
|
143
|
+
rubygems_version: 3.1.2
|
136
144
|
signing_key:
|
137
145
|
specification_version: 4
|
138
146
|
summary: Console tools, useful at Techinform
|