diff options
| author | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-04-04 15:51:22 +0200 |
|---|---|---|
| committer | Baptiste Mispelon <bmispelon@gmail.com> | 2025-04-17 12:27:35 +0200 |
| commit | 283b7c08310d2614b4b5671a4c169c6ea8482ca1 (patch) | |
| tree | 956c355471760c9f3ae20733feab19e94fddbf91 /releases | |
| parent | f31081e24b5213e65046465df480a38b81c8b87a (diff) | |
Handled pre-releases when setting previous release as end of life.
Diffstat (limited to 'releases')
| -rw-r--r-- | releases/models.py | 35 | ||||
| -rw-r--r-- | releases/tests.py | 23 |
2 files changed, 49 insertions, 9 deletions
diff --git a/releases/models.py b/releases/models.py index 39a964fa..3edb7b8c 100644 --- a/releases/models.py +++ b/releases/models.py @@ -242,15 +242,8 @@ class Release(models.Model): self.status = self.STATUS_REVERSE[status] cache.delete(self.DEFAULT_CACHE_KEY) super().save(*args, **kwargs) - # Each micro release EOLs the previous one in the same series. - if self.status == "f" and self.micro > 0 and self.is_active: - ( - type(self) - .objects.filter( - major=self.major, minor=self.minor, micro=self.micro - 1, status="f" - ) - .update(eol_date=self.date) - ) + if self.is_active: + self.set_previous_release_as_eol() def __str__(self): return self.version @@ -313,3 +306,27 @@ class Release(models.Model): regex = f"^[Dd]jango-{re.escape(version)}{re.escape(suffix)}$" message = f"Filename {name} does not match pattern {regex}." return RegexValidator(regex, message=message, code="invalid_name")(name) + + def set_previous_release_as_eol(self): + """Handles setting EOL date for the previous release in the series.""" + previous_release_kwargs = { + "major": self.major, + "minor": self.minor, + "micro": self.micro, + "status": self.status, + "eol_date__isnull": True, + } + if self.iteration > 1: + previous_release_kwargs["iteration"] = self.iteration - 1 + elif self.status == "b": + previous_release_kwargs["status"] = "a" + elif self.status == "c": + previous_release_kwargs["status"] = "b" + elif self.status == "f" and self.micro == 0: + previous_release_kwargs["status"] = "c" + elif self.status == "f" and self.micro > 0: + previous_release_kwargs["micro"] = self.micro - 1 + + self.__class__.objects.filter(**previous_release_kwargs).update( + eol_date=self.date + ) diff --git a/releases/tests.py b/releases/tests.py index 093189bf..f9d26aac 100644 --- a/releases/tests.py +++ b/releases/tests.py @@ -212,6 +212,29 @@ class ReleaseTestCase(TestCase): with self.subTest(**params): self.assertEqual(previous.eol_date, expected_eol_date) + def test_save_eol_date_pre_releases(self): + other_release = Release.objects.create(version="5.1.7", is_active=True) + today = datetime.date.today() + cases = [ + ("5.2a1", "5.2a2"), + ("5.2a2", "5.2b1"), + ("5.2b1", "5.2rc1"), + ("5.2rc1", "5.2"), + ("5.2", "5.2.1"), + ] + for previous_version, next_version in cases: + with self.subTest(msg=f"{previous_version} -> {next_version}"): + previous_release, _ = Release.objects.get_or_create( + version=previous_version, + is_active=True, + ) + self.assertIsNone(previous_release.eol_date) + Release.objects.create(version=next_version, is_active=True) + previous_release.refresh_from_db() + other_release.refresh_from_db() + self.assertEqual(previous_release.eol_date, today) + self.assertIsNone(other_release.eol_date) + class ReleaseUploadToTestCase(SimpleTestCase): def test_upload_to_artifact(self): |
