@servers(['local' => '127.0.0.1', 'remote' => 'root@192.168.200.12']) @setup $projectName = "support-inertia"; $dir = "/home/softease/www/" . $projectName; $shared = $dir . '/shared'; $releasesDir = $dir . "/releases/"; $release = $releasesDir . date('YmdHis'); $current = $dir . '/current'; $releases = 3; $user = "maxime.goncalves"; $password = "p3dkx4zggpkxpcoewi4td7tz676ozykacj7uqgmh3gwcjch3twna"; $remote = "https://maximegoncalves:p67vsed1fg+@github.com/softease/Support.git"; $user = get_current_user(); function logMessage($message) { return "echo '\033[32m" .$message. "\033[0m';\n"; } @endsetup @macro('deploy') startDeployment prepareDirectories cloneRepository runComposer runNpm generateAssets blessNewRelease backupDatabase migrateDatabase cleanOldReleases finishDeploy @endmacro @macro('deploy-code') deployOnlyCode @endmacro @macro('deployfresh') startDeployment prepareDirectories cloneRepository runComposer runNpm generateAssets freshDatabase blessNewRelease cleanOldReleases finishDeploy @endmacro @task('startDeployment', ['on' => 'local']) {{ logMessage("🏃 Starting deployment...") }} git checkout master git pull origin master @endtask @task('prepareDirectories', ['on' => 'remote']) {{ logMessage("🌀 Prepare directories...") }} {{ logMessage("🌀 Creating Share...") }} mkdir -p {{$shared}}; {{ logMessage("🌀 Creating Releases..." . $release) }} mkdir -p {{ $release }}; @endtask @task('cloneRepository', ['on' => 'remote']) {{ logMessage("🌀 Cloning repository...") }} cd {{ $release }}; # Clone the repo # git clone --depth 1 git@github.com:{{ $repository }}.git {{ $newReleaseName }}; git clone --depth 1 {{ $remote }} {{ $release }}; # Configure sparse checkout git config core.sparsecheckout true echo "*" > .git/info/sparse-checkout echo "!storage" >> .git/info/sparse-checkout echo "!public/build" >> .git/info/sparse-checkout git read-tree -mu HEAD # Mark release cd {{ $release }}; echo "{{ $release }}" > public/release-name.txt; # Move Storage folder to shared folder {{ logMessage("🌀 Creating SymLink...") }} mkdir -p {{ $shared }}/storage; mkdir -p {{ $shared }}/storage/framework/sessions; mkdir -p {{ $shared }}/storage/framework/views; mkdir -p {{ $shared }}/storage/framework/cache; rm -rf {{ $release }}/storage; sudo chmod -R 755 {{$shared}} chown www-data:www-data {{$shared}} -R ln -nfs {{ $shared }}/storage storage; @endtask @task('runComposer', ['on' => 'remote']) {{ logMessage("🚚 Running Composer...") }} cd {{$release}}; composer install --prefer-dist --no-scripts --no-dev -q -o; {{ logMessage("🔗 Updating vendor symlink to persistent data...") }} mkdir -p {{ $shared }}/vendor; ln -s {{ $shared }}/vendor {{ $release }}/vendor; @endtask @task('runNpm', ['on' => 'remote']) {{ logMessage("📦 Running Npm...") }} cd {{ $release }}; npm install {{ logMessage("🔗 Updating node_modules symlink to persistent data...") }} mkdir -p {{ $shared }}/node_modules; ln -s {{$shared}}/node_modules {{ $release }}/node_modules; @endtask @task('generateAssets', ['on' => 'remote']) {{ logMessage("🌅 Generating assets...") }} cd {{ $release }}; npm run production --progress false @endtask @task('blessNewRelease', ['on' => 'remote']) {{ logMessage("🙏 Blessing new release...") }} rm -f {{ $current }}; ln -s {{ $release }} {{ $current }}; {{--ls {{ $dir }}/releases | sort -r | tail -n +{{ $releases + 1 }} | xargs -I{} -r rm -rf {{ $dir }}/releases/{};--}} {{ logMessage("$current -> $release") }} cd {{ $current }}; php artisan storage:link ln -s {{ $shared }}/.env {{ $release }}/.env; {{ logMessage("🙏 Config clear, config cache...") }} php artisan config:clear php artisan cache:clear php artisan config:cache @endtask @task('backupDatabase', ['on' => 'remote']) {{ logMessage("📀 Backing up database...") }} cd {{ $release }} php artisan backup:run @endtask @task('migrateDatabase', ['on' => 'remote']) {{ logMessage("🙈 Migrating database...") }} cd {{ $release }} php artisan migrate --force; @endtask @task('cleanOldReleases', ['on' => 'remote']) {{ logMessage("🚾 Cleaning up old releases...") }} # Delete all but the 5 most recent. cd {{ $releasesDir }} ls {{ $releasesDir }} | sort -r | tail -n +{{ $releases + 1 }} | xargs -I{} -r rm -rf {{ $releasesDir }}{}; @endtask @task('finishDeploy', ['on' => 'local']) {{ logMessage("🚀 Application deployed!") }} @endtask @task('deployOnlyCode',['on' => 'remote']) {{ logMessage("💻 Deploying code changes...") }} cd {{ $current }} git pull origin master php artisan config:clear php artisan cache:clear php artisan config:cache @endtask @task('freshDatabase',['on' => 'remote']) {{ logMessage("💻 Refresh database...") }} cd {{ $current }} php artisan migrate:fresh --seed php artisan importdata @endtask @task('importData',['on' => 'remote']) {{ logMessage("💻 Import data...") }} cd {{ $current }} php artisan importdata @endtask