浏览代码

quick take on applying migrations automatically

Christian Winther 1 年之前
父节点
当前提交
6edf266a14

+ 3 - 0
contrib/docker-compose/.env

@@ -19,6 +19,9 @@ DOCKER_TAG="branch-jippi-fork-apache-8.1"
 # See: https://www.php.net/manual/en/timezones.php
 TZ="UTC"
 
+# Automatically run [artisan migrate --force] if new migrations are detected
+DOCKER_APPLY_NEW_MIGRATIONS_AUTOMATICALLY="0"
+
 ###############################################################
 # Pixelfed application configuration
 ###############################################################

+ 24 - 2
contrib/docker/shared/root/docker/entrypoint.d/12-migrations.sh

@@ -3,7 +3,29 @@ source /docker/helpers.sh
 
 entrypoint-set-script-name "$0"
 
+# Allow automatic applying of outstanding/new migrations on startup
+: ${DOCKER_APPLY_NEW_MIGRATIONS_AUTOMATICALLY:=0}
+
+if [[ $DOCKER_APPLY_NEW_MIGRATIONS_AUTOMATICALLY -eq 0 ]]; then
+    log-info "Automatic applying of new database migrations is disabled"
+    log-info "Please set [DOCKER_APPLY_NEW_MIGRATIONS_AUTOMATICALLY=1] in your [.env] file to enable this."
+
+    exit 0
+fi
+
+# Wait for the database to be ready
 await-database-ready
 
-declare new_migrations=0
-run-as-runtime-user php artisan migrate:status | grep No && migrations=yes || migrations=no
+# Detect if we have new migrations
+declare -i new_migrations=0
+run-as-runtime-user php artisan migrate:status | grep No && new_migrations=1
+
+if [[ $new_migrations -eq 0 ]]; then
+    log-info "No outstanding migrations detected"
+
+    exit 0
+fi
+
+log-warning "New migrations available, will automatically apply them now"
+
+run-as-runtime-user php artisan migrate --force

+ 3 - 0
contrib/docker/shared/root/docker/helpers.sh

@@ -29,6 +29,9 @@ declare -g docker_once_path="${docker_state_path}/once"
 
 declare -g runtime_username=$(id -un ${RUNTIME_UID})
 
+# We should already be in /var/www, but just to be explicit
+cd /var/www || log-error-and-exit "could not change to /var/www"
+
 # @description Restore the log prefix to the previous value that was captured in [entrypoint-set-script-name ]
 # @arg $1 string The name (or path) of the entrypoint script being run
 function entrypoint-set-script-name() {