Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
* Add ability to run vite bundler in warden for Laravel. See: [Laravel + Vite](https://docs.warden.dev/environments/laravel.html) ([#846](https://github.com/wardenenv/warden/issues/846) by @bap14)
* Added Valkey service ([#861](https://github.com/wardenenv/warden#861) by @navarr)
* Added `warden db upgrade` command ([#895](https://github.com/wardenenv/warden/pull/895) by @workslop8264)
* Added Postgres support for `warden db` (`connect`, `import`, `dump`)

**Bug Fixes:**
* System-level SSL certificates are no longer overwritten ([#812](https://github.com/wardenenv/warden/pull/812) by @SamJUK)
Expand Down
56 changes: 33 additions & 23 deletions commands/db.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -13,48 +13,58 @@ if (( ${#WARDEN_PARAMS[@]} == 0 )) || [[ "${WARDEN_PARAMS[0]}" == "help" ]]; the
$WARDEN_BIN db --help || exit $? && exit $?
fi

## load connection information for the mysql service
## load connection information for the database service
DB_CONTAINER=$($WARDEN_BIN env ps -q db)
if [[ ! ${DB_CONTAINER} ]]; then
fatal "No container found for db service."
fi

eval "$(
## detect database type and load appropriate connection variables
DB_ENV_OUTPUT="$(
docker container inspect ${DB_CONTAINER} --format '
{{- range .Config.Env }}{{with split . "=" -}}
{{- index . 0 }}='\''{{ range $i, $v := . }}{{ if $i }}{{ $v }}{{ end }}{{ end }}'\''{{println}}
{{- end }}{{ end -}}
' | grep "^MYSQL_"
'
)"

DB_TYPE="mysql"
if echo "${DB_ENV_OUTPUT}" | grep -q "^POSTGRES_"; then
DB_TYPE="postgres"
fi

eval "$(echo "${DB_ENV_OUTPUT}" | grep "^${DB_TYPE^^}_")"

## sub-command execution
case "${WARDEN_PARAMS[0]}" in
connect)
"$WARDEN_BIN" env exec db \
mysql -u"${MYSQL_USER}" -p"${MYSQL_PASSWORD}" --database="${MYSQL_DATABASE}" "${WARDEN_PARAMS[@]:1}" "$@"
if [[ "${DB_TYPE}" == "postgres" ]]; then
PGPASSWORD="${POSTGRES_PASSWORD}" "$WARDEN_BIN" env exec db \
psql -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" "${WARDEN_PARAMS[@]:1}" "$@"
else
"$WARDEN_BIN" env exec db \
mysql -u"${MYSQL_USER}" -p"${MYSQL_PASSWORD}" --database="${MYSQL_DATABASE}" "${WARDEN_PARAMS[@]:1}" "$@"
fi
;;
import)
LC_ALL=C sed -E 's/DEFINER[ ]*=[ ]*`[^`]+`@`[^`]+`/DEFINER=CURRENT_USER/g' \
| LC_ALL=C sed -E '/\@\@(GLOBAL\.GTID_PURGED|SESSION\.SQL_LOG_BIN)/d' \
| "$WARDEN_BIN" env exec -T db \
mysql -u"${MYSQL_USER}" -p"${MYSQL_PASSWORD}" --database="${MYSQL_DATABASE}" "${WARDEN_PARAMS[@]:1}" "$@"
if [[ "${DB_TYPE}" == "postgres" ]]; then
PGPASSWORD="${POSTGRES_PASSWORD}" "$WARDEN_BIN" env exec -T db \
psql -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" "${WARDEN_PARAMS[@]:1}" "$@"
else
LC_ALL=C sed -E 's/DEFINER[ ]*=[ ]*`[^`]+`@`[^`]+`/DEFINER=CURRENT_USER/g' \
| LC_ALL=C sed -E '/\@\@(GLOBAL\.GTID_PURGED|SESSION\.SQL_LOG_BIN)/d' \
| "$WARDEN_BIN" env exec -T db \
mysql -u"${MYSQL_USER}" -p"${MYSQL_PASSWORD}" --database="${MYSQL_DATABASE}" "${WARDEN_PARAMS[@]:1}" "$@"
fi
;;
dump)
if [[ "${DB_TYPE}" == "postgres" ]]; then
PGPASSWORD="${POSTGRES_PASSWORD}" "$WARDEN_BIN" env exec -T db \
pg_dump -U "${POSTGRES_USER}" "${POSTGRES_DB:-${POSTGRES_USER}}" "${WARDEN_PARAMS[@]:1}" "$@"
else
"$WARDEN_BIN" env exec -T db \
mysqldump -u"${MYSQL_USER}" -p"${MYSQL_PASSWORD}" "${MYSQL_DATABASE}" "${WARDEN_PARAMS[@]:1}" "$@"
;;
upgrade)
if [ "$MYSQL_DISTRIBUTION" == "mysql" ]; then
upgradeCmd="mysql_upgrade"
elif [ "$MYSQL_DISTRIBUTION" == "mariadb" ]; then
upgradeCmd="mariadb-upgrade"
else
fatal "The upgrade command only supports MySQL and MariaDB installations."
exit 1
fi

"$WARDEN_BIN" env exec -T db \
${upgradeCmd} -p"${MYSQL_ROOT_PASSWORD}"
mysqldump -u"${MYSQL_USER}" -p"${MYSQL_PASSWORD}" "${MYSQL_DATABASE}" "${WARDEN_PARAMS[@]:1}" "$@"
fi
;;
*)
fatal "The command \"${WARDEN_PARAMS[0]}\" does not exist. Please use --help for usage."
Expand Down