Created
November 5, 2019 18:21
-
-
Save zgabievi/58310f2eb4acb6173e360a4afddf21b9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@setup | |
if (!isset($env)) { | |
throw new Exception('--env must be specified'); | |
} | |
$prod = false; | |
$server = '101.101.101.101'; | |
$branch = 'develop'; | |
$base_dir = '/var/www/html'; | |
if ($env === 'prod') { | |
$prod = true; | |
$server = '101.101.101.101'; | |
$branch = 'master'; | |
$base_dir = '/var/www/html'; | |
} | |
$user = 'root'; | |
$repo = 'zgabievi/Repository'; | |
$releases_dir = $base_dir . '/releases'; | |
$current_dir = $base_dir . '/current'; | |
$shared_dir = $base_dir . '/shared'; | |
$new_name = date('Ymd-His'); | |
$new_dir = $releases_dir . '/' . $new_name; | |
$writable = ['storage']; | |
function shout($message) { | |
return "echo '\033[32m" . $message . "\033[0m';\n"; | |
} | |
@endsetup | |
@servers(['local' => '127.0.0.1', 'remote' => $user . '@' . $server]) | |
@macro('deploy') | |
start | |
clone | |
composer | |
npm | |
assets | |
symlinks | |
optimize | |
migrate | |
cache | |
truncate | |
finish | |
@endmacro | |
@macro('auto-deploy') | |
clone | |
composer | |
npm | |
assets | |
symlinks | |
optimize | |
migrate | |
cache | |
truncate | |
@endmacro | |
@task('start', ['on' => 'local']) | |
{{ shout('π Starting deployment...') }} | |
git checkout {{ $branch }} | |
git pull origin {{ $branch }} | |
@endtask | |
@task('clone', ['on' => 'remote']) | |
{{ shout('π Cloning repository...') }} | |
[ -d {{ $releases_dir }} ] || mkdir {{ $releases_dir }}; | |
[ -d {{ $shared_dir }} ] || mkdir {{ $shared_dir }}; | |
[ -d {{ $shared_dir }}/storage ] || mkdir {{ $shared_dir }}/storage; | |
cd {{ $releases_dir }}; | |
mkdir {{ $new_dir }}; | |
git clone --depth 1 --branch {{ $branch }} git@github.com:{{ $repo }} {{ $new_name }} | |
cd {{ $new_dir }} | |
echo "{{ $new_name }}" > public/release.txt | |
@endtask | |
@task('composer', ['on' => 'remote']) | |
{{ shout('π Running Composer...') }} | |
cd {{ $new_dir }}; | |
composer install --prefer-dist --no-scripts -q -o --ignore-platform-reqs; | |
@endtask | |
@task('npm', ['on' => 'remote']) | |
{{ shout('π¦ Running npm...') }} | |
cd {{ $new_dir }}; | |
npm install --no-progress | |
@endtask | |
@task('assets', ['on' => 'remote']) | |
{{ shout('π Generating assets...') }} | |
cd {{ $new_dir }}; | |
npm run production | |
@endtask | |
@task('permissions', ['on' => 'remote']) | |
{{ shout('π Setting permission...') }} | |
@foreach($writable as $item) | |
chmod -R 755 {{ $new_dir }}/{{ $item }} | |
chmod -R g+s {{ $new_dir }}/{{ $item }} | |
chgrp -R apache {{ $new_dir }}/{{ $item }} | |
{{ shout('π Setting permission for "' . $new_dir . '/' . $item . '"...') }} | |
@endforeach | |
@endtask | |
@task('symlinks', ['on' => 'remote']) | |
{{ shout('π Updating symlinks to persistent data...') }} | |
rm -rf {{ $new_dir }}/storage; | |
cd {{ $new_dir }}; | |
ln -nfs {{ $shared_dir }}/storage storage; | |
cd {{ $new_dir }}; | |
ln -nfs {{ $shared_dir }}/.env .env; | |
@endtask | |
@task('optimize', ['on' => 'remote']) | |
{{ shout('β¨ Optimizing installation...') }} | |
cd {{ $new_dir }}; | |
php artisan clear-compiled; | |
@endtask | |
@task('migrate', ['on' => 'remote']) | |
{{ shout('π Migrating database...') }} | |
cd {{ $new_dir }}; | |
@if ($env === 'dev') | |
php artisan migrate:fresh --seed; | |
@else | |
php artisan migrate --force; | |
@endif | |
@endtask | |
@task('cache', ['on' => 'remote']) | |
{{ shout('π Blessing new release...') }} | |
ln -nfs {{ $new_dir }} {{ $current_dir }}; | |
cd {{ $new_dir }}; | |
php artisan optimize | |
@endtask | |
@task('truncate', ['on' => 'remote']) | |
{{ shout('πΎ Cleaning up old releases...') }} | |
cd {{ $releases_dir }} | |
ls -dt {{ $releases_dir }}/* | tail -n +6 | xargs -d "\n" rm -rf; | |
@endtask | |
@task('finish', ['on' => 'local']) | |
{{ shout('π Application deployed!') }} | |
@endtask |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment