|
1
|
|
|
<?php |
|
2
|
|
|
/** https://deployer.org/ |
|
3
|
|
|
* |
|
4
|
|
|
* Call via: dep -f=_scripts/deploy.php deploy |
|
5
|
|
|
* |
|
6
|
|
|
*/ |
|
7
|
|
|
namespace Deployer; |
|
8
|
|
|
|
|
9
|
|
|
if(basename(getcwd()) !== 'manga-tracker') die('Bad CWD: Call from manga-tracker with dep -f=_scripts/deploy.php deploy'); |
|
10
|
|
|
|
|
11
|
|
|
require 'recipe/cachetool.php'; //requires deployer/recipes |
|
12
|
|
|
require 'recipe/codeigniter.php'; |
|
13
|
|
|
|
|
14
|
|
|
// Project name |
|
15
|
|
|
set('application', 'trackr.moe'); |
|
16
|
|
|
|
|
17
|
|
|
// Project repository |
|
18
|
|
|
set('repository', '[email protected]:DakuTree/manga-tracker.git'); |
|
19
|
|
|
|
|
20
|
|
|
// [Optional] Allocate tty for git clone. Default value is false. |
|
21
|
|
|
set('git_tty', FALSE); |
|
22
|
|
|
|
|
23
|
|
|
// Fix bug on windows |
|
24
|
|
|
set('ssh_multiplexing', false); |
|
25
|
|
|
|
|
26
|
|
|
set('clear_paths', [ |
|
27
|
|
|
'.docker', |
|
28
|
|
|
'.git', |
|
29
|
|
|
'.github', |
|
30
|
|
|
'.idea' |
|
31
|
|
|
]); |
|
32
|
|
|
|
|
33
|
|
|
add('copy_files', [ |
|
34
|
|
|
'_scripts/config.ini', |
|
35
|
|
|
'application/config/_secure/email.php', |
|
36
|
|
|
'application/config/_secure/mailgun.php', |
|
37
|
|
|
'application/config/_secure/monolog.php', |
|
38
|
|
|
'application/config/_secure/recaptcha.php', |
|
39
|
|
|
'application/config/_secure/sites.php', |
|
40
|
|
|
'application/config/production/database_password.php' |
|
41
|
|
|
]); |
|
42
|
|
|
add('shared_dirs', []); |
|
43
|
|
|
|
|
44
|
|
|
// Writable dirs by web server |
|
45
|
|
|
add('writable_dirs', []); |
|
46
|
|
|
|
|
47
|
|
|
set('allow_anonymous_stats', false); |
|
48
|
|
|
|
|
49
|
|
|
// Hosts |
|
50
|
|
|
host('trackr.moe') |
|
51
|
|
|
->user('deployer') |
|
52
|
|
|
->identityFile('~/.ssh/deploy.ppk') |
|
53
|
|
|
->set('deploy_path', '/var/www/trackr.moe'); |
|
54
|
|
|
|
|
55
|
|
|
// Tasks |
|
56
|
|
|
//task('deploy:symlink', function() {}); //Uncomment when testing. |
|
57
|
|
|
//task('cleanup', function() {}); //Uncomment when testing. |
|
58
|
|
|
|
|
59
|
|
|
task('deploy:compile_assets', function() { |
|
60
|
|
|
// less |
|
61
|
|
|
//// themes |
|
62
|
|
|
writeln('➤➤ <comment>Compiling Themes</comment>'); |
|
63
|
|
|
runS('( \ |
|
64
|
|
|
cd {{release_path}}/public/assets/less && \ |
|
65
|
|
|
exec lessc \ |
|
66
|
|
|
--csscomb \ |
|
67
|
|
|
--modify-var=themeLocation=common\\\\themes\\\\light \ |
|
68
|
|
|
main.less \ |
|
69
|
|
|
../css/main.light.css \ |
|
70
|
|
|
)'); |
|
71
|
|
|
runS('( \ |
|
72
|
|
|
cd {{release_path}}/public/assets/less && \ |
|
73
|
|
|
exec lessc \ |
|
74
|
|
|
--csscomb \ |
|
75
|
|
|
--modify-var=themeLocation=common\\\\themes\\\\dark \ |
|
76
|
|
|
main.less \ |
|
77
|
|
|
../css/main.dark.css \ |
|
78
|
|
|
)'); |
|
79
|
|
|
//// userscript css |
|
80
|
|
|
writeln('➤➤ <comment>Compiling Userscript CSS</comment>'); |
|
81
|
|
|
runS('( \ |
|
82
|
|
|
cd {{release_path}}/public/userscripts/assets/ && \ |
|
83
|
|
|
exec lessc \ |
|
84
|
|
|
--csscomb \ |
|
85
|
|
|
main.less \ |
|
86
|
|
|
main.css \ |
|
87
|
|
|
)'); |
|
88
|
|
|
|
|
89
|
|
|
//js |
|
90
|
|
|
writeln('➤➤ <comment>Compiling JavaScript</comment>'); |
|
91
|
|
|
runS('( \ |
|
92
|
|
|
cd {{release_path}}/public/assets/js && \ |
|
93
|
|
|
exec google-closure-compiler-js \ |
|
94
|
|
|
--compilationLevel SIMPLE_OPTIMIZATIONS \ |
|
95
|
|
|
{{release_path}}/public/assets/js/main.js \ |
|
96
|
|
|
{{release_path}}/public/assets/js/pages/*.js \ |
|
97
|
|
|
> {{release_path}}/public/assets/js/compiled.min.js \ |
|
98
|
|
|
)'); |
|
99
|
|
|
|
|
100
|
|
|
//icons |
|
101
|
|
|
writeln('➤➤ <comment>Compiling Icons</comment>'); |
|
102
|
|
|
runS('( \ |
|
103
|
|
|
cd {{release_path}} && \ |
|
104
|
|
|
php -r "include \'_scripts/SpritesheetGenerator.php\'; (new SpriteSheet(\'site\', FALSE))->generate();" && \ |
|
105
|
|
|
php -r "include \'_scripts/SpritesheetGenerator.php\'; (new SpriteSheet(\'time\', FALSE))->generate();" |
|
106
|
|
|
)'); |
|
107
|
|
|
|
|
108
|
|
|
// userscript .meta.js |
|
109
|
|
|
writeln('➤➤ <comment>Compiling Userscript .meta.js</comment>'); |
|
110
|
|
|
runS('( \ |
|
111
|
|
|
cd {{release_path}} && \ |
|
112
|
|
|
userscript-utils get-updateblock -du -i public/userscripts/manga-tracker.user.js -o public/userscripts/manga-tracker.meta.js \ |
|
113
|
|
|
)'); |
|
114
|
|
|
// userscript version constant |
|
115
|
|
|
writeln('➤➤ <comment>Tweaking Userscript Version Constant</comment>'); |
|
116
|
|
|
runS('( \ |
|
117
|
|
|
cd {{release_path}} && \ |
|
118
|
|
|
USERSCRIPT_VERSION=$(grep -oP \'@version[\s]*\K([0-9\.]+)\' public/userscripts/manga-tracker.meta.js); \ |
|
119
|
|
|
sed -i -r "s/define\(\'USERSCRIPT_VERSION\', \'[0-9\.]+\'\);/define\(\'USERSCRIPT_VERSION\', \'$USERSCRIPT_VERSION\'\);/g" application/config/constants.php \ |
|
120
|
|
|
)'); |
|
121
|
|
|
}); |
|
122
|
|
|
|
|
123
|
|
|
task('deploy:copy_files', function () { |
|
124
|
|
|
$sharedPath = '{{deploy_path}}/shared'; |
|
125
|
|
|
foreach (get('copy_files') as $file) { |
|
126
|
|
|
$dirname = dirname(parse($file)); |
|
127
|
|
|
// Create dir of shared file |
|
128
|
|
|
runS("mkdir -p $sharedPath/" . $dirname); |
|
129
|
|
|
// Check if shared file does not exist in shared. |
|
130
|
|
|
// and file exist in release |
|
131
|
|
|
if (!test("[ -f $sharedPath/$file ]") && test("[ -f {{release_path}}/$file ]")) { |
|
132
|
|
|
// Copy file in shared dir if not present |
|
133
|
|
|
runS("cp -rv {{release_path}}/$file $sharedPath/$file"); |
|
134
|
|
|
} |
|
135
|
|
|
// Remove from source. |
|
136
|
|
|
runS("if [ -f $(echo {{release_path}}/$file) ]; then rm -rf {{release_path}}/$file; fi"); |
|
137
|
|
|
// Ensure dir is available in release |
|
138
|
|
|
runS("if [ ! -d $(echo {{release_path}}/$dirname) ]; then mkdir -p {{release_path}}/$dirname;fi"); |
|
139
|
|
|
// Touch shared |
|
140
|
|
|
runS("touch $sharedPath/$file"); |
|
141
|
|
|
|
|
142
|
|
|
runS("cp $sharedPath/$file {{release_path}}/$file"); |
|
143
|
|
|
} |
|
144
|
|
|
}); |
|
145
|
|
|
|
|
146
|
|
|
task('deploy:migrate_db', function () { |
|
147
|
|
|
// Migration is disabled by default on production, so we need to toggle it temporally. |
|
148
|
|
|
runS('( \ |
|
149
|
|
|
cd {{release_path}} && \ |
|
150
|
|
|
sed -i -r "s/(migration_enabled.*?)FALSE/\1TRUE/g" application/config/production/migration.php && \ |
|
151
|
|
|
CI_ENV="production" php public/index.php admin/migrate && \ |
|
152
|
|
|
sed -i -r "s/(migration_enabled.*?)TRUE/\1FALSE/g" application/config/production/migration.php \ |
|
153
|
|
|
)'); |
|
154
|
|
|
}); |
|
155
|
|
|
|
|
156
|
|
|
task('deploy:maintenance_enable', function () { |
|
157
|
|
|
//define('MAINTENANCE', FALSE); |
|
158
|
|
|
runS('( \ |
|
159
|
|
|
cd {{previous_release}} && \ |
|
160
|
|
|
sed -i -r "s/(\'MAINTENANCE\',) FALSE/\1 TRUE/" public/index.php \ |
|
161
|
|
|
)'); |
|
162
|
|
|
runS('( \ |
|
163
|
|
|
cd {{release_path}} && \ |
|
164
|
|
|
sed -i -r "s/(\'MAINTENANCE\',) FALSE/\1 TRUE/" public/index.php \ |
|
165
|
|
|
)'); |
|
166
|
|
|
}); |
|
167
|
|
|
task('deploy:maintenance_disable', function () { |
|
168
|
|
|
//define('MAINTENANCE', FALSE); |
|
169
|
|
|
runS('( \ |
|
170
|
|
|
cd {{release_path}} && \ |
|
171
|
|
|
sed -i -r "s/(\'MAINTENANCE\',) TRUE/\1 FALSE/" public/index.php \ |
|
172
|
|
|
)'); |
|
173
|
|
|
}); |
|
174
|
|
|
|
|
175
|
|
|
// Events |
|
176
|
|
|
after('deploy:vendors', 'deploy:compile_assets'); |
|
177
|
|
|
after('deploy:vendors', 'deploy:clear_paths'); |
|
178
|
|
|
|
|
179
|
|
|
after('deploy:shared', 'deploy:copy_files'); |
|
180
|
|
|
|
|
181
|
|
|
before('deploy:symlink', 'deploy:maintenance_enable'); |
|
182
|
|
|
after('deploy:maintenance_enable', 'cachetool:clear:opcache'); |
|
183
|
|
|
after('deploy:symlink', 'deploy:migrate_db'); |
|
184
|
|
|
|
|
185
|
|
|
after('deploy', 'deploy:maintenance_disable'); |
|
186
|
|
|
after('deploy:maintenance_disable', 'cachetool:clear:opcache'); |
|
187
|
|
|
after('deploy:failed', 'deploy:unlock'); // [Optional] if deploy fails automatically unlock. |
|
188
|
|
|
|
|
189
|
|
|
//TODO: After deploy:success, ask if we want to send a tweet and/or update notices? |
|
190
|
|
|
// https://deployer.org/docs/api |
|
191
|
|
|
|
|
192
|
|
|
function runS(string $runCommand) : void { |
|
193
|
|
|
$runCommand = preg_replace("/\r\n/", "\n", $runCommand); |
|
194
|
|
|
run($runCommand); |
|
195
|
|
|
} |
|
196
|
|
|
|