capistrano-technogate 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/capistrano/technogate/base.rb +0 -17
- data/lib/capistrano/technogate/configurations.rb +0 -7
- data/lib/capistrano/technogate/contao.rb +78 -111
- data/lib/capistrano/technogate/mysql.rb +29 -14
- data/lib/capistrano/technogate/rails.rb +1 -0
- data/lib/capistrano/technogate/version.rb +2 -2
- metadata +3 -4
- data/..gemspec +0 -20
@@ -39,16 +39,6 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
namespace :deploy do
|
42
|
-
if defined?(skip_deploy_restart) and skip_deploy_restart
|
43
|
-
task :restart do
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
if defined?(finalize_update) and finalize_update
|
48
|
-
task :finalize_update do
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
42
|
desc "Check if the branch is ready"
|
53
43
|
task :check_if_branch_is_ready, :roles => :web do
|
54
44
|
unless `git rev-parse #{branch}` == `git rev-parse origin/#{branch}`
|
@@ -80,13 +70,6 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
80
70
|
end
|
81
71
|
end
|
82
72
|
|
83
|
-
namespace :bundle do
|
84
|
-
if :skip_bundle_install
|
85
|
-
task :install do
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
73
|
# Dependencies
|
91
74
|
before "deploy", "deploy:check_if_remote_ready"
|
92
75
|
after "deploy:check_if_remote_ready", "deploy:check_if_branch_is_ready"
|
@@ -21,11 +21,4 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
21
21
|
# Set the current path
|
22
22
|
set :current_path, "#{File.join deploy_to, 'current'}"
|
23
23
|
end
|
24
|
-
|
25
|
-
# Some helpers
|
26
|
-
if defined?(skip_bundle_install) and skip_bundle_install
|
27
|
-
set :try_bundle_exec, ""
|
28
|
-
else
|
29
|
-
set :try_bundle_exec, "bundle exec"
|
30
|
-
end
|
31
24
|
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'capistrano'
|
2
|
+
require 'capistrano/technogate/base'
|
3
|
+
require 'capistrano/technogate/mysql'
|
2
4
|
|
3
5
|
# Verify that Capistrano is version 2
|
4
6
|
unless Capistrano::Configuration.respond_to?(:instance)
|
@@ -6,6 +8,12 @@ unless Capistrano::Configuration.respond_to?(:instance)
|
|
6
8
|
end
|
7
9
|
|
8
10
|
Capistrano::Configuration.instance(:must_exist).load do
|
11
|
+
namespace :deploy do
|
12
|
+
desc "Empty task, overriden by #{__FILE__}"
|
13
|
+
task :finalize_update do
|
14
|
+
# Empty task, we do not want to delete the system folder.
|
15
|
+
end
|
16
|
+
end
|
9
17
|
|
10
18
|
namespace :contao do
|
11
19
|
task :setup, :roles => :web do
|
@@ -20,8 +28,6 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
20
28
|
end
|
21
29
|
|
22
30
|
task :setup_localconfig, :roles => :web do
|
23
|
-
mysql_credentials = TechnoGate::Contao.instance.mysql_credentials
|
24
|
-
mysql_db_name = TechnoGate::Contao.instance.mysql_database_name
|
25
31
|
localconfig = File.read("public/system/config/localconfig.php.sample")
|
26
32
|
|
27
33
|
# Add MySQL credentials
|
@@ -40,9 +46,6 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
40
46
|
end
|
41
47
|
|
42
48
|
task :setup_db, :roles => :db do
|
43
|
-
mysql_credentials = TechnoGate::Contao.instance.mysql_credentials
|
44
|
-
mysql_db_name = TechnoGate::Contao.instance.mysql_database_name
|
45
|
-
|
46
49
|
unless blank?(mysql_credentials)
|
47
50
|
begin
|
48
51
|
run <<-CMD
|
@@ -72,107 +75,67 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
72
75
|
CMD
|
73
76
|
end
|
74
77
|
|
75
|
-
desc "Copy master database to staging"
|
76
|
-
task :replicate_master_database, :roles => :web do
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
# This module serve as a placeholder for mysql credentials
|
140
|
-
# and other stuff that would go around in contao.
|
141
|
-
module TechnoGate
|
142
|
-
class Contao
|
143
|
-
|
144
|
-
attr_accessor :config
|
145
|
-
|
146
|
-
def self.instance(deploy_to = nil)
|
147
|
-
@@instance ||= Contao.new
|
148
|
-
|
149
|
-
@@instance
|
150
|
-
end
|
151
|
-
|
152
|
-
def mysql_credentials
|
153
|
-
return @mysql_credentials unless @mysql_credentials.nil?
|
154
|
-
|
155
|
-
begin
|
156
|
-
mysql_credentials_file = @config.capture "cat #{@config.deploy_to}/.mysql_password"
|
157
|
-
rescue
|
158
|
-
return false
|
159
|
-
end
|
160
|
-
|
161
|
-
unless mysql_credentials_file.nil? or mysql_credentials_file.empty?
|
162
|
-
@mysql_credentials = {
|
163
|
-
:user => mysql_credentials_file.match(/username: (.*)$/o)[1].chomp,
|
164
|
-
:pass => mysql_credentials_file.match(/password: (.*)$/o)[1].chomp,
|
165
|
-
}
|
166
|
-
end
|
167
|
-
|
168
|
-
@mysql_credentials
|
169
|
-
end
|
170
|
-
|
171
|
-
def mysql_database_name(branch = nil)
|
172
|
-
branch ||= @config.branch
|
173
|
-
"#{@config.application}_co_#{branch}"
|
174
|
-
end
|
175
|
-
end
|
78
|
+
# desc "Copy master database to staging"
|
79
|
+
# task :replicate_master_database, :roles => :web do
|
80
|
+
# mysql_master_db_name = mysql_db_name("master")
|
81
|
+
# mysql_staging_db_name = mysql_db_name("staging")
|
82
|
+
#
|
83
|
+
# mysql_staging_db_backup_path = "#{configurations[:staging][:deploy_to]}/backups/#{mysql_staging_db_name}_#{Time.now.strftime('%d-%m-%Y_%H-%M-%S')}.sql"
|
84
|
+
#
|
85
|
+
# begin
|
86
|
+
# run <<-CMD
|
87
|
+
# mysqldump \
|
88
|
+
# --user='#{mysql_credentials[:user]}' \
|
89
|
+
# --password='#{mysql_credentials[:pass]}' \
|
90
|
+
# --default-character-set=utf8 \
|
91
|
+
# '#{mysql_staging_db_name}' > \
|
92
|
+
# '#{mysql_staging_db_backup_path}'
|
93
|
+
# CMD
|
94
|
+
#
|
95
|
+
# run <<-CMD
|
96
|
+
# bzip2 -9 '#{mysql_staging_db_backup_path}'
|
97
|
+
# CMD
|
98
|
+
#
|
99
|
+
# run <<-CMD
|
100
|
+
# mysqladmin --user='#{mysql_credentials[:user]}' --password='#{mysql_credentials[:pass]}' drop --force '#{mysql_staging_db_name}'
|
101
|
+
# CMD
|
102
|
+
# rescue
|
103
|
+
# puts "NOTICE: #{application}'s staging database does not exist, continuing under this assumption."
|
104
|
+
# end
|
105
|
+
#
|
106
|
+
# run <<-CMD
|
107
|
+
# mysqladmin --user='#{mysql_credentials[:user]}' --password='#{mysql_credentials[:pass]}' create '#{mysql_staging_db_name}'
|
108
|
+
# CMD
|
109
|
+
#
|
110
|
+
# run <<-CMD
|
111
|
+
# mysqldump \
|
112
|
+
# --user='#{mysql_credentials[:user]}' \
|
113
|
+
# --password='#{mysql_credentials[:pass]}' \
|
114
|
+
# --default-character-set=utf8 \
|
115
|
+
# '#{mysql_master_db_name}' > \
|
116
|
+
# '/tmp/#{mysql_master_db_name}.sql'
|
117
|
+
# CMD
|
118
|
+
#
|
119
|
+
# run <<-CMD
|
120
|
+
# mysql \
|
121
|
+
# --user='#{mysql_credentials[:user]}' \
|
122
|
+
# --password='#{mysql_credentials[:pass]}' \
|
123
|
+
# --default-character-set=utf8 \
|
124
|
+
# '#{mysql_staging_db_name}' < \
|
125
|
+
# /tmp/#{mysql_master_db_name}.sql
|
126
|
+
# CMD
|
127
|
+
#
|
128
|
+
# run <<-CMD
|
129
|
+
# rm -f '/tmp/#{mysql_master_db_name}.sql'
|
130
|
+
# CMD
|
131
|
+
# end
|
132
|
+
#
|
133
|
+
# desc "Copy master contents to staging"
|
134
|
+
# task :replicate_master_contents, :roles => :web do
|
135
|
+
# run <<-CMD
|
136
|
+
# cp -R #{configurations[:development][:deploy_to]}/shared/contenu #{configurations[:staging][:deploy_to]}/shared/
|
137
|
+
# CMD
|
138
|
+
# end
|
176
139
|
end
|
177
140
|
|
178
141
|
# Dependencies
|
@@ -181,11 +144,15 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
181
144
|
after "contao:setup_localconfig", "contao:setup_db"
|
182
145
|
after "deploy:finalize_update", "contao:fix_links"
|
183
146
|
after "contao:fix_links", "deploy:cleanup"
|
147
|
+
after "deploy:restart", "contao:fix_permissions"
|
184
148
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
149
|
+
# Mysql Credentials
|
150
|
+
before "contao:setup_localconfig", "mysql:credentials"
|
151
|
+
before "contao:setup_db", "mysql:credentials"
|
152
|
+
# before "contao:replicate_master_database", "mysql:credentials"
|
189
153
|
|
190
|
-
|
154
|
+
# if branch == 'staging'
|
155
|
+
# before "deploy:restart", "contao:replicate_master_database"
|
156
|
+
# after "contao:replicate_master_database", "contao:replicate_master_contents"
|
157
|
+
# end
|
191
158
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'capistrano'
|
2
|
+
require 'capistrano/technogate/base'
|
2
3
|
|
3
4
|
# Verify that Capistrano is version 2
|
4
5
|
unless Capistrano::Configuration.respond_to?(:instance)
|
@@ -6,11 +7,14 @@ unless Capistrano::Configuration.respond_to?(:instance)
|
|
6
7
|
end
|
7
8
|
|
8
9
|
Capistrano::Configuration.instance(:must_exist).load do
|
10
|
+
def mysql_db_name(local_branch = nil)
|
11
|
+
local_branch ||= branch
|
12
|
+
"#{application}_co_#{local_branch}"
|
13
|
+
end
|
14
|
+
|
9
15
|
namespace :mysql do
|
10
16
|
desc "Backup database"
|
11
17
|
task :backup_db do
|
12
|
-
mysql_credentials = TechnoGate::Contao.instance.mysql_credentials
|
13
|
-
mysql_db_name = TechnoGate::Contao.instance.mysql_database_name
|
14
18
|
MYSQL_DB_BACKUP_PATH = "#{deploy_to}/backups/#{mysql_db_name}_#{Time.now.strftime('%d-%m-%Y_%H-%M-%S')}.sql"
|
15
19
|
|
16
20
|
unless blank?(mysql_credentials)
|
@@ -30,14 +34,13 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
30
34
|
rescue
|
31
35
|
puts "WARNING: The database doesn't exist."
|
32
36
|
end
|
37
|
+
else
|
38
|
+
abort "MySQL credentials are empty"
|
33
39
|
end
|
34
40
|
end
|
35
41
|
|
36
42
|
desc "drop database"
|
37
43
|
task :drop_db do
|
38
|
-
mysql_credentials = TechnoGate::Contao.instance.mysql_credentials
|
39
|
-
mysql_db_name = TechnoGate::Contao.instance.mysql_database_name
|
40
|
-
|
41
44
|
begin
|
42
45
|
run <<-CMD
|
43
46
|
mysqladmin --user='#{mysql_credentials[:user]}' --password='#{mysql_credentials[:pass]}' drop --force '#{mysql_db_name}'
|
@@ -49,9 +52,6 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
49
52
|
|
50
53
|
desc "create database"
|
51
54
|
task :create_db do
|
52
|
-
mysql_credentials = TechnoGate::Contao.instance.mysql_credentials
|
53
|
-
mysql_db_name = TechnoGate::Contao.instance.mysql_database_name
|
54
|
-
|
55
55
|
begin
|
56
56
|
run <<-CMD
|
57
57
|
mysqladmin --user='#{mysql_credentials[:user]}' --password='#{mysql_credentials[:pass]}' create '#{mysql_db_name}'
|
@@ -63,9 +63,6 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
63
63
|
|
64
64
|
desc "Import a database dump"
|
65
65
|
task :import_db_dump do
|
66
|
-
mysql_credentials = TechnoGate::Contao.instance.mysql_credentials
|
67
|
-
mysql_db_name = TechnoGate::Contao.instance.mysql_database_name
|
68
|
-
|
69
66
|
unless ARGV.size >=2 and File.exists?(ARGV[1])
|
70
67
|
puts "ERROR: please run 'cap mysql:import_db_dump <sql dump>'"
|
71
68
|
exit 1
|
@@ -98,9 +95,6 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
98
95
|
|
99
96
|
desc "Export a database dump"
|
100
97
|
task :export_db_dump do
|
101
|
-
mysql_credentials = TechnoGate::Contao.instance.mysql_credentials
|
102
|
-
mysql_db_name = TechnoGate::Contao.instance.mysql_database_name
|
103
|
-
|
104
98
|
unless ARGV.size >=2 or File.exists?(ARGV[1])
|
105
99
|
puts "ERROR: please run 'cap mysql:import_db_dump <sql dump>'"
|
106
100
|
puts " <sql dump> should not exist"
|
@@ -125,8 +119,29 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
125
119
|
end
|
126
120
|
end
|
127
121
|
end
|
122
|
+
|
123
|
+
desc "Get Mysql credentials"
|
124
|
+
task :credentials do
|
125
|
+
unless defined?(mysql_credentials) and !blank?(mysql_credentials)
|
126
|
+
begin
|
127
|
+
mysql_credentials_file_contents = capture "cat #{mysql_credentials_file}"
|
128
|
+
rescue
|
129
|
+
set :mysql_credentials, false
|
130
|
+
end
|
131
|
+
|
132
|
+
unless mysql_credentials_file_contents.nil? or mysql_credentials_file_contents.empty?
|
133
|
+
set :mysql_credentials, {
|
134
|
+
:user => mysql_credentials_file_contents.match(mysql_credentials_user_regex)[mysql_credentials_user_regex_match].chomp,
|
135
|
+
:pass => mysql_credentials_file_contents.match(mysql_credentials_pass_regex)[mysql_credentials_pass_regex_match].chomp,
|
136
|
+
}
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
128
140
|
end
|
129
141
|
|
142
|
+
before "mysql:backup_db", "mysql:credentials"
|
143
|
+
before "mysql:drop_db", "mysql:credentials"
|
144
|
+
before "mysql:create_db", "mysql:credentials"
|
130
145
|
before "mysql:import_db_dump", "mysql:backup_db"
|
131
146
|
before "mysql:export_db_dump", "mysql:backup_db"
|
132
147
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-technogate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ default_executable:
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: capistrano
|
17
|
-
requirement: &
|
17
|
+
requirement: &2156870060 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
version: 1.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2156870060
|
26
26
|
description: This gem provides some receipts for helping me in my every-day development
|
27
27
|
email:
|
28
28
|
- wael.nasreddine@gmail.com
|
@@ -30,7 +30,6 @@ executables: []
|
|
30
30
|
extensions: []
|
31
31
|
extra_rdoc_files: []
|
32
32
|
files:
|
33
|
-
- ..gemspec
|
34
33
|
- .gitignore
|
35
34
|
- Gemfile
|
36
35
|
- Rakefile
|
data/..gemspec
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "./version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = "."
|
7
|
-
s.version = .::VERSION
|
8
|
-
s.authors = ["Wael Nasreddine"]
|
9
|
-
s.email = ["wael.nasreddine@gmail.com"]
|
10
|
-
s.homepage = ""
|
11
|
-
s.summary = %q{TODO: Write a gem summary}
|
12
|
-
s.description = %q{TODO: Write a gem description}
|
13
|
-
|
14
|
-
s.rubyforge_project = "."
|
15
|
-
|
16
|
-
s.files = `git ls-files`.split("\n")
|
17
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
-
s.require_paths = ["lib"]
|
20
|
-
end
|