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.