deployer/recipe/deploy/rollback.php

46 lines
1.3 KiB
PHP
Raw Normal View History

2016-11-19 15:13:32 +07:00
<?php
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 () {
$currentRelease = basename(run('readlink {{current_path}}'));
2016-11-19 15:13:32 +07:00
$releases = get('releases_list');
$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
// 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
writeln("<info>rollback</info> to release {$releasesBeforeCurrent[0]} was <success>successful</success>");
return;
2016-11-19 15:13:32 +07:00
}
throw new Exception("No more releases you can revert to.");
2016-11-19 15:13:32 +07:00
});