@setup $remote = "oshainte@cp1.nairahosting.com"; $newReleaseName = date('Ymd-His'); $retainedCopies = 2; $baseDir = "~/admin.oshainternational.org"; $liveDir = "{$baseDir}/live"; $publicDir = "{$baseDir}/public_html"; $persistentDir = "{$baseDir}/persistent"; $releasesDir = "{$baseDir}/releases"; $newReleaseDir = "{$releasesDir}/{$newReleaseName}"; $log = fn($message) => "echo '\033[32m" .$message. "\033[0m';\n"; @endsetup @servers(['local' => '127.0.0.1', 'remote' => $remote]) {{-- Main Tasks--}} @task('build', ['on' => 'local']) {{ $log("🏃Building npm packages locally...") }} npm run build {{ $log("🏃Finished building npm packages...") }} @endtask @task('prepare', ['on' => 'remote']) {{ $log("🏃Preparing remote server for deployment...") }} [ -d {{ $releasesDir }} ] || mkdir {{ $releasesDir }}; [ -d {{ $persistentDir }} ] || mkdir {{ $persistentDir }}; mkdir {{ $newReleaseDir }} {{ $log("🏃Finished preparing remote server...") }} @endtask @task('quick-upload',['on' => 'local']) {{ $log("💻 Uploading only code changes...") }} rsync -avz --chmod=D755,F644 --exclude-from='Envoy.ignore' --exclude="storage" ./ {{ $remote }}:{{ $liveDir }} @endtask @task('upload', ['on' => 'local']) {{ $log("🏃Starting upload task...") }} {{ $log("📦 Compressing node_modules and public directories...") }} tar -czvf node_modules.tar.gz node_modules tar -czvf public.tar.gz --exclude='public/storage' --exclude='public/hot' public {{ $log("🏃Uploading files to remote server...") }} rsync -avz --no-inc-recursive --inplace --chmod=D755,F644 --exclude-from='Envoy.ignore' --exclude="public" ./ {{ $remote }}:{{ $newReleaseDir }} rsync -avz node_modules.tar.gz public.tar.gz {{ $remote }}:{{ $newReleaseDir }} rsync -avz --chmod=644 ./.env.production {{ $remote }}:{{ $newReleaseDir }}/.env {{ $log("📦 Cleaning local tarballs...") }} rm node_modules.tar.gz public.tar.gz {{ $log("🏃Completed upload task...") }} @endtask @task('finalize', ['on' => 'remote']) {{ $log("🏃Finalizing deployment...") }} cd {{ $newReleaseDir }} {{ $log("🏃Setting up persistent data...") }} rsync -avz ./storage {{ $persistentDir }} && rm -rf ./storage ln -nfs {{ $persistentDir }}/storage ./storage {{ $log("📦 Extracting compressed node_modules and public directories...") }} tar -xzvf node_modules.tar.gz && rm node_modules.tar.gz tar -xzvf public.tar.gz && rm public.tar.gz {{ $log("📦 Installing composer packages...") }} /opt/cpanel/ea-php83/root/usr/bin/php /opt/cpanel/composer/bin/composer install --prefer-dist --no-scripts --no-dev -o {{--npm config set engine-strict false && npm install && npm run build--}} {{ $log("🙈 Running artisan commands...") }} /opt/cpanel/ea-php83/root/usr/bin/php artisan migrate:fresh --force /opt/cpanel/ea-php83/root/usr/bin/php artisan filament:assets /opt/cpanel/ea-php83/root/usr/bin/php artisan storage:link /opt/cpanel/ea-php83/root/usr/bin/php artisan clear-compiled /opt/cpanel/ea-php83/root/usr/bin/php artisan optimize:clear /opt/cpanel/ea-php83/root/usr/bin/php artisan filament:optimize-clear /opt/cpanel/ea-php83/root/usr/bin/php artisan optimize /opt/cpanel/ea-php83/root/usr/bin/php artisan filament:optimize {{ $log("🌀 Marking release...") }} echo "{{ $newReleaseName }}" > ./public/latest-release.txt {{ $log("🚚 Updating server public directory...") }} rsync -avz ./public/ {{ $publicDir }}/ sed -i \ -e "s|__DIR__.'/../storage/|__DIR__.'/../live/storage/|g" \ -e "s|__DIR__.'/../vendor/|__DIR__.'/../live/vendor/|g" \ -e "s|__DIR__.'/../bootstrap/|__DIR__.'/../live/bootstrap/|g" \ {{ $publicDir }}/index.php {{ $log("🙏 Linking the new deploy directory to live directory...") }} ln -nfs {{ $newReleaseDir }} {{ $liveDir }} {{ $log("🚾 Cleaning up old deploys...") }} cd {{ $releasesDir }} && ls -dt {{ $releasesDir }}/* | tail -n +{{ $retainedCopies+1 }} | xargs -d "\n" rm -rf {{ $log("🏃Deployment completed...") }} @endtask @task('quick-finalize', ['on' => 'remote']) cd {{ $liveDir }} {{ $log("🙈 Running artisan commands...") }} /opt/cpanel/ea-php83/root/usr/bin/php artisan optimize:clear /opt/cpanel/ea-php83/root/usr/bin/php artisan filament:optimize-clear /opt/cpanel/ea-php83/root/usr/bin/php artisan optimize /opt/cpanel/ea-php83/root/usr/bin/php artisan filament:optimize {{ $log("🏃Deployment completed...") }} @endtask {{-- Full Deploy --}} @story('deploy') build prepare upload finalize @endstory {{-- Quick Deploy --}} @story('quick-deploy') quick-upload quick-finalize @endstory