2016-11-19 15:13:32 +07:00
|
|
|
<?php
|
2020-10-09 23:11:30 +02:00
|
|
|
|
2016-11-19 15:13:32 +07:00
|
|
|
namespace Deployer;
|
|
|
|
|
2020-04-25 23:00:08 +03:00
|
|
|
use Deployer\Exception\Exception;
|
|
|
|
|
2016-11-19 15:13:32 +07:00
|
|
|
desc('Rollback to previous release');
|
|
|
|
task('rollback', function () {
|
2020-10-09 23:11:30 +02:00
|
|
|
$currentRelease = basename(run('readlink {{current_path}}'));
|
2016-11-19 15:13:32 +07:00
|
|
|
$releases = get('releases_list');
|
|
|
|
|
2020-10-09 23:11:30 +02:00
|
|
|
$releasesBeforeCurrent = [];
|
|
|
|
$foundCurrent = false;
|
|
|
|
foreach ($releases as $r) {
|
|
|
|
if ($r === $currentRelease) {
|
|
|
|
$foundCurrent = true;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if ($foundCurrent) {
|
|
|
|
$releasesBeforeCurrent[] = $r;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
while (isset($releasesBeforeCurrent[0])) {
|
|
|
|
$releaseDir = "{{deploy_path}}/releases/{$releasesBeforeCurrent[0]}";
|
|
|
|
|
|
|
|
// Skip all bad releases.
|
|
|
|
if (test("[ -f $releaseDir/BAD_RELEASE ]")) {
|
|
|
|
array_shift($releasesBeforeCurrent);
|
|
|
|
continue;
|
|
|
|
}
|
2016-11-19 15:13:32 +07:00
|
|
|
|
|
|
|
// Symlink to old release.
|
2020-10-09 01:35:42 +02:00
|
|
|
run("cd {{deploy_path}} && {{bin/symlink}} $releaseDir {{current_path}}");
|
2016-11-19 15:13:32 +07:00
|
|
|
|
2020-10-09 23:11:30 +02:00
|
|
|
// Mark release as bad.
|
|
|
|
$date = run('date +"%Y%m%d%H%M%S"');
|
|
|
|
run("echo '$date,{{user}}' > {{deploy_path}}/releases/$currentRelease/BAD_RELEASE");
|
2020-04-25 23:00:08 +03:00
|
|
|
|
2020-10-09 23:11:30 +02:00
|
|
|
writeln("<info>rollback</info> to release {$releasesBeforeCurrent[0]} was <success>successful</success>");
|
|
|
|
return;
|
2016-11-19 15:13:32 +07:00
|
|
|
}
|
2020-10-09 23:11:30 +02:00
|
|
|
|
|
|
|
throw new Exception("No more releases you can revert to.");
|
2016-11-19 15:13:32 +07:00
|
|
|
});
|