@servers(['localhost' => '127.0.0.1']) @setup if (empty($repository)) { throw new Exception("Need --repository param", 1); } if (empty($app_dir)) { throw new Exception("Need --app_dir param", 1); } $releases_dir = $app_dir . '/releases'; $storage_dir = $app_dir . '/storage'; $release_no = date('YmdHis'); $new_release_dir = $releases_dir .'/'. $release_no; @endsetup @story('deploy') clone_repository run_composer update_symlinks change_owner @endstory @task('clone_repository') echo 'Cloning repository' [ -d {{ $app_dir }} ] || mkdir {{ $app_dir }} [ -d {{ $releases_dir }} ] || mkdir {{ $releases_dir }} git clone --depth 1 {{ $repository }} {{ $new_release_dir }} @endtask @task('run_composer') echo "Starting deployment ({{ $release }})" cd {{ $new_release_dir }} composer install --prefer-dist --no-scripts -q -o @endtask @task('update_symlinks') echo "Linking storage directory" rm -rf {{ $new_release_dir }}/storage [ -d {{ $storage_dir }} ] || mkdir {{ $storage_dir }} && mkdir {{ $storage_dir }}/framework && mkdir {{ $storage_dir }}/framework/cache && mkdir {{ $storage_dir }}/framework/sessions && mkdir {{ $storage_dir }}/framework/views ln -nfs {{ $storage_dir }} {{ $new_release_dir }}/storage echo 'Linking current release' ln -nfs {{ $new_release_dir }} {{ $app_dir }}/current echo 'Linking .env file' if [ ! -f {{ $app_dir }}/.env ]; then cp {{ $new_release_dir }}/.env.example {{ $app_dir }}/.env ln -nfs {{ $app_dir }}/.env {{ $new_release_dir }}/.env cd {{ $app_dir }}/current && php artisan key:generate else ln -nfs {{ $app_dir }}/.env {{ $new_release_dir }}/.env cd {{ $app_dir }}/current && php artisan migrate fi @endtask @task('change_owner') chown -R www:www {{ $app_dir }} chown -R www:www {{ $releases_dir }} chown -R www:www {{ $storage_dir }} chown -R www:www {{ $new_release_dir }} @endtask