prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Build: support Ruby under `build.tools` 
  We should add support for Ruby on `build.tools`. It will be useful for doctools like Jekyll.
  
  Work required:
  
  - [x] Update the documentation
  - [x] Install asdf-ruby (https://github.com/asdf-vm/asdf-ruby) on Docker images
  - [x] Compile latest Ruby version and upload it S3 (happening at https://app.circleci.com/pipelines/github/readthedocs/readthedocs-docker-images/289/workflows/f1bc7c62-02d8-4353-ac94-972eb58b0675/jobs/503)
  - [x] Update `settings.py` to add this tool and version
  - [x] Update config v2 to accept this value
  - [x] Create a branch on `test-builds` for this use case
  
  
  > **Note**: we had a support request for this at https://github.com/readthedocs/readthedocs.org/issues/9599#issuecomment-1560011462
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `readthedocs/builds/constants_docker.py`
  Content:
  ```
  1 """
  2 Define constants here to allow import them without any external dependency.
  3 
  4 There are situations where we want to have access to these values without Django installed
  5 (e.g. common/dockerfiles/tasks.py)
  6 
  7 Note these constants where previously defined as Django settings in ``readthedocs/settings/base.py``.
  8 """
  9 
  10 DOCKER_DEFAULT_IMAGE = "readthedocs/build"
  11 
  12 # Adding a new tool/version to this setting requires:
  13 #
  14 # - a mapping between the expected version in the config file, to the full
  15 # version installed via asdf (found via ``asdf list all <tool>``)
  16 #
  17 # - running the script ``./scripts/compile_version_upload.sh`` in
  18 # development and production environments to compile and cache the new
  19 # tool/version
  20 #
  21 # Note that when updating this options, you should also update the file:
  22 # readthedocs/rtd_tests/fixtures/spec/v2/schema.json
  23 RTD_DOCKER_BUILD_SETTINGS = {
  24     # Mapping of build.os options to docker image.
  25     "os": {
  26         "ubuntu-20.04": f"{DOCKER_DEFAULT_IMAGE}:ubuntu-20.04",
  27         "ubuntu-22.04": f"{DOCKER_DEFAULT_IMAGE}:ubuntu-22.04",
  28     },
  29     # Mapping of build.tools options to specific versions.
  30     "tools": {
  31         "python": {
  32             "2.7": "2.7.18",
  33             "3.6": "3.6.15",
  34             "3.7": "3.7.17",
  35             "3.8": "3.8.18",
  36             "3.9": "3.9.18",
  37             "3.10": "3.10.13",
  38             "3.11": "3.11.6",
  39             "3.12": "3.12.0",
  40             # Always point to the latest stable release.
  41             "3": "3.12.0",
  42             "miniconda3-4.7": "miniconda3-4.7.12",
  43             "mambaforge-4.10": "mambaforge-4.10.3-10",
  44             "mambaforge-22.9": "mambaforge-22.9.0-3",
  45         },
  46         "nodejs": {
  47             "14": "14.20.1",
  48             "16": "16.18.1",
  49             "18": "18.16.1",  # LTS
  50             "19": "19.0.1",
  51             "20": "20.3.1",
  52         },
  53         "rust": {
  54             "1.55": "1.55.0",
  55             "1.61": "1.61.0",
  56             "1.64": "1.64.0",
  57             "1.70": "1.70.0",
  58         },
  59         "golang": {
  60             "1.17": "1.17.13",
  61             "1.18": "1.18.10",
  62             "1.19": "1.19.10",
  63             "1.20": "1.20.5",
  64         },
  65     },
  66 }
  67
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: 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
  @@ -50,6 +50,9 @@
               "19": "19.0.1",
               "20": "20.3.1",
           },
  +        "ruby": {
  +            "3.3": "3.3.0",
  +        },
           "rust": {
               "1.55": "1.55.0",
               "1.61": "1.61.0",
  
verification_info: {"golden_diff": "diff --git a/readthedocs/builds/constants_docker.py b/readthedocs/builds/constants_docker.py\n--- a/readthedocs/builds/constants_docker.py\n+++ b/readthedocs/builds/constants_docker.py\n@@ -50,6 +50,9 @@\n             \"19\": \"19.0.1\",\n             \"20\": \"20.3.1\",\n         },\n+        \"ruby\": {\n+            \"3.3\": \"3.3.0\",\n+        },\n         \"rust\": {\n             \"1.55\": \"1.55.0\",\n             \"1.61\": \"1.61.0\",\n", "issue": "Build: support Ruby under `build.tools` \nWe should add support for Ruby on `build.tools`. It will be useful for doctools like Jekyll.\r\n\r\nWork required:\r\n\r\n- [x] Update the documentation\r\n- [x] Install asdf-ruby (https://github.com/asdf-vm/asdf-ruby) on Docker images\r\n- [x] Compile latest Ruby version and upload it S3 (happening at https://app.circleci.com/pipelines/github/readthedocs/readthedocs-docker-images/289/workflows/f1bc7c62-02d8-4353-ac94-972eb58b0675/jobs/503)\r\n- [x] Update `settings.py` to add this tool and version\r\n- [x] Update config v2 to accept this value\r\n- [x] Create a branch on `test-builds` for this use case\r\n\r\n\r\n> **Note**: we had a support request for this at https://github.com/readthedocs/readthedocs.org/issues/9599#issuecomment-1560011462\n", "before_files": [{"content": "\"\"\"\nDefine constants here to allow import them without any external dependency.\n\nThere are situations where we want to have access to these values without Django installed\n(e.g. common/dockerfiles/tasks.py)\n\nNote these constants where previously defined as Django settings in ``readthedocs/settings/base.py``.\n\"\"\"\n\nDOCKER_DEFAULT_IMAGE = \"readthedocs/build\"\n\n# Adding a new tool/version to this setting requires:\n#\n# - a mapping between the expected version in the config file, to the full\n# version installed via asdf (found via ``asdf list all <tool>``)\n#\n# - running the script ``./scripts/compile_version_upload.sh`` in\n# development and production environments to compile and cache the new\n# tool/version\n#\n# Note that when updating this options, you should also update the file:\n# readthedocs/rtd_tests/fixtures/spec/v2/schema.json\nRTD_DOCKER_BUILD_SETTINGS = {\n    # Mapping of build.os options to docker image.\n    \"os\": {\n        \"ubuntu-20.04\": f\"{DOCKER_DEFAULT_IMAGE}:ubuntu-20.04\",\n        \"ubuntu-22.04\": f\"{DOCKER_DEFAULT_IMAGE}:ubuntu-22.04\",\n    },\n    # Mapping of build.tools options to specific versions.\n    \"tools\": {\n        \"python\": {\n            \"2.7\": \"2.7.18\",\n            \"3.6\": \"3.6.15\",\n            \"3.7\": \"3.7.17\",\n            \"3.8\": \"3.8.18\",\n            \"3.9\": \"3.9.18\",\n            \"3.10\": \"3.10.13\",\n            \"3.11\": \"3.11.6\",\n            \"3.12\": \"3.12.0\",\n            # Always point to the latest stable release.\n            \"3\": \"3.12.0\",\n            \"miniconda3-4.7\": \"miniconda3-4.7.12\",\n            \"mambaforge-4.10\": \"mambaforge-4.10.3-10\",\n            \"mambaforge-22.9\": \"mambaforge-22.9.0-3\",\n        },\n        \"nodejs\": {\n            \"14\": \"14.20.1\",\n            \"16\": \"16.18.1\",\n            \"18\": \"18.16.1\",  # LTS\n            \"19\": \"19.0.1\",\n            \"20\": \"20.3.1\",\n        },\n        \"rust\": {\n            \"1.55\": \"1.55.0\",\n            \"1.61\": \"1.61.0\",\n            \"1.64\": \"1.64.0\",\n            \"1.70\": \"1.70.0\",\n        },\n        \"golang\": {\n            \"1.17\": \"1.17.13\",\n            \"1.18\": \"1.18.10\",\n            \"1.19\": \"1.19.10\",\n            \"1.20\": \"1.20.5\",\n        },\n    },\n}\n", "path": "readthedocs/builds/constants_docker.py"}], "after_files": [{"content": "\"\"\"\nDefine constants here to allow import them without any external dependency.\n\nThere are situations where we want to have access to these values without Django installed\n(e.g. common/dockerfiles/tasks.py)\n\nNote these constants where previously defined as Django settings in ``readthedocs/settings/base.py``.\n\"\"\"\n\nDOCKER_DEFAULT_IMAGE = \"readthedocs/build\"\n\n# Adding a new tool/version to this setting requires:\n#\n# - a mapping between the expected version in the config file, to the full\n# version installed via asdf (found via ``asdf list all <tool>``)\n#\n# - running the script ``./scripts/compile_version_upload.sh`` in\n# development and production environments to compile and cache the new\n# tool/version\n#\n# Note that when updating this options, you should also update the file:\n# readthedocs/rtd_tests/fixtures/spec/v2/schema.json\nRTD_DOCKER_BUILD_SETTINGS = {\n    # Mapping of build.os options to docker image.\n    \"os\": {\n        \"ubuntu-20.04\": f\"{DOCKER_DEFAULT_IMAGE}:ubuntu-20.04\",\n        \"ubuntu-22.04\": f\"{DOCKER_DEFAULT_IMAGE}:ubuntu-22.04\",\n    },\n    # Mapping of build.tools options to specific versions.\n    \"tools\": {\n        \"python\": {\n            \"2.7\": \"2.7.18\",\n            \"3.6\": \"3.6.15\",\n            \"3.7\": \"3.7.17\",\n            \"3.8\": \"3.8.18\",\n            \"3.9\": \"3.9.18\",\n            \"3.10\": \"3.10.13\",\n            \"3.11\": \"3.11.6\",\n            \"3.12\": \"3.12.0\",\n            # Always point to the latest stable release.\n            \"3\": \"3.12.0\",\n            \"miniconda3-4.7\": \"miniconda3-4.7.12\",\n            \"mambaforge-4.10\": \"mambaforge-4.10.3-10\",\n            \"mambaforge-22.9\": \"mambaforge-22.9.0-3\",\n        },\n        \"nodejs\": {\n            \"14\": \"14.20.1\",\n            \"16\": \"16.18.1\",\n            \"18\": \"18.16.1\",  # LTS\n            \"19\": \"19.0.1\",\n            \"20\": \"20.3.1\",\n        },\n        \"ruby\": {\n            \"3.3\": \"3.3.0\",\n        },\n        \"rust\": {\n            \"1.55\": \"1.55.0\",\n            \"1.61\": \"1.61.0\",\n            \"1.64\": \"1.64.0\",\n            \"1.70\": \"1.70.0\",\n        },\n        \"golang\": {\n            \"1.17\": \"1.17.13\",\n            \"1.18\": \"1.18.10\",\n            \"1.19\": \"1.19.10\",\n            \"1.20\": \"1.20.5\",\n        },\n    },\n}\n", "path": "readthedocs/builds/constants_docker.py"}]}