capistrano-technogate 0.0.1 → 0.1.0
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.
- 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
|