Repository: readthedocs/readthedocs.org

Issue:
Build tools: update `latest` versions
## What's the problem this feature will solve?

The version we have of miniconda (4.7) is quite old, I remember checking for this some time ago, and thinking that there weren't more versions available (5.x for example). Turns out that they changed their versioning scheme some time ago... Their versions now appear to be linked to a python version and the miniconda version (e.g `miniconda3-3.12-24.1.2.0`).

## Describe the solution you'd like

We are close to June, that's our 6 months policy update for all build tools, so we can maybe wait until that to update it. Or just do one exception, as our policy mentions.

## Alternative solutions

Maybe find a way to manually upgrade miniconda for users that need it?

## Additional context

We have one user not being able to build their docs, a probable cause is the version of miniconda. See https://github.com/numba/pixie/pull/12.


Discussion:
> We are close to June, that's our 6 months policy update for all build tools, so we can maybe wait until that to update it

Yeah, I think it's fine to update them all in June. We are only one week away from it and we need to do the work, review, deploy, etc still.
Please let me know if you need any details about this (this also ships with the mamba solver as the new backend for conda, making it almost as fast as mamba CLI). Blog post: https://conda.org/blog/2023-11-06-conda-23-10-0-release
We are using `asdf` (https://asdf-vm.com/) to install these versions, so we will need to use the following ones as latest(s):

```
▶ asdf list all python | grep miniconda | grep 24\. 
miniconda3-3.9-24.1.2-0
miniconda3-3.10-24.1.2-0
miniconda3-3.11-24.1.2-0
miniconda3-3.12-24.1.2-0
```

```
▶ asdf list all python | grep mambaforge | grep 23\.
mambaforge-23.1.0-0
mambaforge-23.1.0-1
mambaforge-23.1.0-2
mambaforge-23.1.0-3
mambaforge-23.1.0-4
mambaforge-23.3.0-0
mambaforge-23.3.1-0
mambaforge-23.3.1-1
mambaforge-23.10.0-0
mambaforge-23.11.0-0
```

Resolving patch:
diff --git a/readthedocs/builds/constants_docker.py b/readthedocs/builds/constants_docker.py
--- a/readthedocs/builds/constants_docker.py
+++ b/readthedocs/builds/constants_docker.py
@@ -32,24 +32,26 @@
             "2.7": "2.7.18",
             "3.6": "3.6.15",
             "3.7": "3.7.17",
-            "3.8": "3.8.18",
-            "3.9": "3.9.18",
-            "3.10": "3.10.13",
-            "3.11": "3.11.6",
-            "3.12": "3.12.0",
+            "3.8": "3.8.19",
+            "3.9": "3.9.19",
+            "3.10": "3.10.14",
+            "3.11": "3.11.9",
+            "3.12": "3.12.3",
             "miniconda3-4.7": "miniconda3-4.7.12",
+            "miniconda3-3.12-24.1": "miniconda3-3.12-24.1.2-0",
             "mambaforge-4.10": "mambaforge-4.10.3-10",
             "mambaforge-22.9": "mambaforge-22.9.0-3",
+            "mambaforge-23.11": "mambaforge-23.11.0-0",
         },
         "nodejs": {
             "14": "14.20.1",
             "16": "16.18.1",
             "18": "18.16.1",
             "19": "19.0.1",
-            "20": "20.11.0",  # LTS
+            "20": "20.14.0",  # LTS
         },
         "ruby": {
-            "3.3": "3.3.0",
+            "3.3": "3.3.2",
         },
         "rust": {
             "1.55": "1.55.0",
@@ -57,13 +59,15 @@
             "1.64": "1.64.0",
             "1.70": "1.70.0",
             "1.75": "1.75.0",
+            "1.78": "1.78.0",
         },
         "golang": {
             "1.17": "1.17.13",
             "1.18": "1.18.10",
-            "1.19": "1.19.10",
-            "1.20": "1.20.5",
-            "1.21": "1.21.6",
+            "1.19": "1.19.13",
+            "1.20": "1.20.14",
+            "1.21": "1.21.11",
+            "1.22": "1.22.4",
         },
     },
 }
@@ -74,9 +78,9 @@
 _OS["ubuntu-lts-latest"] = _OS["ubuntu-22.04"]
 _TOOLS["python"]["3"] = _TOOLS["python"]["3.12"]
 _TOOLS["python"]["latest"] = _TOOLS["python"]["3"]
-_TOOLS["python"]["miniconda-latest"] = _TOOLS["python"]["miniconda3-4.7"]
-_TOOLS["python"]["mambaforge-latest"] = _TOOLS["python"]["mambaforge-22.9"]
+_TOOLS["python"]["miniconda-latest"] = _TOOLS["python"]["miniconda3-3.12-24.1"]
+_TOOLS["python"]["mambaforge-latest"] = _TOOLS["python"]["mambaforge-23.11"]
 _TOOLS["nodejs"]["latest"] = _TOOLS["nodejs"]["20"]
 _TOOLS["ruby"]["latest"] = _TOOLS["ruby"]["3.3"]
-_TOOLS["rust"]["latest"] = _TOOLS["rust"]["1.75"]
-_TOOLS["golang"]["latest"] = _TOOLS["golang"]["1.21"]
+_TOOLS["rust"]["latest"] = _TOOLS["rust"]["1.78"]
+_TOOLS["golang"]["latest"] = _TOOLS["golang"]["1.22"]


Test patch:
diff --git a/readthedocs/projects/tests/test_build_tasks.py b/readthedocs/projects/tests/test_build_tasks.py
--- a/readthedocs/projects/tests/test_build_tasks.py
+++ b/readthedocs/projects/tests/test_build_tasks.py
@@ -524,7 +524,7 @@ def test_successful_build(
                     },
                     "tools": {
                         "python": {
-                            "full_version": "3.12.0",
+                            "full_version": "3.12.3",
                             "version": "3",
                         }
                     },
diff --git a/readthedocs/rtd_tests/fixtures/spec/v2/schema.json b/readthedocs/rtd_tests/fixtures/spec/v2/schema.json
--- a/readthedocs/rtd_tests/fixtures/spec/v2/schema.json
+++ b/readthedocs/rtd_tests/fixtures/spec/v2/schema.json
@@ -153,9 +153,11 @@
                 "3.12",
                 "latest",
                 "miniconda3-4.7",
+                "miniconda3-3.12-24.1",
                 "miniconda-latest",
                 "mambaforge-4.10",
                 "mambaforge-22.9",
+                "mambaforge-23.11",
                 "mambaforge-latest"
               ]
             },
@@ -182,6 +184,7 @@
                 "1.64",
                 "1.70",
                 "1.75",
+                "1.78",
                 "latest"
               ]
             },
@@ -192,6 +195,7 @@
                 "1.19",
                 "1.20",
                 "1.21",
+                "1.22",
                 "latest"
               ]
             }