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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e5b728058ba7c64a9ac091655bafc898325e5b06b633cf487c1b6208ba3097ad
4
- data.tar.gz: f078deb4745f630e0626e52752a895964192190d2568f1f713adcfc972c93ba1
3
+ metadata.gz: 183e41f8f63575678f62a93a9272e12ffe466065f5fcac85f83294dff4af6aba
4
+ data.tar.gz: 4565a5f143d018ca3990e7718044d816ee292d98c2b3876a89edf7d63e3c8267
5
5
  SHA512:
6
- metadata.gz: 84bafca7ae63e7f6e759392d6ca8cf813fc369e6f67e4a049970f288bb8fab6e429e0043011f37b6bca06dafa24dd5c6c6c9c1e9ae05d870f704958333d569ab
7
- data.tar.gz: c9e0b94c31084b37d934ede00297fe642bf79171af0bb0b5e6202fd56a9dc7a3e8c5dbb4aed419494d54b6b9eaba094a1ba4d2d52549be87f16a2809bee7079c
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}}
@@ -1 +1 @@
1
- 2.5.5
1
+ 2.7.1
@@ -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
- USER=root # User for database access
31
+ DBUSER=root # User for database access
32
32
  PASSWORD=password # Password for database access
33
33
 
34
34
  ## Usage
@@ -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, 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
- `gpg2 --decrypt #{filename} | pv --wait | bzip2 > #{File.basename(filename, '.*')}`
22
+ puts "Decrypting postgres backup of #{filename}..."
23
+ `pv --wait #{filename} | gpg2 --decrypt | #{bzip2} > #{File.basename(filename, '.*') + '.bz2'}`
21
24
  elsif encrypted
22
- `gpg2 --decrypt #{filename} | pv --wait | psql #{dbname} > /dev/null`
25
+ puts "Restoring postgres backup to database #{dbname}..."
26
+ `pv --wait #{filename} | gpg2 --decrypt | psql #{dbname} > /dev/null`
23
27
  else
24
- `tar -xOf #{filename} | bunzip2 | pv | psql #{dbname} > /dev/null`
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
- `gpg2 --decrypt #{filename} | pv --wait | bzip2 > #{File.basename(filename, '.*')}`
32
+ puts "Decrypting mysql backup of #{filename}..."
33
+ `pv --wait #{filename} | gpg2 --decrypt | #{bzip2} > #{File.basename(filename, '.*') + '.bz2'}`
30
34
  elsif encrypted
31
- `gpg2 --decrypt #{filename} | pv --wait | mysql #{"-u#{ENV['USER']}" if !ENV['USER'].nil?} #{"-p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
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
- `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}`
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
 
@@ -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
@@ -2,4 +2,5 @@ db/sphinx
2
2
  tmp/
3
3
  shared/bundle
4
4
  shared/log
5
- deploy/*/repo
5
+ deploy/*/repo
6
+ releases/
@@ -1,3 +1,3 @@
1
1
  module Techinform
2
- VERSION = "1.4.8"
2
+ VERSION = "1.6.1"
3
3
  end
@@ -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/techinform-dev/techinform"
23
- spec.metadata["changelog_uri"] = "https://github.com/techinform-dev/techinform/CHANGELOG.md"
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.15'
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.8
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-04-27 00:00:00.000000000 Z
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.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
@@ -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/techinform-dev/techinform
124
- changelog_uri: https://github.com/techinform-dev/techinform/CHANGELOG.md
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.0.8
142
+ rubygems_version: 3.1.4
141
143
  signing_key:
142
144
  specification_version: 4
143
145
  summary: Console tools, useful at Techinform