2024-10-16 08:20:07 +02:00
< ? php
2024-10-16 16:11:48 +02:00
2024-10-30 14:46:31 +01:00
namespace Deployer ;
2024-10-17 08:54:34 +02:00
desc ( 'run all database migrations' );
2024-11-02 14:26:44 +01:00
task ( 'oxid:runMigration' , [
'oxid:setShopsOffline' ,
'oxid:executeMigrations' ,
'oxid:setShopsOnline'
2024-10-16 16:11:48 +02:00
]);
2024-10-16 23:22:22 +02:00
2024-11-01 21:49:52 +01:00
2024-10-31 21:21:54 +01:00
require_once 'inc/database.php' ;
2024-10-16 23:22:22 +02:00
desc ( 'set shops offline' );
2024-11-02 14:26:44 +01:00
task ( 'oxid:setShopsOffline' , function () {
2024-10-31 21:21:54 +01:00
if ( get ( 'mysql_configured' )) {
2024-10-16 23:22:22 +02:00
$query = " UPDATE oxshops SET oxactive = '0', OXREGISTERSUBJECT = CONCAT('..', OXREGISTERSUBJECT) WHERE oxactive = '1'; " ;
2024-11-01 21:49:52 +01:00
run ( '{{bin/mysql}} --defaults-extra-file={{db_conf_path}} -e "' . $query . '"' );
2024-10-16 23:22:22 +02:00
} else {
2024-10-29 11:28:04 +01:00
warning ( 'missing config, task skipped' );
2024-10-16 23:22:22 +02:00
}
2024-10-17 08:54:34 +02:00
});
2024-10-16 23:22:22 +02:00
2024-11-02 14:26:44 +01:00
task ( 'oxid:runMigration:failed' , function () {
invoke ( 'oxid:setShopsOnline' );
2024-10-17 09:14:26 +02:00
}) -> hidden ();
2024-11-02 14:26:44 +01:00
fail ( 'oxid:runMigration' , 'oxid:runMigration:failed' );
2024-10-17 09:14:26 +02:00
desc ( 'execute OXID Doctrine migrations' );
2024-11-02 14:26:44 +01:00
task ( 'oxid:executeMigrations' , function () {
2024-10-17 09:14:26 +02:00
if ( test ( " [ -f { { current_path}}/vendor/bin/oe-eshop-doctrine_migration ] " )) {
run ( '{{bin/php}} {{current_path}}/vendor/bin/oe-eshop-doctrine_migration migrations:migrate' );
}
2024-10-25 10:29:42 +02:00
}) -> hidden ();;
2024-10-17 09:14:26 +02:00
2024-10-16 23:22:22 +02:00
desc ( 'set shops online' );
2024-11-02 14:26:44 +01:00
task ( 'oxid:setShopsOnline' , function () {
2024-10-31 21:21:54 +01:00
if ( get ( 'mysql_configured' )) {
2024-10-16 23:22:22 +02:00
$query = " UPDATE oxshops SET oxactive = '1', OXREGISTERSUBJECT = SUBSTR(OXREGISTERSUBJECT, 3) WHERE oxactive = '0' AND OXREGISTERSUBJECT LIKE '..%'; " ;
2024-11-01 21:49:52 +01:00
run ( '{{bin/mysql}} --defaults-extra-file={{db_conf_path}} -e "' . $query . '"' );
2024-10-16 23:22:22 +02:00
} else {
2024-10-29 11:28:04 +01:00
warning ( 'missing config, task skipped' );
2024-10-16 23:22:22 +02:00
}
2024-10-17 08:54:34 +02:00
});
2024-10-29 11:28:04 +01:00
desc ( 'show version of current OXID installation' );
2024-11-02 14:26:44 +01:00
task ( 'oxid:getVersion' , function () {
2024-10-25 09:47:07 +02:00
if ( test ( " [ -f { { current_path}}/composer.lock ] " )) {
cd ( '{{current_path}}' );
info (
run (
'{{bin/composer}} show oxid-esales/oxideshop-ce | grep -ws "versions" | cut -d " " -f 4'
)
);
}
});
2024-10-29 11:28:04 +01:00
desc ( 'dump contents from source to destination database' );
2024-11-02 14:26:44 +01:00
task ( 'oxid:cloneDatabase' , function () {
2024-10-31 21:21:54 +01:00
if ( get ( 'mysql_configured' ) && get ( 'mysqldump_configured' )) {
2024-10-29 11:28:04 +01:00
info ( 'Note: Use a dedicated read only user for accessing the source database.' );
info ( 'Using the following source database:' );
$source_host = ask ( 'source database host' , 'localhost' );
$source_port = ask ( 'source database port' , '3306' );
$source_name = ask ( 'source database name' );
$source_user = ask ( 'source database user' );
$source_pass = askHiddenResponse ( 'source database password' );
2024-11-01 21:49:52 +01:00
$target_name = parse_ini_file ( get ( 'db_conf_path' ))[ 'database' ];
if ( askConfirmation ( 'Do you really want to clone from "' . $source_name . '" to "' . $target_name . '"? The target database "' . $target_name . '" will be overwritten!' )) {
2024-10-29 11:28:04 +01:00
info ( 'cloning database' );
$auth = " -h " . $source_host . " -P " . $source_port . " -u " . $source_user . " -p' " . $source_pass . " ' " ;
2024-11-01 21:49:52 +01:00
run ( " { { bin/mysqldump}} " . $auth . " --opt --no-create-db -f " . $source_name . " $ ( { { bin/mysql}} " . $auth . " -ANe \" SET group_concat_max_len = 10485760; SELECT GROUP_CONCAT(table_name SEPARATOR ' ') FROM information_schema.tables WHERE table_schema=' " . $source_name . " ' AND engine IS NOT NULL; \" ) | { { bin/mysql}} --defaults-extra-file= { { db_conf_path}} -f " );
2024-10-29 11:42:02 +01:00
info ( 'creating views' );
run ( '{{release_or_current_path}}/vendor/bin/oe-eshop-db_views_regenerate' );
info ( 'successfully finished' );
2024-10-29 11:28:04 +01:00
} else {
info ( 'abborted' );
}
} else {
warning ( 'missing config, task skipped' );
}
});
2024-11-01 23:49:52 +01:00
desc ( 'rotate old database backups and create a new one' );
2024-11-02 14:26:44 +01:00
task ( 'oxid:backupDatabase' , function () {
2024-11-01 23:49:52 +01:00
if ( get ( 'mysql_configured' ) && get ( 'mysqldump_configured' )) {
if ( ! test ( " [ -f { { deploy_path}}/database/rotatemap.conf ] " )) {
run ( 'printf "{{deploy_path}}/database/backup/backup.sql {\n rotate 5\n}" > {{deploy_path}}/database/rotatemap.conf' );
}
if ( ! test ( " [ -d { { deploy_path}}/database/backup ] " )) {
run ( " mkdir -p { { deploy_path}}/database/backup " );
}
$source_name = parse_ini_file ( get ( 'db_conf_path' ))[ 'database' ];
if ( test ( " [ -f { { deploy_path}}/database/backup/backup.sql ] " )) {
run ( " logrotate -f -s { { deploy_path}}/database/rotatemap.state { { deploy_path}}/database/rotatemap.conf " );
}
run ( " { { bin/mysqldump}} --defaults-extra-file= { { db_conf_path}} --opt --no-create-db -f " . $source_name . " $ ( { { bin/mysql}} --defaults-extra-file= { { db_conf_path}} -ANe \" SET group_concat_max_len = 10485760; SELECT GROUP_CONCAT(table_name SEPARATOR ' ') FROM information_schema.tables WHERE table_schema=' " . $source_name . " ' AND engine IS NOT NULL; \" ) > { { deploy_path}}/database/backup/backup.sql " );
info ( 'successfully dumped to {{deploy_path}}/database/backup/backup.sql' );
} else {
warning ( 'missing config, task skipped' );
}
});