redmine-installer 1.0.7 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +3 -15
  5. data/README.md +49 -177
  6. data/bin/redmine +4 -5
  7. data/lib/redmine-installer/backup.rb +13 -40
  8. data/lib/redmine-installer/cli.rb +92 -61
  9. data/lib/redmine-installer/command.rb +63 -117
  10. data/lib/redmine-installer/configuration.rb +148 -0
  11. data/lib/redmine-installer/database.rb +204 -0
  12. data/lib/redmine-installer/environment.rb +21 -0
  13. data/lib/redmine-installer/errors.rb +7 -0
  14. data/lib/redmine-installer/install.rb +37 -42
  15. data/lib/redmine-installer/logger.rb +83 -0
  16. data/lib/redmine-installer/package.rb +180 -0
  17. data/lib/redmine-installer/patches/ruby.rb +35 -0
  18. data/lib/redmine-installer/patches/tty.rb +16 -0
  19. data/lib/redmine-installer/profile.rb +24 -55
  20. data/lib/redmine-installer/redmine.rb +551 -0
  21. data/lib/redmine-installer/spec/spec.rb +81 -0
  22. data/lib/redmine-installer/task.rb +18 -77
  23. data/lib/redmine-installer/task_module.rb +12 -0
  24. data/lib/redmine-installer/upgrade.rb +51 -59
  25. data/lib/redmine-installer/utils.rb +46 -233
  26. data/lib/redmine-installer/version.rb +2 -4
  27. data/lib/redmine-installer.rb +69 -56
  28. data/redmine-installer.gemspec +20 -19
  29. data/spec/custom_matchers.rb +21 -0
  30. data/spec/installer_helper.rb +107 -0
  31. data/spec/installer_process.rb +82 -0
  32. data/spec/lib/backup_restore_spec.rb +81 -0
  33. data/spec/lib/install_spec.rb +125 -36
  34. data/spec/lib/upgrade_spec.rb +73 -52
  35. data/spec/packages/redmine-3.1.0.zip +0 -0
  36. data/spec/packages/redmine-3.2.0.zip +0 -0
  37. data/spec/packages/redmine-3.3.0-bad-migration.zip +0 -0
  38. data/spec/packages/redmine-3.3.0.zip +0 -0
  39. data/spec/packages/something-else.zip +0 -0
  40. data/spec/packages_helper.rb +19 -0
  41. data/spec/shared_contexts.rb +13 -0
  42. data/spec/spec_helper.rb +34 -18
  43. metadata +62 -63
  44. data/lib/redmine-installer/config_param.rb +0 -100
  45. data/lib/redmine-installer/error.rb +0 -5
  46. data/lib/redmine-installer/exec.rb +0 -158
  47. data/lib/redmine-installer/ext/module.rb +0 -7
  48. data/lib/redmine-installer/ext/string.rb +0 -15
  49. data/lib/redmine-installer/git.rb +0 -51
  50. data/lib/redmine-installer/helper.rb +0 -5
  51. data/lib/redmine-installer/helpers/generate_config.rb +0 -29
  52. data/lib/redmine-installer/locales/cs.yml +0 -147
  53. data/lib/redmine-installer/locales/en.yml +0 -154
  54. data/lib/redmine-installer/plugin.rb +0 -9
  55. data/lib/redmine-installer/plugins/base.rb +0 -24
  56. data/lib/redmine-installer/plugins/database.rb +0 -180
  57. data/lib/redmine-installer/plugins/email_sending.rb +0 -82
  58. data/lib/redmine-installer/plugins/redmine_plugin.rb +0 -82
  59. data/lib/redmine-installer/plugins/web_server.rb +0 -26
  60. data/lib/redmine-installer/step.rb +0 -16
  61. data/lib/redmine-installer/steps/backup.rb +0 -125
  62. data/lib/redmine-installer/steps/base.rb +0 -79
  63. data/lib/redmine-installer/steps/database_config.rb +0 -15
  64. data/lib/redmine-installer/steps/email_config.rb +0 -11
  65. data/lib/redmine-installer/steps/env_check.rb +0 -20
  66. data/lib/redmine-installer/steps/install.rb +0 -23
  67. data/lib/redmine-installer/steps/load_package.rb +0 -226
  68. data/lib/redmine-installer/steps/move_redmine.rb +0 -22
  69. data/lib/redmine-installer/steps/redmine_root.rb +0 -52
  70. data/lib/redmine-installer/steps/upgrade.rb +0 -57
  71. data/lib/redmine-installer/steps/validation.rb +0 -38
  72. data/lib/redmine-installer/steps/webserver_config.rb +0 -22
  73. data/spec/load_redmine.rb +0 -24
@@ -1,154 +0,0 @@
1
- en:
2
- redmine_installer_summary: 'Easy way how install/upgrade redmine or plugin.'
3
- backup: 'Backup'
4
- backup_is_stored_at: 'Backup is stored at <bright>%{dir}</bright>'
5
- cannot_download_redmine_version: 'Cannot download redmine %{version}'
6
- cli_install_desc: 'Install redmine'
7
- cli_show_verbose_output: 'Show verbose output'
8
- cli_upgrade_desc: 'Upgrade redmine'
9
- cli_backup_desc: 'Backup redmine'
10
- cli_flag_source: 'What type is package argument'
11
- cli_flag_branch: 'Different branch for git'
12
- cli_flag_environment: 'Environment for redmine'
13
- command_exit_with_error: 'Command exit with an error: <bright>%{command}</bright>'
14
- dir_not_exist_and_cannot_be_created: 'Dir %{dir} does not exist and can not be created'
15
- dir_is_not_writeable: 'Dir <bright>%{dir}</bright> is not writeable'
16
- do_you_want_repeat_command: 'Do you want repeat this command?'
17
- do_you_want_full_backup: 'Do you want full backup?'
18
- do_you_want_backup_redmine: 'Do you want backup redmine?'
19
- do_you_want_save_step_for_further_use: 'Do you want save steps for further use?'
20
- error_redmine_not_contains_all: 'Redmine root does not contains necessary folders: <bright>%{records}</bright>'
21
- error_plugins_should_be_on_plugins: 'Plugin shoold be on plugins dir'
22
- error_argument_package_is_missing: 'Missing argument: redmine package'
23
- error_unsupported_source: 'Unsupported source: %{source}'
24
- exit: 'exit'
25
- file_not_exist: 'File <bright>%{file}</bright> does not exist'
26
- file_must_have_format: 'File <bright>%{file}</bright> must have format: %{formats}'
27
- full_backup: 'Full backup'
28
- git_repository_cannot_be_clonned: 'Repository cannot be clonned'
29
- git_repository_cannot_be_localy_clonned: 'Repository cannot be localy clonned'
30
- git_repository_cannot_be_fetched: 'Repository cannot fetch new version'
31
- no_t: 'no'
32
- only_database: 'Only database'
33
- path_for_redmine_root: 'Path for redmine_root'
34
- powered_by: 'Powered by EasyRedmine'
35
- redmine_downloading: 'Redmine downloading'
36
- redmine_was_installed_to: 'Redmine was installed to %{dir}'
37
- restoring_database: '... Restoring database'
38
- skip: 'Skip'
39
- try_again: 'try again'
40
- what_dir_for_backups: 'What dir for backups?'
41
- what_database_do_you_want: 'What database do you want?'
42
- what_web_server_do_you_want: 'What web-server do you want?'
43
- yes_t: 'yes'
44
- your_profile_can_be_used_as: 'Your profile is saved as #%{id} and can be use with <bright>--profile %{id}</bright>'
45
- installer_run_as_root: 'Installer run as root. This can be dangerous. Continue?'
46
- terminated_by_user: Terminated by user.
47
-
48
- step:
49
- load_package:
50
- title: 'Load package'
51
- database_config:
52
- title: 'Database configuration'
53
- email_config:
54
- title: 'Email sending configuration'
55
- install:
56
- title: 'Install'
57
- move_redmine:
58
- title: 'Moving redmine'
59
- webserver_config:
60
- title: 'Webserver configuration'
61
- validation:
62
- title: 'Validation'
63
- backup:
64
- title: 'Backup'
65
- upgrade:
66
- title: 'Upgrading'
67
- save_profile:
68
- title: 'Saving profile'
69
- redmine_root:
70
- title: 'Getting a redmine root'
71
- env_check:
72
- title: 'Environment checking'
73
-
74
- plugin:
75
- database:
76
- mysql:
77
- title: 'MySQL'
78
- postgresql:
79
- title: 'PostgreSQL'
80
- emailsending:
81
- gmail:
82
- title: 'Gmail'
83
- sendmail:
84
- title: 'Sendmail'
85
- smtpfromscratch:
86
- title: 'SMTP from scratch'
87
- webserver:
88
- webrick:
89
- title: 'Webrick'
90
- configuration: |
91
- Webrick is default webserver.
92
- Server is ready to start.
93
- thin:
94
- title: 'Thin'
95
- configuration: |
96
- Add:
97
- <bright>gem 'thin'</bright>
98
-
99
- to <bright>Gemfile.local</bright>
100
-
101
- and run: <bright>bundle install</bright>
102
-
103
- (More informations can be found at http://code.macournoyer.com/thin)
104
- apachepassenger:
105
- title: 'Passenger (apache)'
106
- configuration: |
107
- Add this to apache configuration file.
108
-
109
- <bright><VirtualHost *:80>
110
- ServerName www.yourhost.com
111
- DocumentRoot %{redmine_root}/public
112
- <Directory %{redmine_root}/public>
113
- # This relaxes Apache security settings.
114
- AllowOverride all
115
- # MultiViews must be turned off.
116
- Options -MultiViews
117
- # Uncomment this if you're on Apache >= 2.4:
118
- #Require all granted
119
- </Directory>
120
- </VirtualHost></bright>
121
-
122
- More informations can be found at https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html
123
- nginxpassenger:
124
- title: 'Passenger (nginx)'
125
- configuration: |
126
- Add this to nginx configuration file.
127
-
128
- <bright>server {
129
- listen 80;
130
- server_name www.yourhost.com;
131
- root %{redmine_root}/public; # <--- be sure to point to 'public'!
132
- passenger_enabled on;
133
- }</bright>
134
-
135
- More informations can be found at https://www.phusionpassenger.com/documentation/Users%20guide%20Nginx.html
136
- puma:
137
- title: 'Puma'
138
- configuration: |
139
- Add:
140
- <bright>gem 'puma'</bright>
141
-
142
- to <bright>Gemfile.local</bright>
143
-
144
- More informations can be found at http://puma.io
145
- redmine_plugin:
146
- easyproject:
147
- install: 'Easyproject installing'
148
-
149
- command:
150
- bundle_install: 'Bundle install'
151
- rake_db_create: 'DB creating'
152
- rake_db_migrate: 'DB migrating'
153
- rake_redmine_plugin_migrate: 'Plugin migrating'
154
- rake_generate_secret_token: 'Generate secret token'
@@ -1,9 +0,0 @@
1
- module Redmine::Installer
2
- module Plugin
3
- autoload :Base, 'redmine-installer/plugins/base'
4
- autoload :Database, 'redmine-installer/plugins/database'
5
- autoload :EmailSending, 'redmine-installer/plugins/email_sending'
6
- autoload :WebServer, 'redmine-installer/plugins/web_server'
7
- autoload :RedminePlugin, 'redmine-installer/plugins/redmine_plugin'
8
- end
9
- end
@@ -1,24 +0,0 @@
1
- module Redmine::Installer::Plugin
2
- class Base
3
-
4
- include Redmine::Installer::Utils
5
-
6
- # Register children
7
- def self.inherited(child)
8
- all << child
9
- end
10
-
11
- def self.all
12
- unless self.instance_variable_defined?(:@all)
13
- self.instance_variable_set(:@all, Array.new)
14
- end
15
-
16
- self.instance_variable_get(:@all)
17
- end
18
-
19
- def self.title
20
- translate("plugin.#{self.superclass.class_name.downcase}.#{self.class_name.downcase}.title")
21
- end
22
-
23
- end
24
- end
@@ -1,180 +0,0 @@
1
- require 'yaml'
2
-
3
- module Redmine::Installer::Plugin
4
- class Database < Base
5
-
6
- DATABASE_YML_PATH = 'config/database.yml'
7
- DATABASE_BACKUP_DIR = '__database'
8
-
9
- attr_reader :params
10
-
11
- def self.load_all(redmine_root)
12
- database_file = File.join(redmine_root, DATABASE_YML_PATH)
13
- return [] unless File.exist?(database_file)
14
-
15
- to_return = []
16
- definitions = YAML.load_file(database_file)
17
- definitions.each do |name, data|
18
-
19
- klass = all.detect{|klass| klass.adapter_name == data['adapter']}
20
-
21
- next if klass.nil?
22
-
23
- klass = klass.new
24
- klass.load(data)
25
-
26
- to_return << klass
27
- end
28
- to_return
29
- end
30
-
31
- def self.backup_all(redmine_root, backup_dir)
32
- load_all(redmine_root).each do |klass|
33
- klass.backup(backup_dir)
34
- end
35
- end
36
-
37
- def self.restore_all(redmine_root, backup_dir)
38
- databases = load_all(redmine_root)
39
- databases.uniq! {|d| d.params['database'].value}
40
- databases.each do |klass|
41
- klass.restore(backup_dir)
42
- end
43
- end
44
-
45
- def initialize
46
- @params = Redmine::Installer::ConfigParams.new
47
- @params.add('database')
48
- @params.add('host').default('localhost')
49
- @params.add('username')
50
- @params.add('password').hide(true)
51
- @params.add('encoding').default('utf8')
52
- end
53
-
54
- # Transform ConfigParams into rails database.yml structure.
55
- # Method creates production and developemtn environemnt
56
- # with the same parameters.
57
- def build
58
- data = Hash[@params.map{|p| [p.name, p.value]}]
59
- data['adapter'] = self.class.adapter_name
60
- data = {
61
- 'production' => data,
62
- 'development' => data,
63
- }
64
- data
65
- end
66
-
67
- # Load paramaters for connection
68
- def load(data)
69
- data.each do |name, value|
70
- # Get param
71
- param = @params[name]
72
-
73
- # Unsupported key or unnecessary parameter
74
- next if param.nil?
75
-
76
- # Save value
77
- param.value = value
78
- end
79
- end
80
-
81
- def make_config(redmine_root)
82
- File.open(File.join(redmine_root, DATABASE_YML_PATH), 'w') do |f|
83
- f.puts(YAML.dump(build))
84
- end
85
- end
86
-
87
- def file_for_backup(dir)
88
- FileUtils.mkdir_p(File.join(dir, DATABASE_BACKUP_DIR))
89
- File.join(dir, DATABASE_BACKUP_DIR, "#{self.class.adapter_name}.#{params['database'].value}.dump")
90
- end
91
-
92
- def backup(dir)
93
- file = file_for_backup(dir)
94
-
95
- # More enviroments can use the same database
96
- return if File.exist?(file)
97
-
98
- Kernel.system(command_for_backup(file))
99
- end
100
-
101
- def restore(dir)
102
- file = file_for_backup(dir)
103
-
104
- # More enviroments can use the same database
105
- return unless File.exist?(file)
106
-
107
- Kernel.system(command_for_empty)
108
- Kernel.system(command_for_restore(file))
109
- end
110
-
111
- # Get valu from param
112
- def get(name)
113
- params[name].value
114
- end
115
-
116
-
117
- # =========================================================================
118
- # MySQL
119
-
120
- class MySQL < Database
121
- def self.adapter_name
122
- 'mysql2'
123
- end
124
-
125
- def initialize
126
- super
127
- @params.add('port').default(3306)
128
- end
129
-
130
- def command_args
131
- "-h #{params['host'].value} -P #{get('port')} -u #{get('username')} -p#{get('password')} #{get('database')}"
132
- end
133
-
134
- def command_for_empty
135
- "mysql #{command_args} -e 'drop database #{get('database')}; create database #{get('database')};'"
136
- end
137
-
138
- def command_for_backup(file)
139
- "mysqldump --add-drop-database #{command_args} > #{file}"
140
- end
141
-
142
- def command_for_restore(file)
143
- "mysql #{command_args} < #{file}"
144
- end
145
- end
146
-
147
-
148
- # =========================================================================
149
- # PostgreSQL
150
-
151
- class PostgreSQL < Database
152
- def self.adapter_name
153
- 'postgresql'
154
- end
155
-
156
- def initialize
157
- super
158
- @params.add('port').default(5432)
159
- end
160
-
161
- def command(comm, file)
162
- %{PGPASSWORD="#{get('password')}" #{comm} -i -h #{get('host')} -p #{get('port')} -U #{get('username')} -Fc -f #{file} #{get('database')}}
163
- end
164
-
165
- def command_for_empty
166
- # %{PGPASSWORD="#{get('password')}" psql -i -h #{get('host')} -p #{get('port')} -U #{get('username')} -c 'drop database #{get('database')}; create database #{get('database')};'}
167
- ''
168
- end
169
-
170
- def command_for_backup(file)
171
- command('pg_dump', file)
172
- end
173
-
174
- def command_for_restore(file)
175
- command('psql', file)
176
- end
177
- end
178
-
179
- end
180
- end
@@ -1,82 +0,0 @@
1
- module Redmine::Installer::Plugin
2
- class EmailSending < Base
3
-
4
- CONFIGURATION_YML_PATH = 'config/configuration.yml'
5
-
6
- attr_reader :params
7
-
8
- def initialize
9
- @params = Redmine::Installer::ConfigParams.new
10
- @params.add('user_name')
11
- @params.add('password').hide(true)
12
- end
13
-
14
- def build
15
- {
16
- 'default' => {
17
- 'email_delivery' => {
18
- 'delivery_method' => delivery_method,
19
- "#{delivery_method}_settings" => delivery_settings
20
- }
21
- }
22
- }
23
- end
24
-
25
- def make_config(redmine_root)
26
- File.open(File.join(redmine_root, CONFIGURATION_YML_PATH), 'w') do |f|
27
- f.puts(YAML.dump(build))
28
- end
29
- end
30
-
31
- def delivery_method
32
- :smtp
33
- end
34
-
35
- # Build ConfigParams
36
- def delivery_settings
37
- settings = {}
38
- @params.each do |param|
39
- next if param.value.empty?
40
- settings[param.name] = param.value
41
- end
42
- settings
43
- end
44
- end
45
-
46
- class Gmail < EmailSending
47
- def delivery_settings
48
- super.merge({
49
- 'enable_starttls_auto' => true,
50
- 'address' => 'smtp.gmail.com',
51
- 'port' => 587,
52
- 'domain' => 'smtp.gmail.com',
53
- 'authentication' => :plain
54
- })
55
- end
56
- end
57
-
58
- class SendMail < EmailSending
59
- def initialize
60
- @params = Redmine::Installer::ConfigParams.new
61
- @params.add('location').default('/usr/sbin/sendmail')
62
- @params.add('arguments').default('-i -t')
63
- end
64
-
65
- def delivery_method
66
- :sendmail
67
- end
68
- end
69
-
70
- class SMTPFromScratch < EmailSending
71
- def initialize
72
- @params = Redmine::Installer::ConfigParams.new
73
- @params.add('address')
74
- @params.add('port').default(587)
75
- @params.add('domain')
76
- @params.add('user_name')
77
- @params.add('password')
78
- @params.add('authentication')
79
- @params.add('enable_starttls_auto')
80
- end
81
- end
82
- end