Created
May 15, 2018 17:56
-
-
Save raulingg/0ebf9db2b07bc5b8a3d2b33280ba33d2 to your computer and use it in GitHub Desktop.
This file contains hidden or 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 (! in_array($env, ['staging', 'production'])) { | |
throw new Exception('--env must be "staging" or "production"'); | |
} | |
$uppecaserEnv = strtoupper($env); | |
try { | |
require __DIR__ . '/vendor/autoload.php'; | |
$dotenv = new Dotenv\Dotenv(__DIR__); | |
$dotenv->load(); | |
$dotenv->required([ | |
$uppecaserEnv . '_DEPLOY_SERVER', | |
$uppecaserEnv . '_DEPLOY_REPOSITORY', | |
$uppecaserEnv . '_DEPLOY_PATH' | |
])->notEmpty(); | |
} catch ( Exception $e ) { | |
throw new Exception($e->getMessage()); | |
} | |
$server = getenv($uppecaserEnv . '_DEPLOY_SERVER'); | |
$repo = getenv($uppecaserEnv . '_DEPLOY_REPOSITORY'); | |
$path = getenv($uppecaserEnv . '_DEPLOY_PATH'); | |
$slack = getenv($uppecaserEnv .'_DEPLOY_SLACK_WEBHOOK'); | |
if ( substr($path, 0, 1) !== '/' ) { | |
throw new Exception('Careful - your deployment path does not begin with /'); | |
} | |
$date = ( new DateTime )->format('YmdHis'); | |
$branch = isset($branch) ? $branch : 'master'; | |
$path = rtrim($path, '/'); | |
$release = $path.'/'.$date; | |
$updatenv = isset($updatenv) ? : null; | |
$cleanup = isset($cleanup) ? : null; | |
@endsetup | |
@servers(['web' => $server, 'localhost' => '127.0.0.1']) | |
@task('init', ['on' => 'web']) | |
if [ ! -d {{ $path }}/current ]; then | |
cd {{ $path }} | |
git clone {{ $repo }} --branch={{ $branch }} --depth=1 -q {{ $release }} | |
echo "Repository cloned" | |
mv {{ $release }}/pe/recibosdepagos {{ $path }}/recibosdepagos | |
ln -s {{ $path }}/recibosdepagos {{ $release }}/pe/recibosdepagos | |
echo "recibosdepagos directory set up" | |
cp {{ $release }}/.env.TMPL {{ $path }}/.env | |
ln -s {{ $path }}/.env {{ $release }}/.env | |
echo "Environment file set up" | |
rm -rf {{ $release }} | |
echo "Deployment path initialised. Run 'envoy run deploy' now." | |
else | |
echo "Deployment path already initialised (current symlink exists)!" | |
fi | |
@endtask | |
@story('deploy') | |
deployment_start | |
deployment_links | |
deployment_composer | |
deployment_npm | |
deployment_assets | |
deployment_pm2 | |
deployment_finish | |
deployment_option_updatenv | |
deployment_option_cleanup | |
@endstory | |
@story('deploy_cleanup') | |
deployment_start | |
deployment_links | |
deployment_composer | |
deployment_npm | |
deployment_assets | |
deployment_pm2 | |
deployment_finish | |
deployment_option_updatenv | |
deployment_cleanup | |
@endstory | |
@task('deployment_start', ['on' => 'web']) | |
cd {{ $path }} | |
echo "Deployment ({{ $date }}) started" | |
git clone {{ $repo }} --branch={{ $branch }} --depth=1 --recurse-submodules -q {{ $release }} | |
echo "Repository cloned" | |
@endtask | |
@task('deployment_links', ['on' => 'web']) | |
cd {{ $path }} | |
rm -rf {{ $release }}/pe/recibosdepagos | |
ln -s {{ $path }}/recibosdepagos {{ $release }}/pe/recibosdepagos | |
echo "recibosdepagos directories set up" | |
ln -s {{ $release }}/pe {{ $release }}/public/pe | |
ln -s {{ $release }}/pe {{ $release }}/public/cl | |
echo "symlinks to pe folder set up" | |
sudo chown -R $USER:www-data {{ $release }} | |
ln -sf {{ $path }}/.env {{ $release }}/.env | |
echo "Environment file set up" | |
@endtask | |
@task('deployment_composer', ['on' => 'web']) | |
cd {{ $release }} | |
composer install --no-interaction --quiet --no-dev | |
echo "Composer dependencies installed" | |
@endtask | |
@task('deployment_npm', ['on' => 'web']) | |
cd {{ $release }} | |
npm install | |
echo "Node dependencies installed" | |
@endtask | |
@task('deployment_assets', ['on' => 'web']) | |
cd {{ $release }} | |
npm run dev | |
echo "asssets files generated" | |
@endtask | |
@task('deployment_pm2', ['on' => 'web']) | |
sudo pm2 restart diddli --update-env | |
echo 'pm2 server restarted' | |
@endtask | |
@task('deployment_finish', ['on' => 'web']) | |
ln -nfs {{ $release }} {{ $path }}/current | |
echo "Deployment ({{ $date }}) finished" | |
@endtask | |
@task('deployment_cleanup', ['on' => 'web']) | |
cd {{ $path }} | |
ls -dt 20* | tail -n +6 | xargs -d "\n" rm -rf; | |
echo "Cleaned up old deployments" | |
@endtask | |
@task('deployment_option_cleanup', ['on' => 'web']) | |
cd {{ $path }} | |
@if ( isset($cleanup) ) | |
ls -dt 20* | tail -n +6 | xargs -d "\n" rm -rf; | |
echo "Cleaned up old deployments" | |
@endif | |
@endtask | |
@task('deployment_env_file', ['on' => 'localhost']) | |
scp ~/env-files/{{ $env }}/web/.env {{ $server }}:{{ $path }} | |
echo "environment file (.env) deployed in {{ $env }}" | |
@endtask | |
@task('deployment_option_updatenv', ['on' => 'localhost']) | |
echo "Updating env files" | |
@if ( isset($updatenv) ) | |
scp ~/env-files/{{ $env }}/web/.env {{ $server }}:{{ $path }} | |
echo "environment file (.env) deployed in {{ $env }} successfully" | |
@endif | |
@endtask | |
@finished | |
@slack($slack, '#notifications', "Deployment on {$server}: {$date} complete") | |
@endfinished |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment