Skip to content
This repository was archived by the owner on Dec 28, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Console/Commands/Deploy.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public function handle()
// Write to config
SSH::instance()
->into($this->option('stage'))
->putString(SSH::home($this->option('stage')) . '/ldh.json', json_encode($this->ldh));
->putString(SSH::home($this->option('stage')).'/ldh.json', json_encode($this->ldh));

// Done
SSH::performLanding($this->option('stage'));
Expand Down
2 changes: 1 addition & 1 deletion src/Console/Commands/Rollback.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public function handle()
// Write to config
SSH::instance()
->into($this->option('stage'))
->putString(SSH::home($this->option('stage')) . '/ldh.json', json_encode($this->ldh));
->putString(SSH::home($this->option('stage')).'/ldh.json', json_encode($this->ldh));

SSH::performLanding($this->option('stage'));
}
Expand Down
80 changes: 40 additions & 40 deletions src/Helpers/Deployer.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public static function freshInit(Connection $connection, $stage)
{
// Init fresh remote repo
$connection->define('init', [
'cd ' . config('laravel-deploy-helper.stages.' . $stage . '.remote.root'),
'cd '.config('laravel-deploy-helper.stages.'.$stage.'.remote.root'),
'mkdir releases',
'mkdir patches',
'mkdir shared',
Expand All @@ -35,11 +35,11 @@ public static function doDeploy($stage, $branch, $ldh)
{
// Some stuff that does not change in runtime
$releaseName = time();
$home = config('laravel-deploy-helper.stages.' . $stage . '.remote.root');
$shared = config('laravel-deploy-helper.stages.' . $stage . '.shared');
$commands = config('laravel-deploy-helper.stages.' . $stage . '.commands');
$versions = config('laravel-deploy-helper.stages.' . $stage . '.config.dependencies');
$keep = config('laravel-deploy-helper.stages.' . $stage . '.config.keep');
$home = config('laravel-deploy-helper.stages.'.$stage.'.remote.root');
$shared = config('laravel-deploy-helper.stages.'.$stage.'.shared');
$commands = config('laravel-deploy-helper.stages.'.$stage.'.commands');
$versions = config('laravel-deploy-helper.stages.'.$stage.'.config.dependencies');
$keep = config('laravel-deploy-helper.stages.'.$stage.'.config.keep');

// Check what releases are old and can be removed
ksort($ldh);
Expand All @@ -52,67 +52,67 @@ public static function doDeploy($stage, $branch, $ldh)

// Check versions
// Operators: http://php.net/manual/en/function.version-compare.php
verbose('[' . $stage . '] Checking dependencies. Migth take a minute.');
verbose('['.$stage.'] Checking dependencies. Migth take a minute.');
foreach ($versions as $app => $version) {
SSH::checkAppVersion($connection, $app, $version);
}

// Define the deploy
verbose('[' . $stage . '] Creating new release directory and pulling from remote');
verbose('['.$stage.'] Creating new release directory and pulling from remote');
SSH::execute($stage, [
'mkdir ' . $home . '/releases/' . $releaseName,
'cd ' . $home . '/releases/' . $releaseName,
'git clone -b ' . $branch . ' ' . config('laravel-deploy-helper.stages.' . $stage . '.git.http') . ' .',
'mkdir '.$home.'/releases/'.$releaseName,
'cd '.$home.'/releases/'.$releaseName,
'git clone -b '.$branch.' '.config('laravel-deploy-helper.stages.'.$stage.'.git.http').' .',
]);

// Pre-flight for shared stuff
$items['directories'] = [];
foreach ($shared['directories'] as $share) {
verbose('[' . $stage . '] About to share direcroty "' . $home . '/current/' . $share . '"');
$items['directories'][] = '[ -e ' . $home . '/current/' . $share . ' ] && cp -R -p ' . $home . '/current/'
. $share . ' ' . $home . '/shared/' . $share;
$items['directories'][] = '[ -e ' . $home . '/shared/' . $share . ' ] && cp -R -p ' . $home . '/shared/' .
$share . ' ' . $home . '/releases/' . $releaseName;
verbose('['.$stage.'] About to share direcroty "'.$home.'/current/'.$share.'"');
$items['directories'][] = '[ -e '.$home.'/current/'.$share.' ] && cp -R -p '.$home.'/current/'
.$share.' '.$home.'/shared/'.$share;
$items['directories'][] = '[ -e '.$home.'/shared/'.$share.' ] && cp -R -p '.$home.'/shared/'.
$share.' '.$home.'/releases/'.$releaseName;
}
// Pre-flight for shared stuff
$items['files'] = [];
foreach ($shared['files'] as $share) {
verbose('[' . $stage . '] About to share file "' . $home . '/current/' . $share . '"');
$items['files'][] = '[ -e ' . $home . '/current/' . $share . ' ] && cp -p ' . $home . '/current/' . $share
. ' ' . $home . '/shared/' . $share;
$items['files'][] = '[ -e ' . $home . '/shared/' . $share . ' ] && cp -p ' . $home . '/shared/' . $share .
' ' . $home . '/releases/' . $releaseName . '/' . $share;
verbose('['.$stage.'] About to share file "'.$home.'/current/'.$share.'"');
$items['files'][] = '[ -e '.$home.'/current/'.$share.' ] && cp -p '.$home.'/current/'.$share
.' '.$home.'/shared/'.$share;
$items['files'][] = '[ -e '.$home.'/shared/'.$share.' ] && cp -p '.$home.'/shared/'.$share.
' '.$home.'/releases/'.$releaseName.'/'.$share;
}

// Define shared files
verbose('[' . $stage . '] Syncing shared files');
verbose('['.$stage.'] Syncing shared files');
SSH::execute($stage, $items['files']);

// Define shared directories
verbose('[' . $stage . '] Syncing shared directories');
verbose('['.$stage.'] Syncing shared directories');
SSH::execute($stage, $items['directories']);

$items = [];
foreach ($commands as $command) {
$items[] = 'cd ' . $home . '/releases/' . $releaseName . ' && ' . $command;
$items[] = 'cd '.$home.'/releases/'.$releaseName.' && '.$command;
}
// Define commands
verbose('[' . $stage . '] Executing custom commands');
verbose('['.$stage.'] Executing custom commands');
SSH::execute($stage, $items);

// Define post deploy actions
verbose('[' . $stage . '] Linking new release to /current directory and removing temp');
verbose('['.$stage.'] Linking new release to /current directory and removing temp');
SSH::execute($stage, [
'ln -sfn ' . $home . '/releases/' . $releaseName . ' ' . $home . '/current',
'rm -rf ' . $home . '/shared/*',
'ln -sfn '.$home.'/releases/'.$releaseName.' '.$home.'/current',
'rm -rf '.$home.'/shared/*',
]);

// Remove old deploys
$items = [];
foreach ($toRemove as $dir => $val) {
$items[] = 'echo "Removing release ' . $dir . '" && rm -rf ' . $home . '/releases/' . $dir;
$items[] = 'echo "Removing release '.$dir.'" && rm -rf '.$home.'/releases/'.$dir;
}
verbose('[' . $stage . '] Cleaning up old releases');
verbose('['.$stage.'] Cleaning up old releases');
SSH::execute($stage, $items);

$ldh[$releaseName] = true;
Expand All @@ -125,15 +125,15 @@ public static function doDeploy($stage, $branch, $ldh)
*/
public static function doRollback(Connection $connection, $stage, $ldh, $dirs)
{
$home = config('laravel-deploy-helper.stages.' . $stage . '.remote.root');
$home = config('laravel-deploy-helper.stages.'.$stage.'.remote.root');

// Define post deploy actions
$connection->define('preformRollback', [
'ln -sfn ' . $home . '/releases/' . $dirs[1] . ' ' . $home . '/current',
'rm -rf ' . $home . '/releases/' . $dirs[0],
'ln -sfn '.$home.'/releases/'.$dirs[1].' '.$home.'/current',
'rm -rf '.$home.'/releases/'.$dirs[0],
]);

verbose("\t" . 'Hold my beer, We\'re rolling back');
verbose("\t".'Hold my beer, We\'re rolling back');
$connection->task('preformRollback');

unset($dirs[0]);
Expand All @@ -153,26 +153,26 @@ public static function doRollback(Connection $connection, $stage, $ldh, $dirs)
*/
public static function doPatch($stage, $branch)
{
$home = config('laravel-deploy-helper.stages.' . $stage . '.remote.root');
$home = config('laravel-deploy-helper.stages.'.$stage.'.remote.root');

// setup ssh connection to remote
$connection = SSH::instance()->into($stage);

$connection->define('preformPatch', [
Command::builder('cd', [$home . '/current']),
Command::builder('cd', [$home.'/current']),
Command::builder('ls', ['-haml']),

Command::builder('git', ['config', 'user.email', 'git+LDH@localhost.ext']),
Command::builder('git', ['config', 'user.name', 'LDH']),

Command::builder('git', ['fetch']),
Command::builder('git',
['format-patch', '-1', 'origin/' . $branch, 'FETCH_HEAD', '-o', $home . '/patches']),
'git apply --reject --whitespace=fix ' . $home . '/patches/*',
Command::builder('rm', ['-rf', $home . '/patches'])
['format-patch', '-1', 'origin/'.$branch, 'FETCH_HEAD', '-o', $home.'/patches']),
'git apply --reject --whitespace=fix '.$home.'/patches/*',
Command::builder('rm', ['-rf', $home.'/patches']),
]);

verbose("\t" . 'Hold on tight, trying to patch!');
verbose("\t".'Hold on tight, trying to patch!');
$connection->task('preformPatch');
}
}
43 changes: 22 additions & 21 deletions src/Helpers/SSH.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public static function instance()
*/
public static function home($stage)
{
return config('laravel-deploy-helper.stages.' . $stage . '.remote.root');
return config('laravel-deploy-helper.stages.'.$stage.'.remote.root');
}

public static function checkAppVersion(Connection $connection, $app, $requestedVersion)
Expand Down Expand Up @@ -68,7 +68,7 @@ public static function checkAppVersion(Connection $connection, $app, $requestedV
if ($requestedVersion === true) {
$connection->run(Command::builder($app, []), function ($response) use ($app) {
if (stripos($response, 'command not found') !== false) {
throw new \Exception('ERROR: ' . $app . ' is not installed on the server.');
throw new \Exception('ERROR: '.$app.' is not installed on the server.');
}
});
verbose("\t => Checking $app is available");
Expand All @@ -81,7 +81,7 @@ public static function checkAppVersion(Connection $connection, $app, $requestedV
*/
$connection->run(Command::builder($app, []), function ($response) use ($app) {
if (stripos($response, 'command not found') !== false) {
throw new \Exception('ERROR: ' . $app . ' is not installed on the server.');
throw new \Exception('ERROR: '.$app.' is not installed on the server.');
}
});

Expand All @@ -104,14 +104,15 @@ public static function execute($stage, $commands)
}

/**
* Pre flight checks before the deploy happens
* Pre flight checks before the deploy happens.
*
* @param $instance
* @param $stage
* @param $branch
*
* @return bool|mixed
* @throws \Exception
*
* @return bool|mixed
*/
public static function preFlight($instance, $stage, $branch = false)
{
Expand All @@ -121,9 +122,9 @@ public static function preFlight($instance, $stage, $branch = false)
if ($stage === null) {
throw new \Exception('The argument "--stage=" is required!', 128);
} else {
if (!is_array(config('laravel-deploy-helper.stages.' . $stage))) {
throw new \Exception('The stage "' . $stage
. '" does not exist!', 128);
if (!is_array(config('laravel-deploy-helper.stages.'.$stage))) {
throw new \Exception('The stage "'.$stage
.'" does not exist!', 128);
}
}

Expand All @@ -133,14 +134,14 @@ public static function preFlight($instance, $stage, $branch = false)
}

if (in_array($branch, Git::getBranches()) == false) {
throw new \Exception('The branch "' . $branch
. '" does not exists locally? Please `git pull`!', 128);
throw new \Exception('The branch "'.$branch
.'" does not exists locally? Please `git pull`!', 128);
}
}

// Connecting to remote server
verbose('[' . $stage . '] Trying to login into remote SSH');
$ssh = SSH::instance()->into($stage);
verbose('['.$stage.'] Trying to login into remote SSH');
$ssh = self::instance()->into($stage);

// Check for lockfile
if (Locker::lock($ssh, $stage) === false) {
Expand All @@ -149,22 +150,22 @@ public static function preFlight($instance, $stage, $branch = false)
}

// Trying to read file
verbose('[' . $stage . '] Reading config file from remote server');
$config = $ssh->exists(SSH::home($stage) . '/ldh.json');
verbose('['.$stage.'] Reading config file from remote server');
$config = $ssh->exists(self::home($stage).'/ldh.json');

// Check if config exists
if ($config == false) {
error('[' . $stage . '] ldh.json does not exists.');
error('['.$stage.'] ldh.json does not exists.');
if ($instance->confirm('Do you want to initialize LDH here?')) {
Deployer::freshInit($ssh, $stage);
} else {
return false;
}
} else {
verbose('[' . $stage . '] Found config. Checking directories.');
$config = $ssh->getString(SSH::home($stage) . '/ldh.json');
verbose('['.$stage.'] Found config. Checking directories.');
$config = $ssh->getString(self::home($stage).'/ldh.json');
if ($config == false) {
error('[' . $stage . '] Config file is empty... Something is wrong.');
error('['.$stage.'] Config file is empty... Something is wrong.');

return false;
}
Expand All @@ -174,14 +175,14 @@ public static function preFlight($instance, $stage, $branch = false)
}

/**
* End of command
* End of command.
*
* @param $stage
*/
public static function performLanding($stage)
{
$ssh = SSH::instance()->into($stage);
$ssh = self::instance()->into($stage);
Locker::unlock($ssh, $stage);
verbose('[' . $stage . '] Changes are successfull!');
verbose('['.$stage.'] Changes are successfull!');
}
}
4 changes: 2 additions & 2 deletions src/Helpers/helpers.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ function verbose($message)
{
$console = new ConsoleOutput();
$console->getFormatter()->setStyle('info', new OutputFormatterStyle('blue', null));
$console->writeln('<info>' . $message . '</info>');
$console->writeln('<info>'.$message.'</info>');
}
}

Expand All @@ -31,7 +31,7 @@ function error($message)
{
$console = new ConsoleOutput();
$console->getFormatter()->setStyle('error', new OutputFormatterStyle('white', 'red'));
$console->writeln('<error>' . $message . '</error>');
$console->writeln('<error>'.$message.'</error>');
}
}

Expand Down