techinform 1.4.5 → 1.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a6eed700c5d31d287760c0358c2fcdfdc92d80e7f5dad1ca5728834a3ec4dbd0
4
- data.tar.gz: 03be94dcec928086b0f34a1526966d3298f773bd537f035051c1d1302bedc541
3
+ metadata.gz: 377409d470d19efcfd9028db6bdefa2071403ac78f60e2b56f67550520eb305c
4
+ data.tar.gz: 30a08875950a5c865e51bc72d9c6decc346374caf6f94253147ec50e9d640e66
5
5
  SHA512:
6
- metadata.gz: d03b823421b4538dd8708a09dd164b4a1bb70b52ee88889982215ee6e50c9553c01b11baf55a11bd90c7aa984eb92d70c2df44d01b4062a3b251d3faf79f37ae
7
- data.tar.gz: ddfc1b8a43ac36068227966da42be4ca44d4439aa0bf51d50d701730a9263a2fc7741db898b65911d2d844706a6b29154182157ffb2ddb0db9e7d52740af10b7
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}}
@@ -1 +1 @@
1
- 2.5.5
1
+ 2.7.1
@@ -0,0 +1,9 @@
1
+
2
+ ### 1.5.1
3
+
4
+ - Use parallel version of bzip2 - lbzip2 - if installed
5
+ - Use DBUSER environment variable as database user insted of USER
6
+
7
+ ### 1.5.0
8
+
9
+ Change progress display - now correctly shows percents
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
@@ -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
 
@@ -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['USER'] if user.nil?
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?
@@ -0,0 +1,7 @@
1
+ def bzip2
2
+ @bzip2 ||= (system('which lbzip2 > /dev/null') ? 'lbzip2' : 'bzip2')
3
+ end
4
+
5
+ def bunzip2
6
+ @bunzip2 ||= (system('which lbunzip2 > /dev/null') ? 'lbunzip2' : 'bunzip2')
7
+ end
@@ -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
- puts "Restoring postgres backup to database #{dbname}..."
19
- if encrypted
20
- `gpg2 --decrypt #{filename} | pv --wait | psql #{dbname} > /dev/null`
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
- `tar -xOf #{filename} | bunzip2 | pv | psql #{dbname} > /dev/null`
28
+ `pv --wait #{filename} | #{bunzip2} | psql #{dbname} > /dev/null`
23
29
  end
24
30
  else
25
- puts "Restoring mysql backup to database #{dbname}..."
26
- if encrypted
27
- `gpg2 --decrypt #{filename} | pv --wait | mysql #{"-u#{ENV['USER']}" if !ENV['USER'].nil?} #{"-p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
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
- `tar -xOf #{filename} | bunzip2 | pv | mysql #{"-u#{ENV['USER']}" if !ENV['USER'].nil?} #{"-p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
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`
@@ -1,3 +1,3 @@
1
1
  module Techinform
2
- VERSION = "1.4.5"
2
+ VERSION = "1.5.1"
3
3
  end
@@ -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.chernikov@gmail.com']
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.pro'
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.15'
29
- spec.add_development_dependency 'rake', '~> 10.0'
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.5
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: 2019-06-23 00:00:00.000000000 Z
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.15'
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.15'
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: '10.0'
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: '10.0'
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.chernikov@gmail.com
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.pro
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.0.3
143
+ rubygems_version: 3.1.2
136
144
  signing_key:
137
145
  specification_version: 4
138
146
  summary: Console tools, useful at Techinform