redmine-installer 2.3.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 562050e0ea7eb2b7d4539fd4e19ee1691de18e861a07ce25e052ef98eee70f1f
4
- data.tar.gz: e5932bf820f693d20ed1987434b63d9d85a7d32b4e7ded16d03d880e0ef46b87
3
+ metadata.gz: 99303f819bcacb4a242b3a5020028845867655202a15cb3299b3253a9efdbcd0
4
+ data.tar.gz: 4cc1c31ec92f8bdb812af49b1d47744fc079ca91252f7acfa4c3dd35a2b61471
5
5
  SHA512:
6
- metadata.gz: b6064513f5c53b327985ac76fa23fc764fe2fdde289c6cc4cfd8355947d48085d1c6a029ec800b164581c4f022e9e0daf6985da31846c0c28006c114ebdec0ad
7
- data.tar.gz: 28fec9b468aeb51ac9ab52ee237f2e25e63a9c9f70dd1ef5ca77f15a4adf118c773a8d0e3115db905d175b1ff386f8527dc654146229ec046674b40877feb13a
6
+ metadata.gz: '09961ded47146661478d1263192c2c3ff0d72f1bfbdbb320ac4b3b77a6c41e63b586cf750faa2be4b38774f339c1691dc1ca7e902a91ba73770aed6cfe012102'
7
+ data.tar.gz: dee77d5369431c9df0d0425ba078e266cc5826c8ed101ca36711c05ae09c333088fe621acf48043bbf0e4bd93504966e2b2d17e9ac30c5b706b17709ea34b413
data/.dockerignore ADDED
@@ -0,0 +1,8 @@
1
+ /.idea
2
+ /vendor
3
+ /.bundle
4
+ /tmp
5
+ /log.log
6
+ /redmine-installer-err
7
+ /redmine-installer-out
8
+ /redmine
data/.gitignore CHANGED
@@ -1,11 +1,11 @@
1
1
  /.gemtags
2
2
  /.tags
3
+ /.idea
3
4
  *.gem
4
5
  *.rbc
5
6
  .bundle
6
7
  .config
7
8
  .yardoc
8
- Gemfile.lock
9
9
  InstalledFiles
10
10
  _yardoc
11
11
  coverage
@@ -27,4 +27,4 @@ test/*
27
27
  /redmine-installer-err
28
28
  /redmine-installer-out
29
29
  /redmine
30
- /gems.locked
30
+ /vendor/*
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+
4
+ ## [3.0.0] - 2022-12-13
5
+ ### Added
6
+ - docker-compose for testing [#37](https://github.com/easyredmine/redmine-installer/pull/37)
7
+ - .github workflow for CI
8
+ - `env_check` for test server environment
9
+ ### Fixed
10
+ - ruby 3.x support [#35](https://github.com/easyredmine/redmine-installer/pull/35)
11
+ - Psych aliases while parsing `database.yml`
12
+ ### Changed
13
+ - required ruby version = 3.1.2 [#36](https://github.com/easyredmine/redmine-installer/pull/36)
14
+ - required redmine version = 5.0.4+ [#36](https://github.com/easyredmine/redmine-installer/pull/36)
15
+
16
+ ## [2.4.0] - 2022-09-07
17
+ ### Added
18
+ - allow the administrator to manually empty the root directory [#33](https://github.com/easyredmine/redmine-installer/pull/33)
19
+
3
20
  ## [2.3.0.beta] - 2019-06-10
4
21
 
5
22
  ### Added
data/Dockerfile ADDED
@@ -0,0 +1,13 @@
1
+ FROM ruby:3.1.2-bullseye
2
+ LABEL org.opencontainers.image.authors="support@easysoftware.com"
3
+ RUN apt-get update && apt-get -y install lsb-release wget curl vim
4
+ RUN wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb -O percona-release_latest_all.deb &&\
5
+ dpkg -i percona-release_latest_all.deb &&\
6
+ percona-release setup ps80 &&\
7
+ apt-get update && apt-get install -y libperconaserverclient21-dev percona-server-client
8
+ WORKDIR /gem
9
+ VOLUME ["/gem/vendor/"]
10
+ COPY . ./
11
+ RUN bundle config set deployment 'true'
12
+ RUN bundle install
13
+ CMD ["bundle", "exec", "rspec"]
data/README.md CHANGED
@@ -1,48 +1,46 @@
1
1
  # Redmine installer
2
2
 
3
- Easy way hot to install/upgrade Redmine, EasyRedmine or EasyProject.
3
+ Easy way hot to install/upgrade Redmine, Easy Redmine or Easy Project.
4
4
 
5
5
  Please do not run installer on background. It may happen that process will be paused by some event. For example database may require enter password during backuping database.
6
6
 
7
- ## Installation
8
-
9
- Add this line to your application's Gemfile:
10
-
11
- ```
12
- gem 'redmine-installer'
13
- ```
7
+ > ⚠️ Current version support only **ruby 3.1.2**, **Percona 8** as DB server and **redmine 5.0.3+**
14
8
 
15
- And then execute:
9
+ Version **v3.x** is designed primarily for work with Easy Redmine / Easy Project **v12.x**.
16
10
 
17
- ```
18
- $ bundle
19
- ```
20
-
21
- Or install it yourself as:
11
+ ## Installation
22
12
 
23
- ```
24
- $ gem install redmine-installer
13
+ Install tool into your server environment by:
14
+ ```bash
15
+ gem install redmine-installer
25
16
  ```
26
17
 
18
+ > ⚠️ Version `v3.0.0` and higher require ruby 3.1.2 and its designed for Easy Redmine / Easy Project v12 and Redmine 5.0.3+ respectively.
27
19
  ## Examples
28
20
 
29
21
  To display global documentation for installer.
30
22
 
31
- ```
23
+ ```bash
32
24
  redmine help
33
25
  ```
34
26
 
35
27
  You can also check more detailed documentation for each command.
36
28
 
37
- ```
29
+ ```bash
38
30
  redmine help [COMMAND]
39
31
  ```
40
32
 
33
+ ### Environment checker
34
+ Check your server environment if it meets our requirements for best Easy Redmine experience.
35
+ ```bash
36
+ redmine env_check
37
+ ```
38
+
41
39
  ### Installing
42
40
 
43
41
  Create new project on empty directory. All argument are optional. Directory should be empty because installer delete all content for ensuring correct installation. If directory does not exist, current user must have privileges to create it.
44
42
 
45
- ```
43
+ ```bash
46
44
  redmine help install
47
45
  redmine install [PACKAGE PATH or URL] [REDMINE_ROOT] [options]
48
46
  ```
@@ -129,3 +127,13 @@ Examples:
129
127
 
130
128
  Restore database db.dump for redmine in /srv/redmine
131
129
  - `redmine restore-db db.dump /srv/redmine`
130
+
131
+ ## Testing
132
+
133
+ Just run:
134
+ ```bash
135
+ docker compose up --build --exit-code-from redmine_installer
136
+ ```
137
+ This will build docker image from current code and run tests against _percona8_.
138
+
139
+ note: Require Docker of course.
data/gems.locked ADDED
@@ -0,0 +1,76 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ redmine-installer (3.0.0)
5
+ bundler (>= 2.3.7)
6
+ commander
7
+ pastel (~> 0.8.0)
8
+ rubyzip
9
+ tty-progressbar (~> 0.18.2)
10
+ tty-prompt (~> 0.23.1)
11
+ tty-spinner (~> 0.8.0)
12
+
13
+ GEM
14
+ remote: https://rubygems.org/
15
+ specs:
16
+ childprocess (4.1.0)
17
+ coderay (1.1.3)
18
+ commander (4.6.0)
19
+ highline (~> 2.0.0)
20
+ diff-lcs (1.5.0)
21
+ highline (2.0.3)
22
+ method_source (1.0.0)
23
+ pastel (0.8.0)
24
+ tty-color (~> 0.5)
25
+ pry (0.14.1)
26
+ coderay (~> 1.1)
27
+ method_source (~> 1.0)
28
+ rake (13.0.6)
29
+ rspec (3.11.0)
30
+ rspec-core (~> 3.11.0)
31
+ rspec-expectations (~> 3.11.0)
32
+ rspec-mocks (~> 3.11.0)
33
+ rspec-core (3.11.0)
34
+ rspec-support (~> 3.11.0)
35
+ rspec-expectations (3.11.1)
36
+ diff-lcs (>= 1.2.0, < 2.0)
37
+ rspec-support (~> 3.11.0)
38
+ rspec-mocks (3.11.2)
39
+ diff-lcs (>= 1.2.0, < 2.0)
40
+ rspec-support (~> 3.11.0)
41
+ rspec-support (3.11.1)
42
+ rubyzip (2.3.2)
43
+ strings-ansi (0.2.0)
44
+ tty-color (0.6.0)
45
+ tty-cursor (0.7.1)
46
+ tty-progressbar (0.18.2)
47
+ strings-ansi (~> 0.2)
48
+ tty-cursor (~> 0.7)
49
+ tty-screen (~> 0.8)
50
+ unicode-display_width (>= 1.6, < 3.0)
51
+ tty-prompt (0.23.1)
52
+ pastel (~> 0.8)
53
+ tty-reader (~> 0.8)
54
+ tty-reader (0.9.0)
55
+ tty-cursor (~> 0.7)
56
+ tty-screen (~> 0.8)
57
+ wisper (~> 2.0)
58
+ tty-screen (0.8.1)
59
+ tty-spinner (0.8.0)
60
+ tty-cursor (>= 0.5.0)
61
+ unicode-display_width (2.3.0)
62
+ wisper (2.0.1)
63
+
64
+ PLATFORMS
65
+ x86_64-darwin-21
66
+ x86_64-linux
67
+
68
+ DEPENDENCIES
69
+ childprocess (~> 4.1.0)
70
+ pry
71
+ rake
72
+ redmine-installer!
73
+ rspec (~> 3.11.0)
74
+
75
+ BUNDLED WITH
76
+ 2.3.22
data/gems.rb CHANGED
@@ -10,3 +10,4 @@ gemspec
10
10
  # gem 'childprocess'
11
11
  # end
12
12
  # end
13
+ gem "pry", group: [:development, :test]
@@ -17,7 +17,7 @@ module RedmineInstaller
17
17
  program :version, RedmineInstaller::VERSION
18
18
  program :description, 'Easy way how install/upgrade redmine or plugin.'
19
19
 
20
- global_option('-d', '--debug', 'Logging message to stdout'){ $DEBUG = true }
20
+ global_option('-d', '--debug', 'Logging message to stdout') { $DEBUG = true }
21
21
  global_option('-s', '--silent', 'Be less version in output') { $SILENT_MODE = true }
22
22
  global_option('-e', '--env', 'For backward compatibility. Production is now always use.')
23
23
  global_option('--run-easycheck', 'Run easycheck.sh from https://github.com/easyredmine/easy_server_requirements_check') do
@@ -26,6 +26,27 @@ module RedmineInstaller
26
26
 
27
27
  default_command :help
28
28
 
29
+ # --- Environment checker -----------------------------------------------
30
+ # This command is very specify to Easy Redmine
31
+ command :env_check do |c|
32
+ c.syntax = 'env_check'
33
+ c.description = <<~DESC
34
+ Check current environment if it meet requirements for Easy Redmine / Easy Project.
35
+
36
+ See: https://www.easyredmine.com/documentation-of-easy-redmine/article/hardware-and-software-requirements-for-the-server-solution
37
+ DESC
38
+ c.action do |_args|
39
+ task = RedmineInstaller::Task.new
40
+ RedmineInstaller::Environment.new(task).check
41
+ puts task.pastel.green "OK"
42
+ rescue StandardError => e
43
+ puts task.pastel.red e.message
44
+
45
+ puts "\n\nCheck: https://www.easyredmine.com/documentation-of-easy-redmine/article/hardware-and-software-requirements-for-the-server-solution#Software%20requirements for more info."
46
+ end
47
+ end
48
+
49
+ alias_command :check, :env_check
29
50
 
30
51
  # --- Install -----------------------------------------------------------
31
52
  command :install do |c|
@@ -48,12 +69,11 @@ module RedmineInstaller
48
69
  c.action do |args, options|
49
70
  options.default(enable_user_root: false)
50
71
 
51
- RedmineInstaller::Install.new(args[0], args[1], options.__hash__).run
72
+ RedmineInstaller::Install.new(args[0], args[1], **options.__hash__).run
52
73
  end
53
74
  end
54
75
  alias_command :i, :install
55
76
 
56
-
57
77
  # --- Upgrade -----------------------------------------------------------
58
78
  command :upgrade do |c|
59
79
  c.syntax = 'upgrade [PACKAGE] [REDMINE_ROOT] [options]'
@@ -77,12 +97,11 @@ module RedmineInstaller
77
97
  c.action do |args, options|
78
98
  options.default(enable_user_root: false, copy_files_with_symlink: false)
79
99
 
80
- RedmineInstaller::Upgrade.new(args[0], args[1], options.__hash__).run
100
+ RedmineInstaller::Upgrade.new(args[0], args[1], **options.__hash__).run
81
101
  end
82
102
  end
83
103
  alias_command :u, :upgrade
84
104
 
85
-
86
105
  # --- Verify log --------------------------------------------------------
87
106
  command :'verify-log' do |c|
88
107
  c.syntax = 'verify-log LOGFILE'
@@ -96,7 +115,6 @@ module RedmineInstaller
96
115
  end
97
116
  end
98
117
 
99
-
100
118
  # --- Backup ------------------------------------------------------------
101
119
  command :backup do |c|
102
120
  c.syntax = 'backup [REDMINE_ROOT]'
@@ -105,13 +123,16 @@ module RedmineInstaller
105
123
  c.example 'Backup',
106
124
  'redmine backup /srv/redmine'
107
125
 
108
- c.action do |args, _|
126
+ c.option '--enable-user-root', 'Skip root as root validation' # just for consistency
127
+
128
+ c.action do |args, options|
129
+ options.default(enable_user_root: false)
130
+
109
131
  RedmineInstaller::Backup.new(args[0]).run
110
132
  end
111
133
  end
112
134
  alias_command :b, :backup
113
135
 
114
-
115
136
  # --- Restore db --------------------------------------------------------
116
137
  command :'restore-db' do |c|
117
138
  c.syntax = 'restore-db DATABASE_DUMP [REDMINE_ROOT] [options]'
@@ -129,7 +150,6 @@ module RedmineInstaller
129
150
  end
130
151
  end
131
152
 
132
-
133
153
  run!
134
154
  end
135
155
 
@@ -137,7 +157,7 @@ module RedmineInstaller
137
157
  def parse_keep_options(values)
138
158
  proxy_options = Commander::Runner.instance.active_command.proxy_options
139
159
 
140
- saved = proxy_options.find{|switch, _| switch == :keep }
160
+ saved = proxy_options.find { |switch, _| switch == :keep }
141
161
  if saved
142
162
  saved[1].concat(values)
143
163
  else
@@ -13,7 +13,7 @@ module RedmineInstaller
13
13
  end
14
14
 
15
15
  def run
16
- Bundler.with_clean_env do
16
+ Bundler.with_unbundled_env do
17
17
  run!
18
18
  end
19
19
  end
@@ -21,7 +21,7 @@ module RedmineInstaller
21
21
  error "Database configuration files does not exist on #{redmine.root}."
22
22
  end
23
23
 
24
- definitions = YAML.load_file(redmine.database_yml_path)
24
+ definitions = YAML.load_file(redmine.database_yml_path, aliases: true)
25
25
  definition = definitions['production']
26
26
 
27
27
  unless definition.is_a?(Hash)
@@ -60,7 +60,7 @@ module RedmineInstaller
60
60
  @host = prompt.ask('Host:', default: 'localhost', required: true)
61
61
  @username = prompt.ask('Username:', default: '')
62
62
  @password = prompt.mask('Password:', default: '')
63
- @encoding = prompt.ask('Encoding:', default: 'utf8', required: true)
63
+ @encoding = prompt.ask('Encoding:', default: 'utf8mb4', required: true)
64
64
  @port = prompt.ask('Port:', default: default_port, convert: lambda(&:to_i), required: true)
65
65
  end
66
66
 
@@ -7,7 +7,7 @@ module RedmineInstaller
7
7
  EASYCHECK_SH = 'https://raw.githubusercontent.com/easyredmine/easy_server_requirements_check/master/easycheck.sh'
8
8
 
9
9
  def self.run
10
- Bundler.with_clean_env do
10
+ Bundler.with_unbundled_env do
11
11
  if Kernel.system('which', 'wget')
12
12
  Open3.pipeline(['wget', EASYCHECK_SH, '-O', '-', '--quiet'], 'bash')
13
13
 
@@ -7,15 +7,27 @@ module RedmineInstaller
7
7
  end
8
8
 
9
9
  if Gem::Version.new(RUBY_VERSION) < Gem::Version.new(RedmineInstaller::MIN_SUPPORTED_RUBY)
10
- error "You are using unsupported ruby. Please install at least #{RedmineInstaller::MIN_SUPPORTED_RUBY}."
10
+ error "You are using unsupported ruby. Please install ruby v#{RedmineInstaller::MIN_SUPPORTED_RUBY}."
11
11
  end
12
12
 
13
- logger.info 'Environemnt checked'
13
+ if mysql_version =~ /^mysql\s+Ver\s(8\.\d)/
14
+ puts pastel.on_red 'WARNING: It seems you are using MySQL 8.x, but ER / EP supported only Percona 8 db.'
15
+ else
16
+ error 'Only Percona 8.x db server is supported!.'
17
+ end
18
+
19
+ logger.info 'Environment checked'
14
20
  end
15
21
 
16
22
  def user_is_root?
17
23
  Process.euid == 0
18
24
  end
19
25
 
26
+ def mysql_version
27
+ `mysql --version`
28
+ rescue StandardError
29
+ ""
30
+ end
31
+
20
32
  end
21
33
  end
@@ -86,23 +86,23 @@ module RedmineInstaller
86
86
 
87
87
  def valid_url?(string)
88
88
  uri = URI.parse(string)
89
- ['http', 'https'].include?(uri.scheme)
89
+ %w[http https].include?(uri.scheme)
90
90
  rescue URI::BadURIError, URI::InvalidURIError
91
91
  false
92
92
  end
93
93
 
94
94
  def download_redmine_version(version)
95
- url = "http://www.redmine.org/releases/redmine-#{version}.zip"
95
+ url = "https://www.redmine.org/releases/redmine-#{version}.zip"
96
96
  download_from_url(url)
97
97
  end
98
98
 
99
99
  def download_from_url(url)
100
100
  uri = URI.parse(url)
101
101
 
102
- @temp_file = Tempfile.new(['redmine', '.zip'])
102
+ @temp_file = Tempfile.new(%w[redmine .zip])
103
103
  @temp_file.binmode
104
104
 
105
- Net::HTTP.start(uri.host, uri.port) do |http|
105
+ Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
106
106
  head = http.request_head(uri)
107
107
 
108
108
  unless head.is_a?(Net::HTTPSuccess)
@@ -66,7 +66,7 @@ module RedmineInstaller
66
66
  config_file = File.join(@redmine.root, CONFIG_DIR, 'redmine-installer.yaml')
67
67
 
68
68
  if File.exist?(config_file)
69
- YAML.load_file(config_file)
69
+ YAML.load_file(config_file, aliases: true)
70
70
  else
71
71
  {}
72
72
  end
@@ -6,7 +6,7 @@ module RedmineInstaller
6
6
  PROFILES_FILE = File.join(Dir.home, '.redmine-installer-profiles.yml')
7
7
 
8
8
  def self.get!(profile_id)
9
- data = YAML.load_file(PROFILES_FILE) rescue nil
9
+ data = YAML.load_file(PROFILES_FILE, aliases: true) rescue nil
10
10
 
11
11
  if data.is_a?(Hash) && data.has_key?(profile_id)
12
12
  Profile.new(profile_id, data[profile_id])
@@ -25,7 +25,7 @@ module RedmineInstaller
25
25
  def save
26
26
  FileUtils.touch(PROFILES_FILE)
27
27
 
28
- all_data = YAML.load_file(PROFILES_FILE)
28
+ all_data = YAML.load_file(PROFILES_FILE, aliases: true)
29
29
  all_data = {} unless all_data.is_a?(Hash)
30
30
 
31
31
  @id ||= all_data.keys.last.to_i + 1
@@ -1,4 +1,5 @@
1
1
  require 'find'
2
+ require 'io/console'
2
3
 
3
4
  module RedmineInstaller
4
5
  class Redmine < TaskModule
@@ -279,7 +280,17 @@ module RedmineInstaller
279
280
  next if entry == '.' || entry == '..'
280
281
  next if entry == FILES_DIR && task.options.copy_files_with_symlink
281
282
 
282
- FileUtils.remove_entry_secure(entry)
283
+ begin
284
+ FileUtils.remove_entry_secure(entry)
285
+ rescue
286
+ if task.options.copy_files_with_symlink
287
+ print_title('Cannot automatically empty ' + root + '. Please manually empty this directory (except for ' + root + '/' + FILES_DIR + ') and then hit any key to continue...')
288
+ else
289
+ print_title('Cannot automatically empty ' + root + '. Please manually empty this directory and then hit any key to continue...')
290
+ end
291
+ STDIN.getch
292
+ break
293
+ end
283
294
  end
284
295
  end
285
296
 
@@ -294,7 +305,7 @@ module RedmineInstaller
294
305
  bundle_index = File.join(Dir.pwd, '.bundle/plugin/index')
295
306
 
296
307
  if File.exist?(bundle_index)
297
- index = YAML.load_file(bundle_index)
308
+ index = YAML.load_file(bundle_index, aliases: true)
298
309
 
299
310
  # { load_paths: { PLUGIN_NAME: *PATHS } }
300
311
  #
@@ -1,3 +1,5 @@
1
1
  module RedmineInstaller
2
- VERSION = '2.3.2'
2
+
3
+ VERSION = '3.0.0'
4
+
3
5
  end
@@ -32,7 +32,7 @@ module RedmineInstaller
32
32
  autoload :Easycheck, 'redmine-installer/easycheck'
33
33
 
34
34
  # Settings
35
- MIN_SUPPORTED_RUBY = '2.3.0'
35
+ MIN_SUPPORTED_RUBY = '3.1.2'
36
36
 
37
37
  def self.logger
38
38
  @logger ||= RedmineInstaller::Logger.new
@@ -1,37 +1,35 @@
1
- # coding: utf-8
2
-
3
1
  lib = File.expand_path('lib', __dir__)
4
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
3
 
6
4
  require 'redmine-installer/version'
7
5
 
8
6
  Gem::Specification.new do |spec|
9
- spec.name = 'redmine-installer'
10
- spec.version = RedmineInstaller::VERSION
11
- spec.authors = ['Ondřej Moravčík']
12
- spec.email = ['moravcik.ondrej@gmail.com']
13
- spec.summary = %q{Easy way how install/upgrade Redmine, EasyRedmine or EasyProject.}
14
- spec.description = %q{}
15
- spec.homepage = 'https://github.com/easyredmine/redmine-installer'
16
- spec.license = 'MIT'
17
-
18
- files = `git ls-files -z`.split("\x0")
19
- files.delete_if {|f| f.start_with?('spec/packages/') }
20
-
21
- spec.files = files
22
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
23
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
7
+ spec.name = 'redmine-installer'
8
+ spec.version = RedmineInstaller::VERSION
9
+ spec.authors = ['Ondřej Moravčík', 'Easy Software Ltd.']
10
+ spec.email = ['developers@easysoftware.com']
11
+ spec.summary = %q{Easy way how install/upgrade Redmine, EasyRedmine or EasyProject.}
12
+ spec.description = %q{}
13
+ spec.homepage = 'https://github.com/easyredmine/redmine-installer'
14
+ spec.license = 'MIT'
15
+
16
+ files = `git ls-files -z`.split("\x0") - Dir.glob("{spec/**/*,docker-compose.yml,.github/**/*}")
17
+ spec.files = files
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
24
20
  spec.require_paths = ['lib']
25
21
 
26
- spec.required_ruby_version = '>= 2.3.0'
22
+ spec.required_ruby_version = '3.1.2'
27
23
 
24
+ spec.add_runtime_dependency 'bundler', '>= 2.3.7'
28
25
  spec.add_runtime_dependency 'commander'
26
+ spec.add_runtime_dependency 'pastel', '~> 0.8.0'
29
27
  spec.add_runtime_dependency 'rubyzip'
30
- spec.add_runtime_dependency 'bundler', '>= 1.16'
31
- spec.add_runtime_dependency 'pastel', '~> 0.7.2'
32
- spec.add_runtime_dependency 'tty-prompt', '~> 0.16.1'
28
+ spec.add_runtime_dependency 'tty-progressbar', '~> 0.18.2'
29
+ spec.add_runtime_dependency 'tty-prompt', '~> 0.23.1'
33
30
  spec.add_runtime_dependency 'tty-spinner', '~> 0.8.0'
34
- spec.add_runtime_dependency 'tty-progressbar', '~> 0.15.0'
35
31
 
32
+ spec.add_development_dependency 'childprocess', '~> 4.1.0'
36
33
  spec.add_development_dependency 'rake'
34
+ spec.add_development_dependency 'rspec', '~> 3.11.0'
37
35
  end