#!/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'