73 lines
1.6 KiB
Bash
Executable File
73 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -Eeuo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
cd "$ROOT_DIR"
|
|
|
|
log() {
|
|
printf '\n[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1"
|
|
}
|
|
|
|
require_command() {
|
|
if ! command -v "$1" >/dev/null 2>&1; then
|
|
printf 'Missing required command: %s\n' "$1" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
require_command php
|
|
require_command composer
|
|
require_command npm
|
|
|
|
if [[ ! -f artisan ]]; then
|
|
printf 'artisan not found in %s\n' "$ROOT_DIR" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f .env ]]; then
|
|
printf '.env not found. Create it from .env.example and set production values before deploying.\n' >&2
|
|
exit 1
|
|
fi
|
|
|
|
maintenance_enabled=0
|
|
deploy_succeeded=0
|
|
|
|
cleanup() {
|
|
if [[ "$maintenance_enabled" -eq 1 && "$deploy_succeeded" -eq 0 ]]; then
|
|
printf '\nDeployment failed. The application remains in maintenance mode.\n' >&2
|
|
printf 'Fix the issue and run: php artisan up\n' >&2
|
|
fi
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
log "Putting the application into maintenance mode"
|
|
php artisan down --retry=60
|
|
maintenance_enabled=1
|
|
|
|
log "Installing PHP dependencies"
|
|
composer install --no-dev --prefer-dist --optimize-autoloader --no-interaction
|
|
|
|
log "Installing Node.js dependencies"
|
|
npm ci
|
|
|
|
log "Building frontend assets"
|
|
npm run build
|
|
|
|
log "Ensuring the public storage link exists"
|
|
php artisan storage:link >/dev/null 2>&1 || true
|
|
|
|
log "Running Laravel deployment tasks"
|
|
composer run deploy --no-interaction
|
|
|
|
log "Restarting queue workers if they are running"
|
|
php artisan queue:restart >/dev/null 2>&1 || true
|
|
|
|
log "Bringing the application back online"
|
|
php artisan up
|
|
maintenance_enabled=0
|
|
deploy_succeeded=1
|
|
|
|
log "Deployment completed successfully"
|