redmine-installer 2.2.7 → 2.3.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +23 -0
- data/bin/redmine +5 -0
- data/{Gemfile → gems.rb} +5 -3
- data/lib/redmine-installer/cli.rb +4 -1
- data/lib/redmine-installer/command.rb +6 -0
- data/lib/redmine-installer/easycheck.rb +27 -0
- data/lib/redmine-installer/install.rb +2 -0
- data/lib/redmine-installer/redmine.rb +35 -18
- data/lib/redmine-installer/upgrade.rb +1 -0
- data/lib/redmine-installer/version.rb +1 -1
- data/lib/redmine-installer.rb +2 -1
- data/redmine-installer.gemspec +2 -2
- data/spec/installer_process.rb +4 -1
- data/spec/lib/install_spec.rb +2 -14
- data/spec/lib/upgrade_spec.rb +51 -0
- data/spec/spec_helper.rb +5 -0
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d94674fa60f2209607eb93d0d61fa089720de8bef92776d795d27692d4b54a2f
|
4
|
+
data.tar.gz: f8ab75a7abee89a142261a5d2ffe32b3ff28df1bf620012062a8da5cede7f033
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1413b109d141ec1a6be72921c2b0172a42685a7b82a33b75b85be6c2409a3a515c48940cc74ba697005d44cfa426a8588f2b1a23c00ed2a4585bead56b4995dc
|
7
|
+
data.tar.gz: 379b682c95ae9f978a34d7ea516e2f97cb356d6b6c28a2e6a5b4c521ba2b26f61e71d1fcc5a62a2765cb36530804d9639ccc9d4dc636598e0f7978710188062e
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## [2.3.0.beta] - 2019-06-10
|
4
|
+
|
5
|
+
### Added
|
6
|
+
- Gems are required via Bundler
|
7
|
+
- Easycheck for server requirenments
|
8
|
+
- Validation for the package for upgrading
|
9
|
+
|
10
|
+
### Changed
|
11
|
+
- Gemfile was renamed to gems.rb
|
12
|
+
- Installer is now asking if user wants to copy missing plugins
|
13
|
+
- Tests aren't using system redmine-installer
|
14
|
+
|
15
|
+
### Deprecated
|
16
|
+
- Ruby <= 2.3
|
17
|
+
|
18
|
+
### Removed
|
19
|
+
|
20
|
+
### Fixed
|
21
|
+
|
22
|
+
### Security
|
23
|
+
|
data/bin/redmine
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../gems.rb', __dir__)
|
4
|
+
|
5
|
+
require 'bundler'
|
6
|
+
Bundler.require(:default)
|
7
|
+
|
3
8
|
lib = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
4
9
|
$LOAD_PATH.unshift(lib) if !$LOAD_PATH.include?(lib)
|
5
10
|
|
data/{Gemfile → gems.rb}
RENAMED
@@ -20,7 +20,10 @@ module RedmineInstaller
|
|
20
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
|
-
global_option('--
|
23
|
+
global_option('--run-easycheck', 'Run easycheck.sh from https://github.com/easyredmine/easy_server_requirements_check') do
|
24
|
+
RedmineInstaller::Easycheck.run
|
25
|
+
end
|
26
|
+
|
24
27
|
default_command :help
|
25
28
|
|
26
29
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'open3'
|
2
|
+
|
3
|
+
module RedmineInstaller
|
4
|
+
class Easycheck
|
5
|
+
extend Utils
|
6
|
+
|
7
|
+
EASYCHECK_SH = 'https://raw.githubusercontent.com/easyredmine/easy_server_requirements_check/master/easycheck.sh'
|
8
|
+
|
9
|
+
def self.run
|
10
|
+
if Kernel.system('which', 'wget')
|
11
|
+
Open3.pipeline(['wget', EASYCHECK_SH, '-O', '-', '--quiet'], 'bash')
|
12
|
+
|
13
|
+
elsif Kernel.system('which', 'curl')
|
14
|
+
Open3.pipeline(['curl', EASYCHECK_SH, '--output', '-', '--silent'], 'bash')
|
15
|
+
|
16
|
+
else
|
17
|
+
error 'Neither wget nor curl was found'
|
18
|
+
end
|
19
|
+
|
20
|
+
puts
|
21
|
+
if !prompt.yes?('Continue?')
|
22
|
+
error 'Canceled'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -17,11 +17,13 @@ module RedmineInstaller
|
|
17
17
|
@temp_redmine.valid_options
|
18
18
|
@environment.check
|
19
19
|
@target_redmine.ensure_and_valid_root
|
20
|
+
|
20
21
|
@package.ensure_and_valid_package
|
21
22
|
@package.extract
|
22
23
|
|
23
24
|
@temp_redmine.root = @package.redmine_root
|
24
25
|
@package_config.check_version
|
26
|
+
@temp_redmine.validate
|
25
27
|
|
26
28
|
@temp_redmine.create_database_yml
|
27
29
|
@temp_redmine.create_configuration_yml
|
@@ -395,11 +395,12 @@ module RedmineInstaller
|
|
395
395
|
logger.info('Important files was copyied')
|
396
396
|
end
|
397
397
|
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
398
|
+
def yield_missing_plugins(source_directory, target_directory)
|
399
|
+
if !Dir.exist?(source_directory)
|
400
|
+
return
|
401
|
+
end
|
402
|
+
|
403
|
+
Dir.chdir(source_directory) do
|
403
404
|
Dir.entries('.').each do |plugin|
|
404
405
|
next if plugin == '.' || plugin == '..'
|
405
406
|
|
@@ -408,28 +409,44 @@ module RedmineInstaller
|
|
408
409
|
next
|
409
410
|
end
|
410
411
|
|
411
|
-
to = File.join(
|
412
|
+
to = File.join(target_directory, plugin)
|
412
413
|
|
413
414
|
# Plugins does not exist
|
414
415
|
unless Dir.exist?(to)
|
415
|
-
|
416
|
+
yield File.expand_path(plugin), File.expand_path(to)
|
416
417
|
end
|
417
418
|
end
|
418
419
|
end
|
420
|
+
end
|
419
421
|
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
next if !File.directory?(old_modification_path)
|
422
|
+
# New package may not have all plugins
|
423
|
+
#
|
424
|
+
def copy_missing_plugins_from(other_redmine)
|
425
|
+
missing = []
|
425
426
|
|
426
|
-
|
427
|
+
yield_missing_plugins(other_redmine.plugins_path, plugins_path) do |from, to|
|
428
|
+
missing << [from, to]
|
429
|
+
end
|
430
|
+
|
431
|
+
yield_missing_plugins(other_redmine.easy_plugins_path, easy_plugins_path) do |from, to|
|
432
|
+
missing << [from, to]
|
433
|
+
end
|
427
434
|
|
428
|
-
|
429
|
-
|
435
|
+
missing_plugin_names = missing.map{|(from, to)| File.basename(from) }
|
436
|
+
logger.info("Missing plugins: #{missing_plugin_names.join(', ')}")
|
430
437
|
|
431
|
-
|
432
|
-
|
438
|
+
if missing.empty?
|
439
|
+
return
|
440
|
+
end
|
441
|
+
|
442
|
+
puts
|
443
|
+
if !prompt.yes?("Your application contains plugins that are not present in the package (#{missing_plugin_names.join(', ')}). Would you like to copy them?")
|
444
|
+
return
|
445
|
+
end
|
446
|
+
|
447
|
+
missing.each do |(from, to)|
|
448
|
+
FileUtils.cp_r(from, to)
|
449
|
+
logger.info("Copied #{from} to #{to}")
|
433
450
|
end
|
434
451
|
end
|
435
452
|
|
@@ -438,7 +455,7 @@ module RedmineInstaller
|
|
438
455
|
Dir.chdir(root) do
|
439
456
|
REQUIRED_FILES.each do |path|
|
440
457
|
unless File.exist?(path)
|
441
|
-
error "Redmine #{root} is not valid.
|
458
|
+
error "Redmine #{root} is not valid. Directory '#{path}' is missing."
|
442
459
|
end
|
443
460
|
end
|
444
461
|
end
|
data/lib/redmine-installer.rb
CHANGED
@@ -29,6 +29,7 @@ module RedmineInstaller
|
|
29
29
|
autoload :Backup, 'redmine-installer/backup'
|
30
30
|
autoload :RestoreDB, 'redmine-installer/restore_db'
|
31
31
|
autoload :PackageConfig, 'redmine-installer/package_config'
|
32
|
+
autoload :Easycheck, 'redmine-installer/easycheck'
|
32
33
|
|
33
34
|
# Settings
|
34
35
|
MIN_SUPPORTED_RUBY = '2.3.0'
|
@@ -53,7 +54,7 @@ module RedmineInstaller
|
|
53
54
|
/_/ \\__/\\_,_/_/_/_/_/_//_/\\__/
|
54
55
|
|
55
56
|
|
56
|
-
Powered by
|
57
|
+
Powered by EasySoftware
|
57
58
|
|
58
59
|
PRINT
|
59
60
|
end
|
data/redmine-installer.gemspec
CHANGED
@@ -16,14 +16,14 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.license = 'MIT'
|
17
17
|
|
18
18
|
files = `git ls-files -z`.split("\x0")
|
19
|
-
files.delete_if{|f| f.start_with?('spec/packages/') }
|
19
|
+
files.delete_if {|f| f.start_with?('spec/packages/') }
|
20
20
|
|
21
21
|
spec.files = files
|
22
22
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
23
23
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
24
24
|
spec.require_paths = ['lib']
|
25
25
|
|
26
|
-
spec.required_ruby_version = '>= 2.
|
26
|
+
spec.required_ruby_version = '>= 2.3.0'
|
27
27
|
|
28
28
|
spec.add_runtime_dependency 'commander'
|
29
29
|
spec.add_runtime_dependency 'rubyzip'
|
data/spec/installer_process.rb
CHANGED
@@ -17,8 +17,11 @@ class InstallerProcess
|
|
17
17
|
args << '--bundle-options' << '--without rmagick'
|
18
18
|
end
|
19
19
|
|
20
|
+
redmine_bin_file = File.expand_path('../bin/redmine', __dir__)
|
21
|
+
|
22
|
+
@process = ChildProcess.build(redmine_bin_file, command, *args)
|
20
23
|
# @process = ChildProcess.build('bin/redmine', command, *args)
|
21
|
-
@process = ChildProcess.build('redmine', command, *args)
|
24
|
+
# @process = ChildProcess.build('redmine', command, *args)
|
22
25
|
@process.io.stdout = tempfile_out
|
23
26
|
@process.io.stderr = tempfile_err
|
24
27
|
@process.environment['REDMINE_INSTALLER_SPEC'] = '1'
|
data/spec/lib/install_spec.rb
CHANGED
@@ -82,20 +82,7 @@ RSpec.describe RedmineInstaller::Install, command: 'install' do
|
|
82
82
|
it 'installing something else', args: [package_someting_else] do
|
83
83
|
write(@redmine_root)
|
84
84
|
|
85
|
-
|
86
|
-
|
87
|
-
expected_output('Redmine installing')
|
88
|
-
expected_output_in('--> Bundle install', 50)
|
89
|
-
|
90
|
-
expected_output("Gemfile.lock wasn't created")
|
91
|
-
expected_output('‣ Try again')
|
92
|
-
|
93
|
-
go_down
|
94
|
-
go_down
|
95
|
-
expected_output('‣ Cancel')
|
96
|
-
write('')
|
97
|
-
|
98
|
-
expected_output('Operation canceled by user')
|
85
|
+
expected_output('is not valid')
|
99
86
|
end
|
100
87
|
|
101
88
|
it 'bad database settings', args: [package_v345] do
|
@@ -158,6 +145,7 @@ RSpec.describe RedmineInstaller::Install, command: 'install' do
|
|
158
145
|
expected_successful_installation(
|
159
146
|
after_create: proc {
|
160
147
|
expected_output('Would you like to load default data')
|
148
|
+
|
161
149
|
write('y')
|
162
150
|
expected_output('Database cleaning')
|
163
151
|
expected_output('Database restoring')
|
data/spec/lib/upgrade_spec.rb
CHANGED
@@ -147,4 +147,55 @@ RSpec.describe RedmineInstaller::Upgrade, :install_first, command: 'upgrade' do
|
|
147
147
|
expect(plugin_paths).to start_with(@redmine_root)
|
148
148
|
end
|
149
149
|
|
150
|
+
it 'upgrading something else' do
|
151
|
+
wait_for_stdin_buffer
|
152
|
+
write(@redmine_root)
|
153
|
+
|
154
|
+
wait_for_stdin_buffer
|
155
|
+
write(package_someting_else)
|
156
|
+
|
157
|
+
wait_for_stdin_buffer
|
158
|
+
expected_output('is not valid')
|
159
|
+
end
|
160
|
+
|
161
|
+
context 'missing plugins' do
|
162
|
+
|
163
|
+
def upgrade_it(answer, result)
|
164
|
+
# Create some plugins
|
165
|
+
plugin_name = 'new_plugin'
|
166
|
+
plugin_dir = File.join(@redmine_root, 'plugins', plugin_name)
|
167
|
+
FileUtils.mkdir_p(plugin_dir)
|
168
|
+
FileUtils.touch(File.join(plugin_dir, 'init.rb'))
|
169
|
+
|
170
|
+
wait_for_stdin_buffer
|
171
|
+
write(@redmine_root)
|
172
|
+
|
173
|
+
wait_for_stdin_buffer
|
174
|
+
write(package_v345)
|
175
|
+
|
176
|
+
go_down
|
177
|
+
go_down
|
178
|
+
expected_output('‣ Nothing')
|
179
|
+
select_choice
|
180
|
+
write('y')
|
181
|
+
|
182
|
+
expected_output("Your application contains plugins that are not present in the package (#{plugin_name}). Would you like to copy them?")
|
183
|
+
|
184
|
+
write(answer)
|
185
|
+
expected_successful_upgrade
|
186
|
+
expected_redmine_version('3.4.5')
|
187
|
+
|
188
|
+
expect(Dir.exist?(plugin_dir)).to be(result)
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'yes' do
|
192
|
+
upgrade_it('y', true)
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'no' do
|
196
|
+
upgrade_it('n', false)
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
200
|
+
|
150
201
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redmine-installer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0.beta
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ondřej Moravčík
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
@@ -132,17 +132,19 @@ extra_rdoc_files: []
|
|
132
132
|
files:
|
133
133
|
- ".gitignore"
|
134
134
|
- ".travis.yml"
|
135
|
-
-
|
135
|
+
- CHANGELOG.md
|
136
136
|
- LICENSE.txt
|
137
137
|
- README.md
|
138
138
|
- Rakefile
|
139
139
|
- bin/redmine
|
140
|
+
- gems.rb
|
140
141
|
- lib/redmine-installer.rb
|
141
142
|
- lib/redmine-installer/backup.rb
|
142
143
|
- lib/redmine-installer/cli.rb
|
143
144
|
- lib/redmine-installer/command.rb
|
144
145
|
- lib/redmine-installer/configuration.rb
|
145
146
|
- lib/redmine-installer/database.rb
|
147
|
+
- lib/redmine-installer/easycheck.rb
|
146
148
|
- lib/redmine-installer/environment.rb
|
147
149
|
- lib/redmine-installer/errors.rb
|
148
150
|
- lib/redmine-installer/install.rb
|
@@ -182,12 +184,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
182
184
|
requirements:
|
183
185
|
- - ">="
|
184
186
|
- !ruby/object:Gem::Version
|
185
|
-
version: 2.
|
187
|
+
version: 2.3.0
|
186
188
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
189
|
requirements:
|
188
|
-
- - "
|
190
|
+
- - ">"
|
189
191
|
- !ruby/object:Gem::Version
|
190
|
-
version:
|
192
|
+
version: 1.3.1
|
191
193
|
requirements: []
|
192
194
|
rubyforge_project:
|
193
195
|
rubygems_version: 2.7.6
|