Files

93 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$APP_DIR"
PHP_BIN="${PHP_BIN:-php}"
COMPOSER_BIN="${COMPOSER_BIN:-composer}"
NPM_BIN="${NPM_BIN:-npm}"
APP_ENVIRONMENT="${APP_ENVIRONMENT:-production}"
RUN_SEED="${RUN_SEED:-false}"
INSTALL_NODE_MODULES="${INSTALL_NODE_MODULES:-true}"
COMPOSER_FLAGS_DEFAULT="--no-dev --optimize-autoloader"
COMPOSER_FLAGS="${COMPOSER_FLAGS:-$COMPOSER_FLAGS_DEFAULT}"
if [[ "$APP_ENVIRONMENT" != "production" ]]; then
COMPOSER_FLAGS="${COMPOSER_FLAGS_NON_PROD:-}"
fi
log() {
printf '\n[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1"
}
abort() {
printf '\n[ERROR] %s\n' "$1" >&2
exit 1
}
require_cmd() {
command -v "$1" >/dev/null 2>&1 || abort "Command not found: $1"
}
log "Memulai deploy di: $APP_DIR"
require_cmd "$PHP_BIN"
require_cmd "$COMPOSER_BIN"
require_cmd "$NPM_BIN"
[[ -f artisan ]] || abort "File artisan tidak ditemukan. Pastikan script dijalankan dari root project Laravel."
[[ -f .env ]] || abort "File .env tidak ditemukan. Copy .env.example menjadi .env terlebih dahulu."
log "Menampilkan versi tool"
$PHP_BIN -v | head -n 1
$COMPOSER_BIN --version
$NPM_BIN --version
log "Install/update dependency Composer"
if [[ -n "$COMPOSER_FLAGS" ]]; then
$COMPOSER_BIN install $COMPOSER_FLAGS
else
$COMPOSER_BIN install
fi
if [[ "$INSTALL_NODE_MODULES" == "true" ]]; then
log "Install dependency frontend"
$NPM_BIN install
fi
log "Build asset frontend"
$NPM_BIN run build
log "Pastikan APP_KEY tersedia"
$PHP_BIN artisan key:generate --force
log "Jalankan migration"
$PHP_BIN artisan migrate --force
if [[ "$RUN_SEED" == "true" ]]; then
log "Jalankan seeder"
$PHP_BIN artisan db:seed --force
fi
log "Pastikan symbolic link storage tersedia"
$PHP_BIN artisan storage:link || true
log "Bersihkan cache Laravel"
$PHP_BIN artisan optimize:clear
if [[ "$APP_ENVIRONMENT" == "production" ]]; then
log "Cache config, route, dan view untuk production"
$PHP_BIN artisan config:cache
$PHP_BIN artisan route:cache
$PHP_BIN artisan view:cache
fi
log "Deploy selesai"
printf '\nChecklist manual setelah deploy:\n'
printf -- '- Cek halaman login\n'
printf -- '- Cek dashboard setelah login\n'
printf -- '- Cek branding/logo\n'
printf -- '- Cek portal publik\n'
printf -- '- Cek file upload dan dokumen lama\n'