deployer/recipe/deploy/rollback.php

68 lines
2.0 KiB
PHP
Raw Normal View History

2016-11-19 15:13:32 +07:00
<?php
namespace Deployer;
2020-04-25 23:00:08 +03:00
use Deployer\Exception\Exception;
2021-09-23 02:09:55 +02:00
desc('');
set('rollback_candidate', 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])) {
2021-09-23 02:09:55 +02:00
$candidate = $releasesBeforeCurrent[0];
// Skip all bad releases.
2021-09-23 02:09:55 +02:00
if (test("[ -f {{deploy_path}}/releases/$candidate/BAD_RELEASE ]")) {
array_shift($releasesBeforeCurrent);
continue;
}
2016-11-19 15:13:32 +07:00
2021-09-23 02:09:55 +02:00
return $candidate;
}
throw new Exception("No more releases you can revert to.");
});
desc('Rollback to previous release');
task('rollback', function () {
cd('{{deploy_path}}');
$currentRelease = basename(run('readlink {{current_path}}'));
$candidate = get('rollback_candidate');
2016-11-19 15:13:32 +07:00
2021-09-23 02:09:55 +02:00
writeln("Current release is <fg=red>$currentRelease</fg=red>.");
2020-04-25 23:00:08 +03:00
2021-09-23 02:09:55 +02:00
if (!test("[ -d releases/$candidate ]")) {
throw new \RuntimeException(parse("Release \"$candidate\" not found in \"{{deploy_path}}/releases\"."));
}
if (test("[ -f releases/$candidate/BAD_RELEASE ]")) {
writeln("Candidate <fg=yellow>$candidate</> marked as <error>bad release</error>.");
if (!askConfirmation("Continue rollback to $candidate?")) {
writeln('Rollback aborted.');
return;
}
2016-11-19 15:13:32 +07:00
}
2021-09-23 02:09:55 +02:00
writeln("Rolling back to <info>$candidate</info> release.");
2021-09-23 02:09:55 +02:00
// Symlink to old release.
run("{{bin/symlink}} releases/$candidate {{current_path}}");
// Mark release as bad.
2021-10-08 09:54:21 +02:00
$timestamp = timestamp();
2021-09-23 02:09:55 +02:00
run("echo '$timestamp,{{user}}' > releases/$currentRelease/BAD_RELEASE");
writeln("<info>rollback</info> to release <info>$candidate</info> was <success>successful</success>");
2016-11-19 15:13:32 +07:00
});