From 72c0031dbb61357002a3e2e82fd5de7193fd9d6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Schl=C3=A4pfer?= <305859+pableu@users.noreply.github.com> Date: Tue, 16 Sep 2025 08:45:09 +0000 Subject: [PATCH 1/6] mark release as finished and only consider finished releases during rollback --- recipe/deploy/rollback.php | 8 ++++++-- recipe/deploy/symlink.php | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/recipe/deploy/rollback.php b/recipe/deploy/rollback.php index 7afd34d01..f4799df23 100644 --- a/recipe/deploy/rollback.php +++ b/recipe/deploy/rollback.php @@ -36,8 +36,12 @@ while (isset($releasesBeforeCurrent[0])) { $candidate = $releasesBeforeCurrent[0]; - // Skip all bad releases. - if (test("[ -f {{deploy_path}}/releases/$candidate/BAD_RELEASE ]")) { + if ( + // Only consider successful releases. + !test("[ -f {{deploy_path}}/releases/$candidate/FINISHED_RELEASE ]") + // Skip all bad releases (that have previously been rolled back). + || test("[ -f {{deploy_path}}/releases/$candidate/BAD_RELEASE ]") + ) { array_shift($releasesBeforeCurrent); continue; } diff --git a/recipe/deploy/symlink.php b/recipe/deploy/symlink.php index 8b9c2c0a2..8d583bf60 100644 --- a/recipe/deploy/symlink.php +++ b/recipe/deploy/symlink.php @@ -19,3 +19,9 @@ run("cd {{deploy_path}} && rm release"); // Remove release link. } }); + +desc('Marks release as finished'); +task('deploy:finished', function () { + run("echo '{{user}}' > {{release_path}}/FINISHED_RELEASE"); +}); +after('deploy:symlink', 'deploy:finished'); From db0f5f55301994794b89a3382606822a9f17716e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Schl=C3=A4pfer?= <305859+pableu@users.noreply.github.com> Date: Tue, 16 Sep 2025 08:47:01 +0000 Subject: [PATCH 2/6] show unfinished releases in "dep releases" --- recipe/deploy/release.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/recipe/deploy/release.php b/recipe/deploy/release.php index 42d9a2f3c..892fdce1b 100644 --- a/recipe/deploy/release.php +++ b/recipe/deploy/release.php @@ -176,6 +176,8 @@ $status = "$release (bad)"; } elseif (test("[ -f releases/$release/DIRTY_RELEASE ]")) { $status = "$release (dirty)"; + } elseif (!test("[ -f releases/$release/FINISHED_RELEASE ]")) { + $status = "$release (unfinished)"; } else { $status = "$release"; } From 52566a94890a3851a483f64fd54e2fe5f20b03a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Schl=C3=A4pfer?= <305859+pableu@users.noreply.github.com> Date: Tue, 16 Sep 2025 09:30:05 +0000 Subject: [PATCH 3/6] fix showing unfinished releases --- recipe/deploy/release.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipe/deploy/release.php b/recipe/deploy/release.php index 892fdce1b..81cb74dfe 100644 --- a/recipe/deploy/release.php +++ b/recipe/deploy/release.php @@ -177,7 +177,7 @@ } elseif (test("[ -f releases/$release/DIRTY_RELEASE ]")) { $status = "$release (dirty)"; } elseif (!test("[ -f releases/$release/FINISHED_RELEASE ]")) { - $status = "$release (unfinished)"; + $status = "$release (unfinished)"; } else { $status = "$release"; } From 47a50707455b232844ee7a39b74e16409910f39d Mon Sep 17 00:00:00 2001 From: Anton Medvedev Date: Tue, 28 Oct 2025 10:42:48 +0100 Subject: [PATCH 4/6] Remove finished release task from deployment --- recipe/deploy/symlink.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/recipe/deploy/symlink.php b/recipe/deploy/symlink.php index 8d583bf60..e8257c2f1 100644 --- a/recipe/deploy/symlink.php +++ b/recipe/deploy/symlink.php @@ -18,10 +18,6 @@ run("cd {{deploy_path}} && {{bin/symlink}} {{release_path}} {{current_path}}"); // Atomic override symlink. run("cd {{deploy_path}} && rm release"); // Remove release link. } -}); -desc('Marks release as finished'); -task('deploy:finished', function () { run("echo '{{user}}' > {{release_path}}/FINISHED_RELEASE"); }); -after('deploy:symlink', 'deploy:finished'); From c282198b52cf280ad28c639dd3608e63e358425f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Schl=C3=A4pfer?= <305859+pableu@users.noreply.github.com> Date: Thu, 30 Oct 2025 22:35:17 +0100 Subject: [PATCH 5/6] fix coding standard in rollback.php --- recipe/deploy/rollback.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipe/deploy/rollback.php b/recipe/deploy/rollback.php index f4799df23..dd2e4adb2 100644 --- a/recipe/deploy/rollback.php +++ b/recipe/deploy/rollback.php @@ -40,7 +40,7 @@ // Only consider successful releases. !test("[ -f {{deploy_path}}/releases/$candidate/FINISHED_RELEASE ]") // Skip all bad releases (that have previously been rolled back). - || test("[ -f {{deploy_path}}/releases/$candidate/BAD_RELEASE ]") + || test("[ -f {{deploy_path}}/releases/$candidate/BAD_RELEASE ]") ) { array_shift($releasesBeforeCurrent); continue; From ec1ce6faefdd8ba1f9cd1407344c1df83876ca5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Schl=C3=A4pfer?= <305859+pableu@users.noreply.github.com> Date: Thu, 30 Oct 2025 22:37:48 +0100 Subject: [PATCH 6/6] Update rollback.md --- docs/recipe/deploy/rollback.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/recipe/deploy/rollback.md b/docs/recipe/deploy/rollback.md index 687d16541..137948269 100644 --- a/docs/recipe/deploy/rollback.md +++ b/docs/recipe/deploy/rollback.md @@ -37,7 +37,7 @@ The value of this configuration is autogenerated on access. ## Tasks ### rollback {#rollback} -[Source](https://github.com/deployphp/deployer/blob/master/recipe/deploy/rollback.php#L63) +[Source](https://github.com/deployphp/deployer/blob/master/recipe/deploy/rollback.php#L67) Rollbacks to the previous release.