From 83f161797f97262cde13281bdf240b8378ad5fd2 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Tue, 15 Oct 2024 15:32:46 -0500 Subject: [PATCH] Addons: default to semver for sorting versions (#11686) --- .../migrations/0127_default_to_semver.py | 85 +++++++++++++++++++ readthedocs/projects/models.py | 10 ++- readthedocs/proxito/tests/test_hosting.py | 8 +- readthedocs/proxito/views/hosting.py | 1 + 4 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 readthedocs/projects/migrations/0127_default_to_semver.py diff --git a/readthedocs/projects/migrations/0127_default_to_semver.py b/readthedocs/projects/migrations/0127_default_to_semver.py new file mode 100644 index 00000000000..36a8b6a9595 --- /dev/null +++ b/readthedocs/projects/migrations/0127_default_to_semver.py @@ -0,0 +1,85 @@ +# Generated by Django 4.2.16 on 2024-10-15 16:07 +from django.db import migrations, models +from django_safemigrate import Safe + + +class Migration(migrations.Migration): + safe = Safe.always + dependencies = [ + ("projects", "0126_alter_remote_repository_description"), + ] + + operations = [ + migrations.AlterField( + model_name="addonsconfig", + name="flyout_sorting", + field=models.CharField( + choices=[ + ("alphabetically", "Alphabetically"), + ("semver-readthedocs-compatible", "SemVer (Read the Docs)"), + ("python-packaging", "Python Packaging (PEP 440 and PEP 425)"), + ("calver", "CalVer (YYYY.0M.0M)"), + ("custom-pattern", "Define your own pattern"), + ], + default="semver-readthedocs-compatible", + max_length=64, + verbose_name="Sorting of versions", + ), + ), + migrations.AlterField( + model_name="addonsconfig", + name="flyout_sorting_custom_pattern", + field=models.CharField( + blank=True, + default=None, + help_text='Sorting pattern supported by BumpVer (See examples)', + max_length=32, + null=True, + verbose_name="Custom version sorting pattern", + ), + ), + migrations.AlterField( + model_name="addonsconfig", + name="flyout_sorting_latest_stable_at_beginning", + field=models.BooleanField( + default=True, + verbose_name="Show latest and stable at the beginning", + ), + ), + migrations.AlterField( + model_name="historicaladdonsconfig", + name="flyout_sorting", + field=models.CharField( + choices=[ + ("alphabetically", "Alphabetically"), + ("semver-readthedocs-compatible", "SemVer (Read the Docs)"), + ("python-packaging", "Python Packaging (PEP 440 and PEP 425)"), + ("calver", "CalVer (YYYY.0M.0M)"), + ("custom-pattern", "Define your own pattern"), + ], + default="semver-readthedocs-compatible", + max_length=64, + verbose_name="Sorting of versions", + ), + ), + migrations.AlterField( + model_name="historicaladdonsconfig", + name="flyout_sorting_custom_pattern", + field=models.CharField( + blank=True, + default=None, + help_text='Sorting pattern supported by BumpVer (See examples)', + max_length=32, + null=True, + verbose_name="Custom version sorting pattern", + ), + ), + migrations.AlterField( + model_name="historicaladdonsconfig", + name="flyout_sorting_latest_stable_at_beginning", + field=models.BooleanField( + default=True, + verbose_name="Show latest and stable at the beginning", + ), + ), + ] diff --git a/readthedocs/projects/models.py b/readthedocs/projects/models.py index e0fc30ec291..fbb74fa6342 100644 --- a/readthedocs/projects/models.py +++ b/readthedocs/projects/models.py @@ -62,8 +62,8 @@ from readthedocs.vcs_support.backends import backend_cls from .constants import ( - ADDONS_FLYOUT_SORTING_ALPHABETICALLY, ADDONS_FLYOUT_SORTING_CHOICES, + ADDONS_FLYOUT_SORTING_SEMVER_READTHEDOCS_COMPATIBLE, DOWNLOADABLE_MEDIA_TYPES, MEDIA_TYPES, MULTIPLE_VERSIONS_WITH_TRANSLATIONS, @@ -187,8 +187,9 @@ class AddonsConfig(TimeStampedModel): # Flyout flyout_enabled = models.BooleanField(default=True) flyout_sorting = models.CharField( + verbose_name=_("Sorting of versions"), choices=ADDONS_FLYOUT_SORTING_CHOICES, - default=ADDONS_FLYOUT_SORTING_ALPHABETICALLY, + default=ADDONS_FLYOUT_SORTING_SEMVER_READTHEDOCS_COMPATIBLE, max_length=64, ) flyout_sorting_custom_pattern = models.CharField( @@ -196,12 +197,15 @@ class AddonsConfig(TimeStampedModel): default=None, null=True, blank=True, + verbose_name=_("Custom version sorting pattern"), help_text="Sorting pattern supported by BumpVer " '(See examples)', ) flyout_sorting_latest_stable_at_beginning = models.BooleanField( + verbose_name=_( + "Show latest and stable at the beginning" + ), default=True, - help_text="Show latest and stable at the beginning", ) # Hotkeys diff --git a/readthedocs/proxito/tests/test_hosting.py b/readthedocs/proxito/tests/test_hosting.py index bcda4a0383f..2ec44656332 100644 --- a/readthedocs/proxito/tests/test_hosting.py +++ b/readthedocs/proxito/tests/test_hosting.py @@ -575,15 +575,15 @@ def test_flyout_subproject_urls(self): r.json()["versions"]["active"][0]["urls"]["documentation"] == "https://project.dev.readthedocs.io/projects/subproject/en/latest/" ) - assert r.json()["versions"]["active"][1]["slug"] == "v1" + assert r.json()["versions"]["active"][1]["slug"] == "v2.3" assert ( r.json()["versions"]["active"][1]["urls"]["documentation"] - == "https://project.dev.readthedocs.io/projects/subproject/en/v1/" + == "https://project.dev.readthedocs.io/projects/subproject/en/v2.3/" ) - assert r.json()["versions"]["active"][2]["slug"] == "v2.3" + assert r.json()["versions"]["active"][2]["slug"] == "v1" assert ( r.json()["versions"]["active"][2]["urls"]["documentation"] - == "https://project.dev.readthedocs.io/projects/subproject/en/v2.3/" + == "https://project.dev.readthedocs.io/projects/subproject/en/v1/" ) assert len(r.json()["projects"]["translations"]) == 1 diff --git a/readthedocs/proxito/views/hosting.py b/readthedocs/proxito/views/hosting.py index 564ee05f928..06abc2bacb6 100644 --- a/readthedocs/proxito/views/hosting.py +++ b/readthedocs/proxito/views/hosting.py @@ -350,6 +350,7 @@ def _v1(self, project, version, build, filename, url, request): version.verbose_name, repo_type=project.repo_type, ), + reverse=True, ) elif ( project.addons.flyout_sorting == ADDONS_FLYOUT_SORTING_PYTHON_PACKAGING