Files
tehnobox/scripts/deploy.sh
ssww23 93a655235a
Some checks failed
Deploy / deploy (push) Has been cancelled
Initial commit
2026-03-10 00:55:37 +03:00

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"