173 lines
5.4 KiB
Bash
173 lines
5.4 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
create_database() {
|
|
local db_name="$1"
|
|
local silent=${2:-false}
|
|
|
|
if [ "$silent" = false ]; then
|
|
echo "[vmangos-deploy]: Creating database '$db_name'"
|
|
fi
|
|
|
|
mariadb -u root -p"$MARIADB_ROOT_PASSWORD" -e \
|
|
"CREATE DATABASE IF NOT EXISTS \`$db_name\` DEFAULT CHARSET utf8 COLLATE utf8_general_ci;"
|
|
}
|
|
|
|
drop_database() {
|
|
local db_name="$1"
|
|
local silent=${2:-false}
|
|
|
|
if [ "$silent" = false ]; then
|
|
echo "[vmangos-deploy]: Dropping database '$db_name'"
|
|
fi
|
|
|
|
mariadb -u root -p"$MARIADB_ROOT_PASSWORD" -e \
|
|
"DROP DATABASE IF EXISTS \`$db_name\`;"
|
|
}
|
|
|
|
grant_permissions() {
|
|
local db_name="$1"
|
|
local silent=${2:-false}
|
|
|
|
if [ "$silent" = false ]; then
|
|
echo "[vmangos-deploy]: Granting permissions to database user '$MARIADB_USER' for database '$db_name'"
|
|
fi
|
|
|
|
mariadb -u root -p"$MARIADB_ROOT_PASSWORD" -e \
|
|
"GRANT ALL ON \`$db_name\`.* TO '$MARIADB_USER'@'%'; \
|
|
FLUSH PRIVILEGES;"
|
|
}
|
|
|
|
import_data() {
|
|
local db_name="$1"
|
|
local file="$2"
|
|
|
|
mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "$db_name" < "$file"
|
|
return $?
|
|
}
|
|
|
|
import_dump() {
|
|
local db_name="$1"
|
|
local dump_file="$2"
|
|
|
|
echo "[vmangos-deploy]: Importing initial data for database '$db_name'"
|
|
|
|
import_data "$db_name" "$dump_file"
|
|
return $?
|
|
}
|
|
|
|
import_updates() {
|
|
local db_name="$1"
|
|
local update_file="$2"
|
|
|
|
if [ ! -e "$update_file" ]; then
|
|
# The update file not existing is not an error, so we return 0 (success)
|
|
# here
|
|
return 0
|
|
fi
|
|
|
|
echo "[vmangos-deploy]: Importing potential updates for database '$db_name'"
|
|
|
|
import_data "$db_name" "$update_file"
|
|
return $?
|
|
}
|
|
|
|
configure_realm() {
|
|
echo "[vmangos-deploy]: Configuring realm '$VMANGOS_REALMLIST_NAME'"
|
|
|
|
mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "realmd" -e \
|
|
"INSERT INTO \`realmlist\` (\`name\`, \`address\`, \`port\`, \`icon\`, \`timezone\`, \`allowedSecurityLevel\`) VALUES ('$VMANGOS_REALMLIST_NAME', '$VMANGOS_REALMLIST_ADDRESS', '$VMANGOS_REALMLIST_PORT', '$VMANGOS_REALMLIST_ICON', '$VMANGOS_REALMLIST_TIMEZONE', '$VMANGOS_REALMLIST_ALLOWED_SECURITY_LEVEL');"
|
|
}
|
|
|
|
create_world_db_corrections_table() {
|
|
mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "maintenance" -e \
|
|
"CREATE TABLE IF NOT EXISTS \`world_db_corrections\` ( \
|
|
\`id\` INT NOT NULL, \
|
|
\`reason\` VARCHAR(255) NOT NULL, \
|
|
\`date\` DATE NOT NULL, \
|
|
\`is_applied\` BOOLEAN NOT NULL DEFAULT FALSE, \
|
|
PRIMARY KEY (\`id\`) \
|
|
);"
|
|
}
|
|
|
|
populate_world_db_corrections_table() {
|
|
mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "maintenance" -e \
|
|
"INSERT INTO \`world_db_corrections\` (\`id\`, \`reason\`, \`date\`) \
|
|
SELECT 1, 'migration edits in vmangos/core@fe6fcb4', '2025-02-22' \
|
|
WHERE NOT EXISTS ( \
|
|
SELECT 1 FROM \`world_db_corrections\` WHERE \`id\` = 1 \
|
|
); \
|
|
INSERT INTO \`world_db_corrections\` (\`id\`, \`reason\`, \`date\`) \
|
|
SELECT 2, 'migration edits in vmangos/core@9e6d4ac', '2025-02-23' \
|
|
WHERE NOT EXISTS ( \
|
|
SELECT 2 FROM \`world_db_corrections\` WHERE \`id\` = 2 \
|
|
); \
|
|
INSERT INTO \`world_db_corrections\` (\`id\`, \`reason\`, \`date\`) \
|
|
SELECT 3, 'migration edits in vmangos/core@07c7832', '2025-02-25' \
|
|
WHERE NOT EXISTS ( \
|
|
SELECT 3 FROM \`world_db_corrections\` WHERE \`id\` = 3 \
|
|
); \
|
|
INSERT INTO \`world_db_corrections\` (\`id\`, \`reason\`, \`date\`) \
|
|
SELECT 4, 'migration edits in vmangos/core@f485dfa', '2025-03-22' \
|
|
WHERE NOT EXISTS ( \
|
|
SELECT 4 FROM \`world_db_corrections\` WHERE \`id\` = 4 \
|
|
); \
|
|
INSERT INTO \`world_db_corrections\` (\`id\`, \`reason\`, \`date\`) \
|
|
SELECT 5, 'migration edits in vmangos/core@33fcf97', '2025-07-05' \
|
|
WHERE NOT EXISTS ( \
|
|
SELECT 5 FROM \`world_db_corrections\` WHERE \`id\` = 5 \
|
|
);"
|
|
}
|
|
|
|
check_if_world_db_correction_is_required() {
|
|
local result=$(mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "maintenance" -N -s -e \
|
|
"WITH
|
|
db_creation AS (
|
|
SELECT DATE(CONVERT_TZ(MIN(\`CREATE_TIME\`), @@session.time_zone, '+00:00')) as world_db_created_at
|
|
FROM \`INFORMATION_SCHEMA\`.\`TABLES\`
|
|
WHERE \`TABLE_SCHEMA\` = 'mangos'
|
|
),
|
|
latest_correction AS (
|
|
SELECT DATE(\`date\`) as correction_date, \`reason\`, \`is_applied\`
|
|
FROM \`world_db_corrections\`
|
|
WHERE \`id\` = (SELECT MAX(\`id\`) FROM \`world_db_corrections\`)
|
|
)
|
|
SELECT CONCAT_WS('|',
|
|
IF(
|
|
NOT \`is_applied\` AND correction_date >= world_db_created_at,
|
|
'true',
|
|
'false'
|
|
),
|
|
\`reason\`
|
|
)
|
|
FROM latest_correction, db_creation;")
|
|
echo "$result"
|
|
}
|
|
|
|
mark_world_db_corrections_as_applied() {
|
|
mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "maintenance" -e \
|
|
"UPDATE \`world_db_corrections\` SET \`is_applied\` = true;"
|
|
}
|
|
|
|
process_custom_sql() {
|
|
local file_directory="$1"
|
|
|
|
if [ ! -d "$file_directory" ]; then
|
|
echo "[vmangos-deploy]: WARNING: Custom SQL file directory '$file_directory' does not exist" >&2
|
|
return 0
|
|
fi
|
|
|
|
file_count=$(find "$file_directory" -name "*.sql" -type f | wc -l)
|
|
echo "[vmangos-deploy]: Found $file_count custom SQL file(s) to process"
|
|
|
|
if [ "$file_count" -gt 0 ]; then
|
|
find "$file_directory" -name "*.sql" -type f | sort | while read -r sql_file; do
|
|
echo "[vmangos-deploy]: Processing custom SQL file '$(basename "$sql_file")'"
|
|
|
|
import_data "mangos" "$sql_file"
|
|
if [ $? -ne 0 ]; then
|
|
echo "[vmangos-deploy]: ERROR: Failed to process custom SQL file '$(basename "$sql_file")'" >&2
|
|
fi
|
|
done
|
|
fi
|
|
}
|