Skip to content

Instantly share code, notes, and snippets.

@raulingg
Created May 15, 2018 17:56
Show Gist options
  • Save raulingg/0ebf9db2b07bc5b8a3d2b33280ba33d2 to your computer and use it in GitHub Desktop.
Save raulingg/0ebf9db2b07bc5b8a3d2b33280ba33d2 to your computer and use it in GitHub Desktop.
@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