mina 1.2.3 → 1.2.5
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 +5 -5
- data/.github/workflows/ci.yml +26 -0
- data/.gitignore +0 -1
- data/.rspec +1 -1
- data/.rubocop.yml +28 -1126
- data/CHANGELOG.md +126 -3
- data/Gemfile +2 -0
- data/Gemfile.lock +73 -0
- data/Rakefile +2 -0
- data/Readme.md +8 -12
- data/bin/mina +2 -0
- data/data/deploy.rb +10 -6
- data/docs/3rd_party_plugins.md +3 -0
- data/docs/assets/images/mina.png +0 -0
- data/docs/cookbook.md +1 -1
- data/docs/default_plugins.md +5 -5
- data/docs/how_mina_works.md +3 -3
- data/lib/Minafile +1 -0
- data/lib/mina/application.rb +45 -35
- data/lib/mina/backend/local.rb +2 -0
- data/lib/mina/backend/remote.rb +3 -1
- data/lib/mina/commands.rb +10 -7
- data/lib/mina/configuration.rb +6 -3
- data/lib/mina/dsl.rb +2 -2
- data/lib/mina/helpers/internal.rb +9 -9
- data/lib/mina/helpers/output.rb +5 -3
- data/lib/mina/runner/exec.rb +2 -0
- data/lib/mina/runner/pretty.rb +25 -19
- data/lib/mina/runner/printer.rb +2 -0
- data/lib/mina/runner/system.rb +2 -0
- data/lib/mina/runner.rb +9 -10
- data/lib/mina/version.rb +3 -1
- data/lib/mina/windows_patches.rb +4 -2
- data/lib/mina.rb +4 -3
- data/mina.gemspec +8 -7
- data/spec/configs/default.rb +8 -0
- data/spec/configs/dsl.rb +55 -0
- data/spec/configs/e2e.rb +25 -0
- data/spec/e2e/docker-compose.yml +21 -0
- data/spec/e2e/e2e_run.sh +11 -0
- data/spec/e2e/e2e_spec.rb +35 -0
- data/spec/e2e/ssh +27 -0
- data/spec/e2e/ssh.pub +1 -0
- data/spec/lib/mina/application_spec.rb +94 -35
- data/spec/lib/mina/backend/local_spec.rb +5 -2
- data/spec/lib/mina/backend/remote_spec.rb +5 -3
- data/spec/lib/mina/commands_spec.rb +7 -7
- data/spec/lib/mina/configuration_spec.rb +63 -3
- data/spec/lib/mina/dsl_spec.rb +94 -0
- data/spec/lib/mina/helpers/internal_spec.rb +89 -11
- data/spec/lib/mina/helpers/output_spec.rb +13 -10
- data/spec/lib/mina/runner/exec_spec.rb +19 -0
- data/spec/lib/mina/runner/pretty_spec.rb +17 -0
- data/spec/lib/mina/runner/printer_spec.rb +19 -0
- data/spec/lib/mina/runner/system_spec.rb +19 -0
- data/spec/lib/mina/runner_spec.rb +6 -10
- data/spec/spec_helper.rb +33 -14
- data/spec/support/outputs/bundle_clean.txt +2 -2
- data/spec/support/outputs/chruby_with_env.txt +7 -0
- data/spec/support/outputs/chruby_without_env.txt +2 -0
- data/spec/support/outputs/debug_configuration_variables.txt +11 -0
- data/spec/support/outputs/dsl_deploy.txt +4 -0
- data/spec/support/outputs/dsl_in_path.txt +1 -0
- data/spec/support/outputs/dsl_local_run.txt +5 -0
- data/spec/support/outputs/dsl_on.txt +6 -0
- data/spec/support/outputs/dsl_remote_run.txt +5 -0
- data/spec/support/outputs/dsl_reset.txt +2 -0
- data/spec/support/outputs/e2e_deploy_after_setup.txt +1 -0
- data/spec/support/outputs/e2e_deploy_without_setup.txt +1 -0
- data/spec/support/outputs/e2e_setup.txt +1 -0
- data/spec/support/outputs/environment.txt +1 -0
- data/spec/support/outputs/git_clone.txt +1 -1
- data/spec/support/outputs/git_clone_commit.txt +1 -1
- data/spec/support/outputs/git_ensure_pushed.txt +15 -0
- data/spec/support/outputs/rails_assets_precompile_force_precompile.txt +2 -0
- data/spec/support/outputs/rails_assets_precompile_outside_deploy_block.txt +1 -0
- data/spec/support/outputs/rails_assets_precompile_with_diff.txt +7 -0
- data/spec/support/outputs/rails_console.txt +1 -0
- data/spec/support/outputs/rails_db_migrate_force_migrate.txt +2 -0
- data/spec/support/outputs/rails_db_migrate_outside_deploy_block.txt +1 -0
- data/spec/support/outputs/rails_db_migrate_with_diff.txt +7 -0
- data/spec/support/outputs/rails_log.txt +1 -0
- data/spec/support/outputs/rails_with_arguments.txt +1 -0
- data/spec/support/outputs/rails_without_arguments.txt +1 -0
- data/spec/support/outputs/rake_with_arguments.txt +1 -0
- data/spec/support/outputs/rake_without_arguments.txt +1 -0
- data/spec/support/outputs/rbenv_load.txt +9 -1
- data/spec/support/outputs/rvm_use_with_env.txt +8 -0
- data/spec/support/outputs/rvm_use_without_env.txt +2 -0
- data/spec/support/outputs/rvm_wrapper_with_arguments.txt +8 -0
- data/spec/support/outputs/rvm_wrapper_without_arguments.txt +2 -0
- data/spec/support/outputs/ry_with_env.txt +13 -0
- data/spec/support/outputs/ry_without_env.txt +13 -0
- data/spec/support/outputs/ssh.txt +1 -0
- data/spec/support/outputs/ssh_keyscan_domain.txt +3 -0
- data/spec/support/rake_example_group.rb +23 -19
- data/spec/tasks/bundler_spec.rb +6 -0
- data/spec/tasks/chruby_spec.rb +29 -0
- data/spec/tasks/default_spec.rb +79 -7
- data/spec/tasks/deploy_spec.rb +6 -0
- data/spec/tasks/git_spec.rb +12 -0
- data/spec/tasks/init_spec.rb +13 -4
- data/spec/tasks/rails_spec.rb +126 -15
- data/spec/tasks/rbenv_spec.rb +15 -0
- data/spec/tasks/rvm_spec.rb +51 -0
- data/spec/tasks/ry_spec.rb +43 -0
- data/tasks/mina/bundler.rb +7 -5
- data/tasks/mina/chruby.rb +7 -5
- data/tasks/mina/default.rb +19 -12
- data/tasks/mina/deploy.rb +27 -25
- data/tasks/mina/git.rb +28 -15
- data/tasks/mina/install.rb +9 -0
- data/tasks/mina/rails.rb +29 -27
- data/tasks/mina/rbenv.rb +8 -6
- data/tasks/mina/rvm.rb +13 -11
- data/tasks/mina/ry.rb +11 -11
- data/test_env/config/deploy.rb +9 -8
- metadata +69 -37
- data/spec/support/outputs/chruby.txt +0 -9
- data/spec/support/outputs/console.txt +0 -1
- data/spec/support/outputs/log.txt +0 -1
- data/spec/support/outputs/rails_db_migrate.txt +0 -1
- data/spec/support/outputs/rvm_use.txt +0 -1
- data/spec/support/outputs/ry.txt +0 -15
- data/spec/tasks/ruby_managers_spec.rb +0 -33
data/spec/tasks/rails_spec.rb
CHANGED
|
@@ -1,23 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'spec_helper'
|
|
2
4
|
|
|
3
5
|
RSpec.describe 'rails', type: :rake do
|
|
6
|
+
before do
|
|
7
|
+
load_default_config
|
|
8
|
+
end
|
|
9
|
+
|
|
4
10
|
describe 'console' do
|
|
5
11
|
it 'starts console' do
|
|
6
|
-
expect { invoke_all }.to output(output_file('
|
|
12
|
+
expect { invoke_all }.to output(output_file('rails_console')).to_stdout
|
|
7
13
|
end
|
|
8
14
|
end
|
|
9
15
|
|
|
10
16
|
describe 'log' do
|
|
11
17
|
it 'tails log' do
|
|
12
|
-
expect { invoke_all }.to output(output_file('
|
|
18
|
+
expect { invoke_all }.to output(output_file('rails_log')).to_stdout
|
|
13
19
|
end
|
|
14
20
|
end
|
|
15
21
|
|
|
16
22
|
describe 'rails:db_migrate' do
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
let(:task_name) { 'rails:db_migrate' }
|
|
24
|
+
|
|
25
|
+
context 'when outside deploy block' do
|
|
26
|
+
before do
|
|
27
|
+
Mina::Configuration.instance.remove(:deploy_block)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'exits with an error message' do
|
|
31
|
+
expect do
|
|
32
|
+
invoke_all
|
|
33
|
+
end.to raise_error(SystemExit)
|
|
34
|
+
.and output(output_file('rails_db_migrate_outside_deploy_block')).to_stdout
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context 'with force_migrate flag' do
|
|
39
|
+
before do
|
|
40
|
+
Mina::Configuration.instance.set(:force_migrate, true)
|
|
41
|
+
Mina::Configuration.instance.set(:deploy_block, true)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'runs rails db:migrate' do
|
|
45
|
+
expect do
|
|
46
|
+
invoke_all
|
|
47
|
+
end.to output(output_file('rails_db_migrate_force_migrate')).to_stdout
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context 'without force_migrate flag' do
|
|
52
|
+
before do
|
|
53
|
+
Mina::Configuration.instance.set(:deploy_block, true)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'runs rails db:migrate but checks for changes first' do
|
|
57
|
+
expect do
|
|
58
|
+
invoke_all
|
|
59
|
+
end.to output(output_file('rails_db_migrate_with_diff')).to_stdout
|
|
60
|
+
end
|
|
21
61
|
end
|
|
22
62
|
end
|
|
23
63
|
|
|
@@ -34,10 +74,44 @@ RSpec.describe 'rails', type: :rake do
|
|
|
34
74
|
end
|
|
35
75
|
|
|
36
76
|
describe 'rails:assets_precompile' do
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
77
|
+
let(:task_name) { 'rails:assets_precompile' }
|
|
78
|
+
|
|
79
|
+
context 'when outside deploy block' do
|
|
80
|
+
before do
|
|
81
|
+
Mina::Configuration.instance.remove(:deploy_block)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'exits with an error message' do
|
|
85
|
+
expect do
|
|
86
|
+
invoke_all
|
|
87
|
+
end.to raise_error(SystemExit)
|
|
88
|
+
.and output(output_file('rails_assets_precompile_outside_deploy_block')).to_stdout
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
context 'with force_asset_precompile flag' do
|
|
93
|
+
before do
|
|
94
|
+
Mina::Configuration.instance.set(:force_asset_precompile, true)
|
|
95
|
+
Mina::Configuration.instance.set(:deploy_block, true)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it 'runs rails assets:precompile' do
|
|
99
|
+
expect do
|
|
100
|
+
invoke_all
|
|
101
|
+
end.to output(output_file('rails_assets_precompile_force_precompile')).to_stdout
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
context 'without force_asset_precompile flag' do
|
|
106
|
+
before do
|
|
107
|
+
Mina::Configuration.instance.set(:deploy_block, true)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it 'runs rails assets:precompile but checks for changes first' do
|
|
111
|
+
expect do
|
|
112
|
+
invoke_all
|
|
113
|
+
end.to output(output_file('rails_assets_precompile_with_diff')).to_stdout
|
|
114
|
+
end
|
|
41
115
|
end
|
|
42
116
|
end
|
|
43
117
|
|
|
@@ -52,9 +126,46 @@ RSpec.describe 'rails', type: :rake do
|
|
|
52
126
|
expect { invoke_all }.to output(output_file('rails_db_schema_load')).to_stdout
|
|
53
127
|
end
|
|
54
128
|
end
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
129
|
+
|
|
130
|
+
describe 'rails' do
|
|
131
|
+
let(:task_name) { 'rails' }
|
|
132
|
+
|
|
133
|
+
context 'without arguments' do
|
|
134
|
+
it 'exits with an error message' do
|
|
135
|
+
expect do
|
|
136
|
+
invoke_all
|
|
137
|
+
end.to raise_error(SystemExit)
|
|
138
|
+
.and output(output_file('rails_without_arguments')).to_stdout
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
context 'with arguments' do
|
|
143
|
+
it 'executes the arguments' do
|
|
144
|
+
expect do
|
|
145
|
+
invoke_all('db:rollback STEP=2')
|
|
146
|
+
end.to output(output_file('rails_with_arguments')).to_stdout
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
describe 'rake' do
|
|
152
|
+
let(:task_name) { 'rake' }
|
|
153
|
+
|
|
154
|
+
context 'without arguments' do
|
|
155
|
+
it 'exits with an error message' do
|
|
156
|
+
expect do
|
|
157
|
+
invoke_all
|
|
158
|
+
end.to raise_error(SystemExit)
|
|
159
|
+
.and output(output_file('rake_without_arguments')).to_stdout
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
context 'with arguments' do
|
|
164
|
+
it 'executes the arguments' do
|
|
165
|
+
expect do
|
|
166
|
+
invoke_all('db:primary:migrate')
|
|
167
|
+
end.to output(output_file('rake_with_arguments')).to_stdout
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
60
171
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
RSpec.describe 'rbenv', type: :rake do
|
|
6
|
+
before do
|
|
7
|
+
load_default_config
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe 'rbenv:load' do
|
|
11
|
+
it 'loads rbenv' do
|
|
12
|
+
expect { invoke_all }.to output(output_file('rbenv_load')).to_stdout
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
RSpec.describe 'rvm', type: :rake do
|
|
6
|
+
before do
|
|
7
|
+
load_default_config
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe 'rvm:use' do
|
|
11
|
+
let(:task_name) { 'rvm:use' }
|
|
12
|
+
|
|
13
|
+
context 'without an argument' do
|
|
14
|
+
it 'exits with an error message' do
|
|
15
|
+
expect do
|
|
16
|
+
invoke_all
|
|
17
|
+
end.to raise_error(SystemExit)
|
|
18
|
+
.and output(output_file('rvm_use_without_env')).to_stdout
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context 'with an argument' do
|
|
23
|
+
it 'sets ruby version' do
|
|
24
|
+
expect do
|
|
25
|
+
invoke_all('3.0.0')
|
|
26
|
+
end.to output(output_file('rvm_use_with_env')).to_stdout
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe 'rvm:wrapper' do
|
|
32
|
+
let(:task_name) { 'rvm:wrapper' }
|
|
33
|
+
|
|
34
|
+
context 'without all arguments' do
|
|
35
|
+
it 'exits with an error message' do
|
|
36
|
+
expect do
|
|
37
|
+
invoke_all('ruby-3.0.0')
|
|
38
|
+
end.to raise_error(SystemExit)
|
|
39
|
+
.and output(output_file('rvm_wrapper_without_arguments')).to_stdout
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context 'with all arguments' do
|
|
44
|
+
it 'calls rvm wrapper' do
|
|
45
|
+
expect do
|
|
46
|
+
invoke_all('3.0.0', 'myapp', 'unicorn')
|
|
47
|
+
end.to output(output_file('rvm_wrapper_with_arguments')).to_stdout
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
RSpec.describe 'ry', type: :rake do
|
|
6
|
+
before do
|
|
7
|
+
load_default_config
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe 'ry' do
|
|
11
|
+
let(:task_name) { 'ry' }
|
|
12
|
+
|
|
13
|
+
let(:default_version_warning) { /Task 'ry' without argument will use default Ruby version\./ }
|
|
14
|
+
|
|
15
|
+
context 'without an argument' do
|
|
16
|
+
it 'prints a warning' do
|
|
17
|
+
expect do
|
|
18
|
+
invoke_all
|
|
19
|
+
end.to output(default_version_warning).to_stdout
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'sets ruby version' do
|
|
23
|
+
expect do
|
|
24
|
+
invoke_all
|
|
25
|
+
end.to output(output_file('ry_without_env')).to_stdout
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context 'with an argument' do
|
|
30
|
+
it "doesn't print a warning" do
|
|
31
|
+
expect do
|
|
32
|
+
invoke_all('3.0.0')
|
|
33
|
+
end.not_to output(default_version_warning).to_stdout
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'sets ruby version' do
|
|
38
|
+
expect do
|
|
39
|
+
invoke_all('3.0.0')
|
|
40
|
+
end.to output(output_file('ry_with_env')).to_stdout
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
data/tasks/mina/bundler.rb
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'mina/default'
|
|
2
4
|
|
|
3
5
|
set :bundle_bin, 'bundle'
|
|
4
6
|
set :bundle_path, 'vendor/bundle'
|
|
5
7
|
set :bundle_withouts, 'development test'
|
|
6
|
-
set :bundle_options, -> { %
|
|
8
|
+
set :bundle_options, -> { %(--without #{fetch(:bundle_withouts)} --path "#{fetch(:bundle_path)}" --deployment) }
|
|
7
9
|
set :shared_dirs, fetch(:shared_dirs, []).push(fetch(:bundle_path))
|
|
8
10
|
|
|
9
11
|
namespace :bundle do
|
|
10
12
|
desc 'Install gem dependencies using Bundler.'
|
|
11
13
|
task :install do
|
|
12
|
-
comment %
|
|
13
|
-
command %
|
|
14
|
+
comment %(Installing gem dependencies using Bundler)
|
|
15
|
+
command %(#{fetch(:bundle_bin)} install #{fetch(:bundle_options)})
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
desc 'Cleans up unused gems in your bundler directory'
|
|
17
19
|
task :clean do
|
|
18
|
-
comment %
|
|
19
|
-
command %
|
|
20
|
+
comment %(Cleaning up unused gems)
|
|
21
|
+
command %(#{fetch(:bundle_bin)} clean)
|
|
20
22
|
end
|
|
21
23
|
end
|
data/tasks/mina/chruby.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
set :chruby_path, '/etc/profile.d/chruby.sh'
|
|
2
4
|
|
|
3
5
|
task :chruby, :env do |_, args|
|
|
@@ -7,13 +9,13 @@ task :chruby, :env do |_, args|
|
|
|
7
9
|
exit 1
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
comment %
|
|
11
|
-
command %
|
|
12
|
+
comment %(chruby to version: \\"#{args[:env]}\\")
|
|
13
|
+
command %(
|
|
12
14
|
if [[ ! -s "#{fetch(:chruby_path)}" ]]; then
|
|
13
15
|
echo "! chruby.sh init file not found"
|
|
14
16
|
exit 1
|
|
15
17
|
fi
|
|
16
|
-
|
|
17
|
-
command %
|
|
18
|
-
command %
|
|
18
|
+
)
|
|
19
|
+
command %(source #{fetch(:chruby_path)})
|
|
20
|
+
command %(chruby "#{args[:env]}" || exit 1)
|
|
19
21
|
end
|
data/tasks/mina/default.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'mina/install'
|
|
2
4
|
|
|
3
5
|
set :port, 22
|
|
@@ -32,27 +34,28 @@ end
|
|
|
32
34
|
|
|
33
35
|
task :debug_configuration_variables do
|
|
34
36
|
if fetch(:debug_configuration_variables)
|
|
35
|
-
puts
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
puts "#{key.inspect} => #{value.inspect}"
|
|
37
|
+
puts '========== Configuration variables =========='
|
|
38
|
+
configuration.variables.each_key do |key|
|
|
39
|
+
puts "#{key.inspect} => #{fetch(key).inspect}"
|
|
39
40
|
end
|
|
41
|
+
puts '========== Configuration variables =========='
|
|
42
|
+
puts
|
|
40
43
|
end
|
|
41
44
|
end
|
|
42
45
|
|
|
43
46
|
desc 'Adds repo host to the known hosts'
|
|
44
47
|
task :ssh_keyscan_repo do
|
|
45
48
|
ensure!(:repository)
|
|
46
|
-
repo_host = fetch(:repository).split(%r{@|://}).last.split(%r{
|
|
49
|
+
repo_host = fetch(:repository).split(%r{@|://}).last.split(%r{:|/}).first
|
|
47
50
|
repo_port = /:([0-9]+)/.match(fetch(:repository)) && /:([0-9]+)/.match(fetch(:repository))[1] || '22'
|
|
48
51
|
|
|
49
|
-
next if repo_host ==
|
|
52
|
+
next if repo_host == ''
|
|
50
53
|
|
|
51
|
-
command %
|
|
54
|
+
command %(
|
|
52
55
|
if ! ssh-keygen -H -F #{repo_host} &>/dev/null; then
|
|
53
56
|
ssh-keyscan -t rsa -p #{repo_port} -H #{repo_host} >> ~/.ssh/known_hosts
|
|
54
57
|
fi
|
|
55
|
-
|
|
58
|
+
)
|
|
56
59
|
end
|
|
57
60
|
|
|
58
61
|
desc 'Adds domain to the known hosts'
|
|
@@ -60,11 +63,11 @@ task :ssh_keyscan_domain do
|
|
|
60
63
|
ensure!(:domain)
|
|
61
64
|
ensure!(:port)
|
|
62
65
|
run :local do
|
|
63
|
-
command %
|
|
66
|
+
command %(
|
|
64
67
|
if ! ssh-keygen -H -F #{fetch(:domain)} &>/dev/null; then
|
|
65
68
|
ssh-keyscan -p #{fetch(:port)} #{fetch(:domain)} >> ~/.ssh/known_hosts
|
|
66
69
|
fi
|
|
67
|
-
|
|
70
|
+
)
|
|
68
71
|
end
|
|
69
72
|
end
|
|
70
73
|
|
|
@@ -83,7 +86,11 @@ task :run, [:command] do |_, args|
|
|
|
83
86
|
end
|
|
84
87
|
end
|
|
85
88
|
|
|
86
|
-
desc 'Open an
|
|
89
|
+
desc 'Open an SSH connection and position to :deploy_to folder'
|
|
87
90
|
task :ssh do
|
|
88
|
-
|
|
91
|
+
ensure!(:deploy_to)
|
|
92
|
+
|
|
93
|
+
set :execution_mode, :exec
|
|
94
|
+
|
|
95
|
+
command "cd #{fetch(:deploy_to)} && exec $SHELL"
|
|
89
96
|
end
|
data/tasks/mina/deploy.rb
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'mina/default'
|
|
2
4
|
|
|
3
5
|
set :releases_path, -> { "#{fetch(:deploy_to)}/releases" }
|
|
4
6
|
set :shared_path, -> { "#{fetch(:deploy_to)}/shared" }
|
|
5
7
|
set :current_path, -> { "#{fetch(:deploy_to)}/current" }
|
|
6
8
|
set :lock_file, 'deploy.lock'
|
|
7
|
-
set :deploy_script, 'data/deploy.sh.erb'
|
|
9
|
+
set :deploy_script, Mina.root_path('data/deploy.sh.erb')
|
|
8
10
|
set :keep_releases, 5
|
|
9
11
|
set :version_scheme, :sequence
|
|
10
12
|
set :execution_mode, :pretty
|
|
@@ -12,30 +14,30 @@ set :execution_mode, :pretty
|
|
|
12
14
|
namespace :deploy do
|
|
13
15
|
desc 'Forces a deploy unlock.'
|
|
14
16
|
task :force_unlock do
|
|
15
|
-
comment %
|
|
16
|
-
command %
|
|
17
|
+
comment %(Unlocking)
|
|
18
|
+
command %(rm -f "#{fetch(:deploy_to)}/#{fetch(:lock_file)}")
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
desc 'Links paths set in :shared_dirs and :shared_files.'
|
|
20
22
|
task :link_shared_paths do
|
|
21
|
-
comment %
|
|
23
|
+
comment %(Symlinking shared paths)
|
|
22
24
|
|
|
23
25
|
fetch(:shared_dirs, []).each do |linked_dir|
|
|
24
|
-
command %
|
|
26
|
+
command %(
|
|
25
27
|
if [ ! -d "#{fetch(:shared_path)}/#{linked_dir}" ]; then
|
|
26
28
|
echo "! ERROR: not set up."
|
|
27
29
|
echo "The directory '#{fetch(:shared_path)}/#{linked_dir}' does not exist on the server"
|
|
28
30
|
echo "You may need to run 'mina setup' first"
|
|
29
31
|
exit 18
|
|
30
32
|
fi
|
|
31
|
-
|
|
32
|
-
command %
|
|
33
|
-
command %
|
|
34
|
-
command %
|
|
33
|
+
)
|
|
34
|
+
command %(mkdir -p #{File.dirname("./#{linked_dir}")})
|
|
35
|
+
command %(rm -rf "./#{linked_dir}")
|
|
36
|
+
command %(ln -s "#{fetch(:shared_path)}/#{linked_dir}" "./#{linked_dir}")
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
fetch(:shared_files, []).each do |linked_path|
|
|
38
|
-
command %
|
|
40
|
+
command %(ln -sf "#{fetch(:shared_path)}/#{linked_path}" "./#{linked_path}")
|
|
39
41
|
end
|
|
40
42
|
end
|
|
41
43
|
|
|
@@ -45,26 +47,26 @@ namespace :deploy do
|
|
|
45
47
|
ensure!(:deploy_to)
|
|
46
48
|
|
|
47
49
|
comment %{Cleaning up old releases (keeping #{fetch(:keep_releases)})}
|
|
48
|
-
in_path
|
|
50
|
+
in_path fetch(:releases_path) do
|
|
49
51
|
command %{count=$(ls -A1 | sort -rn | wc -l)}
|
|
50
52
|
command %{remove=$((count > #{fetch(:keep_releases)} ? count - #{fetch(:keep_releases)} : 0))}
|
|
51
|
-
command %
|
|
53
|
+
command %(ls -A1 | sort -rn | tail -n $remove | xargs rm -rf {})
|
|
52
54
|
end
|
|
53
55
|
end
|
|
54
56
|
end
|
|
55
57
|
|
|
56
58
|
desc 'Rollbacks the latest release'
|
|
57
59
|
task :rollback do
|
|
58
|
-
comment %
|
|
60
|
+
comment %(Rolling back to previous release)
|
|
59
61
|
|
|
60
|
-
in_path
|
|
62
|
+
in_path fetch(:releases_path) do
|
|
61
63
|
# TODO: add check if there are more than 1 release
|
|
62
64
|
command %{rollback_release=$(ls -1A | sort -n | tail -n 2 | head -n 1)}
|
|
63
|
-
comment %
|
|
64
|
-
command %
|
|
65
|
+
comment %(Rollbacking to release: $rollback_release)
|
|
66
|
+
command %(ln -nfs #{fetch(:releases_path)}/$rollback_release #{fetch(:current_path)})
|
|
65
67
|
command %{current_release=$(ls -1A | sort -n | tail -n 1)}
|
|
66
|
-
comment %
|
|
67
|
-
command %
|
|
68
|
+
comment %(Deleting current release: $current_release)
|
|
69
|
+
command %(rm -rf #{fetch(:releases_path)}/$current_release)
|
|
68
70
|
end
|
|
69
71
|
end
|
|
70
72
|
|
|
@@ -72,17 +74,17 @@ desc 'Sets up a site.'
|
|
|
72
74
|
task :setup do
|
|
73
75
|
ensure!(:deploy_to)
|
|
74
76
|
|
|
75
|
-
comment %
|
|
76
|
-
command %
|
|
77
|
-
command %
|
|
78
|
-
command %
|
|
77
|
+
comment %(Setting up #{fetch(:deploy_to)})
|
|
78
|
+
command %(mkdir -p "#{fetch(:deploy_to)}")
|
|
79
|
+
command %(mkdir -p "#{fetch(:releases_path)}")
|
|
80
|
+
command %(mkdir -p "#{fetch(:shared_path)}")
|
|
79
81
|
|
|
80
|
-
in_path
|
|
82
|
+
in_path fetch(:shared_path) do
|
|
81
83
|
fetch(:shared_dirs, []).each do |linked_dir|
|
|
82
|
-
command %
|
|
84
|
+
command %(mkdir -p "#{linked_dir}")
|
|
83
85
|
end
|
|
84
86
|
fetch(:shared_files, []).each do |linked_path|
|
|
85
|
-
command %
|
|
87
|
+
command %(mkdir -p "#{File.dirname(linked_path)}")
|
|
86
88
|
end
|
|
87
89
|
end
|
|
88
90
|
|
data/tasks/mina/git.rb
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'mina/default'
|
|
2
4
|
|
|
3
5
|
set :branch, 'master'
|
|
4
6
|
set :remove_git_dir, true
|
|
5
7
|
set :remote, 'origin'
|
|
6
8
|
set :git_not_pushed_message, -> { "Your branch #{fetch(:branch)} needs to be pushed to #{fetch(:remote)} before deploying" }
|
|
9
|
+
set :git_local_branch_missing_message, -> { "Branch #{fetch(:branch)} doesn't exist" }
|
|
10
|
+
set :git_remote_branch_missing_message, -> { "Branch #{fetch(:remote)}/#{fetch(:branch)} doesn't exist" }
|
|
7
11
|
|
|
8
12
|
namespace :git do
|
|
9
13
|
desc 'Clones the Git repository to the current path.'
|
|
@@ -11,42 +15,51 @@ namespace :git do
|
|
|
11
15
|
ensure!(:repository)
|
|
12
16
|
ensure!(:deploy_to)
|
|
13
17
|
if set?(:commit)
|
|
14
|
-
comment %
|
|
15
|
-
command %
|
|
16
|
-
command %
|
|
18
|
+
comment %(Using git commit \\"#{fetch(:commit)}\\")
|
|
19
|
+
command %(git clone "#{fetch(:repository)}" . --recursive)
|
|
20
|
+
command %(git checkout -b current_release "#{fetch(:commit)}" --force)
|
|
17
21
|
else
|
|
18
|
-
command %
|
|
22
|
+
command %(
|
|
19
23
|
if [ ! -d "#{fetch(:deploy_to)}/scm/objects" ]; then
|
|
20
24
|
echo "-----> Cloning the Git repository"
|
|
21
|
-
#{echo_cmd %
|
|
25
|
+
#{echo_cmd %(git clone "#{fetch(:repository)}" "#{fetch(:deploy_to)}/scm" --bare)}
|
|
22
26
|
else
|
|
23
27
|
echo "-----> Fetching new git commits"
|
|
24
28
|
#{echo_cmd %[(cd "#{fetch(:deploy_to)}/scm" && git fetch "#{fetch(:repository)}" "#{fetch(:branch)}:#{fetch(:branch)}" --force)]}
|
|
25
29
|
fi &&
|
|
26
30
|
echo "-----> Using git branch '#{fetch(:branch)}'" &&
|
|
27
|
-
#{echo_cmd %
|
|
28
|
-
|
|
31
|
+
#{echo_cmd %(git clone "#{fetch(:deploy_to)}/scm" . --recursive --branch "#{fetch(:branch)}")}
|
|
32
|
+
), quiet: true
|
|
29
33
|
end
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
comment %(Updating submodules)
|
|
35
|
+
command %(git submodule update)
|
|
36
|
+
comment %(Using this git commit)
|
|
37
|
+
command %(git rev-parse HEAD > .mina_git_revision)
|
|
33
38
|
command %{git --no-pager log --format="%aN (%h):%n> %s" -n 1}
|
|
34
|
-
if fetch(:remove_git_dir)
|
|
35
|
-
command %{rm -rf .git}
|
|
36
|
-
end
|
|
39
|
+
command %(rm -rf .git) if fetch(:remove_git_dir)
|
|
37
40
|
end
|
|
38
41
|
|
|
39
42
|
desc 'Prints out current revision'
|
|
40
43
|
task :revision do
|
|
41
44
|
ensure!(:deploy_to)
|
|
42
|
-
command %
|
|
45
|
+
command %(cat #{fetch(:current_path)}/.mina_git_revision)
|
|
43
46
|
end
|
|
44
47
|
|
|
45
48
|
desc 'Ensures local repository is pushed to remote'
|
|
46
49
|
task :ensure_pushed do
|
|
47
50
|
run :local do
|
|
48
|
-
comment %
|
|
51
|
+
comment %(Ensuring everything is pushed to git)
|
|
49
52
|
command %{
|
|
53
|
+
if [ $(git branch --list #{fetch(:branch)} | wc -l) -eq 0 ]; then
|
|
54
|
+
echo "! #{fetch(:git_local_branch_missing_message)}"
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
if [ $(git branch -r --list #{fetch(:remote)}/#{fetch(:branch)} | wc -l) -eq 0 ]; then
|
|
59
|
+
echo "! #{fetch(:git_remote_branch_missing_message)}"
|
|
60
|
+
exit 1
|
|
61
|
+
fi
|
|
62
|
+
|
|
50
63
|
if [ $(git log #{fetch(:remote)}/#{fetch(:branch)}..#{fetch(:branch)} | wc -l) -ne 0 ]; then
|
|
51
64
|
echo "! #{fetch(:git_not_pushed_message)}"
|
|
52
65
|
exit 1
|
data/tasks/mina/install.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
desc 'Creates a sample config file.'
|
|
2
4
|
task :init do
|
|
3
5
|
name = Rake.application.name
|
|
@@ -9,6 +11,13 @@ task :init do
|
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
outfile = './config/deploy.rb'
|
|
14
|
+
|
|
15
|
+
if File.exist?(outfile)
|
|
16
|
+
print 'deploy.rb already exists, do you want to overwrite it? (y/n) '
|
|
17
|
+
|
|
18
|
+
exit(8) if $stdin.readline.chomp.downcase != 'y'
|
|
19
|
+
end
|
|
20
|
+
|
|
12
21
|
require 'fileutils'
|
|
13
22
|
FileUtils.mkdir_p './config'
|
|
14
23
|
FileUtils.cp Mina.root_path('data/deploy.rb'), outfile
|