diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md index eba72fc685d..9a12e8d1afc 100644 --- a/.github/ISSUE_TEMPLATE/feature.md +++ b/.github/ISSUE_TEMPLATE/feature.md @@ -1,6 +1,6 @@ --- name: Feature/improvement proposal -about: Propose a new feauture or improvement for Read the Docs +about: Propose a new feature or improvement for Read the Docs --- ## What's the problem this feature will solve? diff --git a/.github/workflows/pip-tools.yaml b/.github/workflows/pip-tools.yaml index 77aa57b7282..6ea83ae0e6a 100644 --- a/.github/workflows/pip-tools.yaml +++ b/.github/workflows/pip-tools.yaml @@ -1,5 +1,5 @@ # Action to run pip-compile weekly and create a Pull Request with the changes. -# Althought GitHub says that pip-compile is supported by dependabot, we couldn't make it work together. +# Although GitHub says that pip-compile is supported by dependabot, we couldn't make it work together. # That's why this action exists. # If we ever find the proper configuration for dependabot+pip-compile, # we can delete this action. diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 657da7c1bc0..dc4c686352f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -170,7 +170,7 @@ Version 10.15.1 * `@stsewd `__: Update docs requirements (`#11032 `__) * `@github-actions[bot] `__: Dependencies: all packages updated via pip-tools (`#11029 `__) * `@stsewd `__: Redirects: limit to 100 per project (`#11028 `__) -* `@humitos `__: Build: reset notifications when reseting a build (`#11027 `__) +* `@humitos `__: Build: reset notifications when resetting a build (`#11027 `__) * `@humitos `__: Development: define `SUPPORT_EMAIL` setting (`#11026 `__) * `@humitos `__: Notifications: use Template's Django engine to render them (`#11024 `__) * `@humitos `__: Notifications: render `Organization` notifications on details page (`#11023 `__) @@ -1026,7 +1026,7 @@ Version 9.8.0 * `@stsewd `__: Canonical redirects: check if the project supports custom domains (`#10098 `__) * `@stsewd `__: Fix .com tests (`#10097 `__) * `@stsewd `__: Fix migration (`#10096 `__) -* `@benjaoming `__: Docs: Move a reference and remove an empty paranthesis (`#10093 `__) +* `@benjaoming `__: Docs: Move a reference and remove an empty parenthesis (`#10093 `__) * `@benjaoming `__: Docs: Update documentation for search.ignore (`#10091 `__) * `@benjaoming `__: Fix intersphinx references to myst-parser (updated in myst-parser 0.19) (`#10090 `__) * `@stsewd `__: Update changelog with security fixes (`#10088 `__) @@ -1170,7 +1170,7 @@ Version 9.3.1 * `@humitos `__: Requirements: reduce complexity (`#9956 `__) * `@humitos `__: Build: rclone retries when uploading artifacts (`#9954 `__) * `@benjaoming `__: Docs: Relabel badges as feature reference (Diátaxis) (`#9951 `__) -* `@humitos `__: Build: improve `concurent` queryset (`#9950 `__) +* `@humitos `__: Build: improve `concurrent` queryset (`#9950 `__) * `@benjaoming `__: Docs: Make the GSOC page orphaned (Diátaxis) (`#9949 `__) * `@humitos `__: Celery: ignore task results (`#9944 `__) * `@agjohnson `__: Translations: a few copy issues and translator requests (`#9937 `__) @@ -1330,7 +1330,7 @@ This version upgrades our Search API experience to a v3. * `@Jean-Maupas `__: A few text updates (`#9761 `__) * `@github-actions[bot] `__: Dependencies: all packages updated via pip-tools (`#9760 `__) * `@benjaoming `__: Docs: 4 diátaxis categories at the top of the navigation sidebar (Diátaxis iteration 0) (`#9758 `__) -* `@ericholscher `__: Be more explicit where go to in VCS intstructions (`#9757 `__) +* `@ericholscher `__: Be more explicit where go to in VCS instructions (`#9757 `__) * `@benjaoming `__: Docs: Adding a pattern for reusing "Only on Read the Docs for Business" admonition (Diátaxis refactor) (`#9754 `__) * `@stsewd `__: Subscriptions: attach stripe subscription to organizations (`#9751 `__) * `@stsewd `__: Search: fix parsing of parameters inside sphinx domains (`#9750 `__) @@ -1756,7 +1756,7 @@ Version 8.1.1 * `@stsewd `__: Update json schema (`#9270 `__) * `@stsewd `__: Build tools: update versions (`#9268 `__) * `@stsewd `__: Fix docs (`#9264 `__) -* `@stsewd `__: Update commmon (`#9248 `__) +* `@stsewd `__: Update common (`#9248 `__) * `@pyup-bot `__: pyup: Scheduled weekly dependency update for week 18 (`#9157 `__) Version 8.1.0 @@ -1965,7 +1965,7 @@ Version 7.4.2 * `@humitos `__: API: validate `RemoteRepository` when creating a `Project` (`#8983 `__) * `@stsewd `__: Tests: fix mock.patch order (`#8909 `__) * `@humitos `__: Celery: remove queue priority (`#8848 `__) -* `@dogukanteber `__: Use django-storages' manifest files class instead of the overriden class (`#8781 `__) +* `@dogukanteber `__: Use django-storages' manifest files class instead of the overridden class (`#8781 `__) * `@abravalheri `__: Improve displayed version name when building from PR (`#8237 `__) Version 7.4.1 @@ -1985,7 +1985,7 @@ Version 7.4.1 * `@stsewd `__: CDN: avoid cache tags collision (`#8969 `__) * `@stsewd `__: Docs: warn about custom domains on subprojects (`#8945 `__) * `@humitos `__: Code style: format the code using `darker` (`#8875 `__) -* `@dogukanteber `__: Use django-storages' manifest files class instead of the overriden class (`#8781 `__) +* `@dogukanteber `__: Use django-storages' manifest files class instead of the overridden class (`#8781 `__) * `@nienn `__: Docs: Add links to documentation on creating custom classes (`#8466 `__) * `@stsewd `__: Integrations: allow to pass more data about external versions (`#7692 `__) @@ -2216,7 +2216,7 @@ Version 6.3.1 * `@stsewd `__: Custom Domain: make cname_target configurable (`#8728 `__) * `@stsewd `__: Test external serving for projects with `--` in slug (`#8716 `__) * `@astrojuanlu `__: Add guide to migrate from reST to MyST (`#8714 `__) -* `@astrojuanlu `__: Avoid future breakage of `setup.py` invokations (`#8711 `__) +* `@astrojuanlu `__: Avoid future breakage of `setup.py` invocations (`#8711 `__) * `@humitos `__: structlog: migrate application code to better logging (`#8705 `__) * `@humitos `__: EmbedAPI: log success requests (`#8689 `__) * `@ericholscher `__: Add ability to rebuild a specific build (`#6995 `__) @@ -2229,7 +2229,7 @@ Version 6.3.0 * `@humitos `__: Tests: run tests with Python3.8 in CircleCI (`#8718 `__) * `@stsewd `__: Test external serving for projects with `--` in slug (`#8716 `__) * `@humitos `__: requirements: add requests-oauthlib (`#8712 `__) -* `@astrojuanlu `__: Avoid future breakage of `setup.py` invokations (`#8711 `__) +* `@astrojuanlu `__: Avoid future breakage of `setup.py` invocations (`#8711 `__) * `@humitos `__: spam: fix admin filter (`#8707 `__) * `@humitos `__: oauth: sync remote repositories fix (`#8706 `__) * `@humitos `__: structlog: migrate application code to better logging (`#8705 `__) @@ -2413,7 +2413,7 @@ Version 5.23.5 * `@humitos `__: Organization: only mark artifacts cleaned as False if they are True (`#8481 `__) * `@astrojuanlu `__: Fix link to version states documentation (`#8475 `__) -* `@stsewd `__: OAuth models: increase avatar_url lenght (`#8472 `__) +* `@stsewd `__: OAuth models: increase avatar_url length (`#8472 `__) * `@pzhlkj6612 `__: Docs: update the links to the dependency management content of setuptools docs (`#8470 `__) * `@stsewd `__: Permissions: avoid using project.users, use proper permissions instead (`#8458 `__) * `@humitos `__: Docker build images: update design doc (`#8447 `__) @@ -2439,7 +2439,7 @@ Version 5.23.4 * `@stsewd `__: Contact users: pass user and domain in the context (`#8430 `__) * `@astrojuanlu `__: New Read the Docs tutorial, part I (`#8428 `__) * `@stsewd `__: Footer: remove auth block (`#8397 `__) -* `@stsewd `__: API: fix subprojects creation when organizaions are enabled (`#8393 `__) +* `@stsewd `__: API: fix subprojects creation when organizations are enabled (`#8393 `__) * `@stsewd `__: QuerySets: remove unused overrides (`#8299 `__) * `@stsewd `__: QuerySets: filter permissions by organizations (`#8298 `__) @@ -4754,7 +4754,7 @@ Version 3.3.0 * `@davidfischer `__: Allow extensions to control URL structure (`#5296 `__) * `@stsewd `__: Downgrade pytest-django (`#5294 `__) * `@ericholscher `__: Add modeling for intersphinx data (`#5289 `__) -* `@ovc `__: Tweek css for sphinx_prompt (`#5281 `__) +* `@ovc `__: Tweak css for sphinx_prompt (`#5281 `__) * `@saadmk11 `__: #4036 Updated build list to include an alert state (`#5222 `__) * `@humitos `__: Use unicode-slugify to generate Version.slug (`#5186 `__) * `@dojutsu-user `__: Add admin functions for wiping a version (`#5140 `__) @@ -4848,7 +4848,7 @@ Version 3.2.0 * `@humitos `__: Allow source_suffix to be a dictionary (`#5183 `__) * `@humitos `__: Upgrade all packages removing py2 compatibility (`#5179 `__) * `@dojutsu-user `__: Small docs fix (`#5176 `__) -* `@stsewd `__: Sync all services even if one social accoun fails (`#5171 `__) +* `@stsewd `__: Sync all services even if one social account fails (`#5171 `__) * `@ericholscher `__: Release 3.1.0 (`#5170 `__) * `@rvmzes `__: SyntaxError caused by comma in python3 (`#5156 `__) * `@humitos `__: Use latest docker images as default (`#5155 `__) diff --git a/docs/Makefile b/docs/Makefile index a42f00bcef7..231b159a8aa 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -4,7 +4,7 @@ # You can set these variables from the command line. # Options should be aligned with how the documentation is built on RTD -# (except for '--keep-going', failing fast is prefered on local builds) +# (except for '--keep-going', failing fast is preferred on local builds) # We also remove '-E' to reduce the time of rebuilding reference indexes # on each build. SPHINXOPTS = -T -j auto -W diff --git a/docs/dev/design/better-doc-urls-handling.rst b/docs/dev/design/better-doc-urls-handling.rst index e2e9a484501..8a031bf7710 100644 --- a/docs/dev/design/better-doc-urls-handling.rst +++ b/docs/dev/design/better-doc-urls-handling.rst @@ -42,7 +42,7 @@ Instead of trying to map a URL to a view, we first analyze the root project (given from the subdomain), and based on that we map each part of the URL to the *current* project and version. -This will allow us to re-use this code in our unresolver +This will allow us to reuse this code in our unresolver without the need to override the Django's urlconf at runtime, or guessing a project only by the structure of its URL. diff --git a/docs/dev/design/build-images.rst b/docs/dev/design/build-images.rst index 22169fa3d97..14c3064f899 100644 --- a/docs/dev/design/build-images.rst +++ b/docs/dev/design/build-images.rst @@ -265,7 +265,7 @@ and we can roll back if the new pre-compiled version was built with a problem. Installing always the latest version is harder to maintain. It will require building the newest version each time a new patch version is released. - Beacause of that, Read the Docs will always be behind official releases. + Because of that, Read the Docs will always be behind official releases. Besides, it will give projects different versions more often. Exposing to the user the patch version would require to cache many different versions ourselves, @@ -424,10 +424,10 @@ that doesn't seem to be useful to have the same OS version with different states Allowing users to install extra languages by using the Config File will cover most of the support requests we have had in the past. It also will allow us to know more about how our users are using the platform to make future decisions based on this data. Exposing users how we want them to use our platform will allow us to be able to maintain it longer, -than giving the option to select a specific Docker image by name that we can't guarrantee it will be frozen. +than giving the option to select a specific Docker image by name that we can't guarantee it will be frozen. Finally, having the ability to deprecate and *remove* pre-built images from our builders over time, -will reduce the maintainance work required from the the core team. +will reduce the maintenance work required from the the core team. We can always support all the languages versions by installing them at build time. The only required pre-built image for this are the OS ``-base`` images. In fact, even after decided to deprecate and removed a pre-built image from the builders, diff --git a/docs/dev/design/new-notifications-system.rst b/docs/dev/design/new-notifications-system.rst index 87d62432f81..9090d7540f7 100644 --- a/docs/dev/design/new-notifications-system.rst +++ b/docs/dev/design/new-notifications-system.rst @@ -34,7 +34,7 @@ Goals * Ability to add non-error notifications from the build process * Add extra metadata associated to the notification: icon, header, body, etc * Support different types of notifications (e.g. error, warning, note, tip) -* Re-use the new notification system for product updates (e.g. new features, deprecated config keys) +* Reuse the new notification system for product updates (e.g. new features, deprecated config keys) * Message content lives on Python classes that can be translated and formatted with objects (e.g. Build, Project) * Message could have richer content (e.g. HTML code) to generate links and emphasis * Notifications have trackable state (e.g. unread (default)=never shown, read=shown, dismissed=don't show again, cancelled=auto-removed after user action) @@ -43,7 +43,7 @@ Goals * Notifications can be attached to Project, Organization, Build and User models * Specific notifications can be shown under the user's bell icon * Easy way to cleanup notification on status changes (e.g. subscription failure notification is auto-deleted after CC updated) -* Notifications attached to Organization/Project dissappear for all the users once they are dismissed by anyone +* Notifications attached to Organization/Project disappear for all the users once they are dismissed by anyone Non-goals @@ -88,7 +88,7 @@ This section shows all the classes and models involved for the notification syst .. note:: Accessing the database from the build process Builders doesn't have access to the database due to security reasons. - We had solved this limitation by creating an API endpoint the builder hits once they need to interact with the databse to get a ``Project``, ``Version`` and ``Build`` resources, create a ``BuildCommand`` resource, etc. + We had solved this limitation by creating an API endpoint the builder hits once they need to interact with the database to get a ``Project``, ``Version`` and ``Build`` resources, create a ``BuildCommand`` resource, etc. Besides, the build process is capable to trigger Celery tasks that are useful for managing more complex logic that also require accessing from and writing to the database. @@ -116,7 +116,7 @@ and some helper logic to return in the API response. body = str icon = str icon_style = str(SOLID, DUOTONE) - type = str(ERROR, WARINIG, NOTE, TIP) + type = str(ERROR, WARNING, NOTE, TIP) def get_display_icon(self): if self.icon: @@ -201,7 +201,7 @@ It contains an identifier (``message_id``) pointing to one of the messages defin message_id = models.CharField(max_length=128) # UNREAD: the notification was not shown to the user - # READ: the notifiation was shown + # READ: the notification was shown # DISMISSED: the notification was shown and the user dismissed it # CANCELLED: removed automatically because the user has done the action required (e.g. paid the subscription) state = models.CharField( @@ -210,7 +210,7 @@ It contains an identifier (``message_id``) pointing to one of the messages defin db_index=True, ) - # Makes the notification imposible to dismiss (useful for Build notifications) + # Makes the notification impossible to dismiss (useful for Build notifications) dismissable = models.BooleanField(default=False) # Show the notification under the bell icon for the user diff --git a/docs/dev/design/new-search-api.rst b/docs/dev/design/new-search-api.rst index 4d829679185..f8048ec357a 100644 --- a/docs/dev/design/new-search-api.rst +++ b/docs/dev/design/new-search-api.rst @@ -139,7 +139,7 @@ like the projects, versions, and the query that were used in the final search. And the ``version``, ``project``, and ``project_alias`` attributes will now be objects. -We could just re-use the old response too, +We could just reuse the old response too, since the only breaking changes would be the attributes now being objects, and we aren't adding any new information to those objects (yet). But also, re-using the current serializers shouldn't be a problem either. @@ -230,7 +230,7 @@ the readthedocs.org/readthedocs.com domains. We have two types: Project scoped search: - Search files and versions of the curent project only. + Search files and versions of the current project only. Global search: Search files and versions of all projects in .org, diff --git a/docs/dev/design/pr-builder.rst b/docs/dev/design/pr-builder.rst index 94154f2299a..90e8f0256be 100644 --- a/docs/dev/design/pr-builder.rst +++ b/docs/dev/design/pr-builder.rst @@ -43,7 +43,7 @@ We might consider adding a ``VERSION_TYPES`` to the ``Version`` model. - If we go with ``VERSION_TYPES`` we can add something like ``pull_request`` alongside Tag and Branch. We should add ``Version`` and ``Build`` Model Managers for PR and Regular Versions and Builds. -The proposed names for PR and Regular Version and Build Mangers are ``external`` and ``internal``. +The proposed names for PR and Regular Version and Build Managers are ``external`` and ``internal``. We can then use ``Version.internal.all()`` to get all regular versions, ``Version.external.all()`` to get all PR versions. diff --git a/docs/dev/design/secure-api-access-from-builders.rst b/docs/dev/design/secure-api-access-from-builders.rst index 6ab927806ce..d4f9d2d928c 100644 --- a/docs/dev/design/secure-api-access-from-builders.rst +++ b/docs/dev/design/secure-api-access-from-builders.rst @@ -98,7 +98,7 @@ Why attach tokens to users? --------------------------- Attaching tokens to users will ease the implementation, -since we can re-use the code from knox package. +since we can reuse the code from knox package. Attaching tokens to projects only is possible, but it will require to manage the authentication manually. @@ -108,7 +108,7 @@ An alternative is to use the DRF API key package, which doesn't require a user, but then if we wanted to extend this functionality to our normal APIs, we will have to implement the authentication manually. -Kepping backwards compatibility +Keeping backwards compatibility ------------------------------- Access to write API V2 is restricted to superusers, @@ -161,7 +161,7 @@ since it also handles authentication). Decision -------- -Due to the fact that the required featues from knox are not released yet, +Due to the fact that the required features from knox are not released yet, we have decided to use DRF API key instead. Future work diff --git a/docs/dev/subscriptions.rst b/docs/dev/subscriptions.rst index a73439cb821..8a156492dd4 100644 --- a/docs/dev/subscriptions.rst +++ b/docs/dev/subscriptions.rst @@ -74,7 +74,7 @@ and it's manually created by the RTD core team. To create a custom plan, you need to create a new product in Stripe, and add the product id to the ``RTD_PRODUCTS`` setting mapped to the features that the plan will provide. After that, you can create a subscription for the organization with the custom product, -our appliction will automatically relate this new product to the organization. +our application will automatically relate this new product to the organization. Extra products -------------- @@ -87,4 +87,4 @@ extra product will provide, this product should have the ``extra`` attribute set To subscribe an organization to an extra product, you just need to add the product to its subscription with the desired quantity, -our appliction will automatically relate this new product to the organization. +our application will automatically relate this new product to the organization. diff --git a/docs/user/api/v3.rst b/docs/user/api/v3.rst index f49f5636233..de311b0125c 100644 --- a/docs/user/api/v3.rst +++ b/docs/user/api/v3.rst @@ -1876,7 +1876,7 @@ Remote repository listing The ``results`` in response is an array of remote repositories data. :query string name: return remote repositories containing the name - :query string full_name: return remote repositories containing the full name (it inclues the username/organization the project belongs to) + :query string full_name: return remote repositories containing the full name (it includes the username/organization the project belongs to) :query string vcs_provider: return remote repositories for specific vcs provider (``github``, ``gitlab`` or ``bitbucket``) :query string organization: return remote repositories for specific remote organization (using remote organization ``slug``) :query string expand: allows to add/expand some extra fields in the response. diff --git a/docs/user/builds.rst b/docs/user/builds.rst index 88587247c28..7b58ea75e7a 100644 --- a/docs/user/builds.rst +++ b/docs/user/builds.rst @@ -94,7 +94,7 @@ Read the Docs supports three different mechanisms to cancel a running build: When Read the Docs detects a push to a version that is already building, it cancels the running build and starts a new build using the latest commit. -:Programatically: +:Programmatically: You can use user-defined commands on ``build.jobs`` or ``build.commands`` (see :doc:`build-customization`) to check for your own cancellation condition and then return exit code ``183`` to cancel a build. diff --git a/docs/user/faq.rst b/docs/user/faq.rst index b33e5314d67..71275c73481 100644 --- a/docs/user/faq.rst +++ b/docs/user/faq.rst @@ -325,7 +325,7 @@ According to `its own documentation `_, Even though `Jupyter Book leverages Sphinx "for almost everything that it does" `_, -it purposedly hides Sphinx ``conf.py`` files from the user, +it purposely hides Sphinx ``conf.py`` files from the user, and instead generates them on the fly from its declarative ``_config.yml``. As a result, you need to follow some extra steps to make Jupyter Book work on Read the Docs. diff --git a/docs/user/glossary.rst b/docs/user/glossary.rst index adfe5b72cb6..e675b06e4d0 100644 --- a/docs/user/glossary.rst +++ b/docs/user/glossary.rst @@ -88,7 +88,7 @@ so that you have a reference for how we're using them. Another name for :term:`project home`. reproducible - A documentation project is said to be *reproducible* when its sources build correctly on Read the Docs over a periode of many years. + A documentation project is said to be *reproducible* when its sources build correctly on Read the Docs over a period of many years. You can also think of being *reproducible* as being *robust* or *resillient*. Being "reproducible" is an important positive quality goal of documentation. diff --git a/docs/user/guides/pull-requests.rst b/docs/user/guides/pull-requests.rst index a60800bdd9b..6425fdc3110 100644 --- a/docs/user/guides/pull-requests.rst +++ b/docs/user/guides/pull-requests.rst @@ -86,7 +86,7 @@ No new builds are started when I open a pull request Build status is not being reported to your Git provider If opening a pull request does start a new build, but the build status is not being updated with your Git provider, then your connected account may have out - dated or insufficient permisisons. + dated or insufficient permissions. Make sure that you have granted access to the Read the Docs `OAuth App`_ for your personal or organization GitHub account. You can also try reconnecting diff --git a/docs/user/intro/import-guide.rst b/docs/user/intro/import-guide.rst index 32fbac07ca4..be63a86a393 100644 --- a/docs/user/intro/import-guide.rst +++ b/docs/user/intro/import-guide.rst @@ -86,7 +86,7 @@ See our :doc:`/config-file/index` docs for more details. Using a configuration file :doc:`is required from September 2023 `. It is also important to note that the default version of Sphinx is ``v1.8.5``. -We recommend to set the version your project uses :doc:`explicitily with pinned dependencies `. +We recommend to set the version your project uses :doc:`explicitly with pinned dependencies `. Read the Docs will host multiple versions of your code. You can read more about how to use this well on our :doc:`/versions` page. diff --git a/docs/user/science.rst b/docs/user/science.rst index e27be70a953..65bdc85abfd 100644 --- a/docs/user/science.rst +++ b/docs/user/science.rst @@ -130,7 +130,7 @@ Here are some popular activities that are well-supported by Jupyter Book: Ready to get started? """"""""""""""""""""" -.. Note that this is a deliberate repitition of a previous segment. Should it repeat? Maybe not, but for now it's nice to be sure that people see it. +.. Note that this is a deliberate repetition of a previous segment. Should it repeat? Maybe not, but for now it's nice to be sure that people see it. * All new to this? Take the official :external+jupyterbook:doc:`Jupyter Book Tutorial » ` * Curious for practical code? See the list of :doc:`example projects » ` diff --git a/docs/user/server-side-search/api.rst b/docs/user/server-side-search/api.rst index 18a36f5ddf2..d7f6b02af4e 100644 --- a/docs/user/server-side-search/api.rst +++ b/docs/user/server-side-search/api.rst @@ -153,7 +153,7 @@ with the following changes: When searching on a parent project, results from their subprojects won't be included automatically, -to include results from subprojects use the ``subprojects`` paramater. +to include results from subprojects use the ``subprojects`` parameter. Authentication and authorization -------------------------------- diff --git a/docs/user/tutorial/index.rst b/docs/user/tutorial/index.rst index f4fcf889900..5de8c651f22 100644 --- a/docs/user/tutorial/index.rst +++ b/docs/user/tutorial/index.rst @@ -206,7 +206,7 @@ If you now click on :guilabel:`View docs`, you will see your documentation live! If you don't see the ad, you might be using an ad blocker. Our EthicalAds network respects your privacy, doesn't target you, - and tries to be as unobstrusive as possible, + and tries to be as unobtrusive as possible, so we would like to kindly ask you to :doc:`not block us ` |:heart:| Basic configuration changes diff --git a/readthedocs/api/v2/views/integrations.py b/readthedocs/api/v2/views/integrations.py index 824e1536195..e6b9b3de3bd 100644 --- a/readthedocs/api/v2/views/integrations.py +++ b/readthedocs/api/v2/views/integrations.py @@ -309,7 +309,7 @@ def get_closed_external_version_response(self, project): def update_default_branch(self, default_branch): """ - Update the `Version.identifer` for `latest` with the VCS's `default_branch`. + Update the `Version.identifier` for `latest` with the VCS's `default_branch`. The VCS's `default_branch` is the branch cloned when there is no specific branch specified (e.g. `git clone `). diff --git a/readthedocs/api/v2/views/model_views.py b/readthedocs/api/v2/views/model_views.py index 46c8e28c38b..f61b28d0ff4 100644 --- a/readthedocs/api/v2/views/model_views.py +++ b/readthedocs/api/v2/views/model_views.py @@ -156,7 +156,7 @@ def get_queryset(self): If an API key is present, we filter by the project associated with the key. Otherwise, we filter using our API manager method. - With this we check if the user/api key is authorized to acccess the object. + With this we check if the user/api key is authorized to access the object. """ api_key = getattr(self.request, "build_api_key", None) if api_key: @@ -247,7 +247,7 @@ def get_serializer_class(self): """ Return the proper serializer for UI and Admin. - This ViewSet has a sligtly different pattern since we want to + This ViewSet has a slightly different pattern since we want to pre-process the `command` field before returning it to the user, and we also want to have a specific serializer for admins. """ diff --git a/readthedocs/api/v3/serializers.py b/readthedocs/api/v3/serializers.py index a12ab8ad6fd..ab8fd30e572 100644 --- a/readthedocs/api/v3/serializers.py +++ b/readthedocs/api/v3/serializers.py @@ -575,7 +575,7 @@ def _validate_remote_repository(self, data): Validate connection between `Project` and `RemoteRepository`. We don't do anything in community, but we do ensure this relationship - is posible before creating the `Project` on commercial when the + is possible before creating the `Project` on commercial when the organization has VCS SSO enabled. If we cannot ensure the relationship here, this method should raise a diff --git a/readthedocs/builds/migrations/0007_add-automation-rules.py b/readthedocs/builds/migrations/0007_add-automation-rules.py index f5ac24656c3..e4de8147eb5 100644 --- a/readthedocs/builds/migrations/0007_add-automation-rules.py +++ b/readthedocs/builds/migrations/0007_add-automation-rules.py @@ -66,7 +66,7 @@ class Migration(migrations.Migration): "action_arg", models.CharField( blank=True, - help_text="Value used for the action to perfom an operation", + help_text="Value used for the action to perform an operation", max_length=255, null=True, verbose_name="Action argument", diff --git a/readthedocs/builds/models.py b/readthedocs/builds/models.py index c6cef2b9587..84039aba5b6 100644 --- a/readthedocs/builds/models.py +++ b/readthedocs/builds/models.py @@ -892,7 +892,7 @@ def config(self): """ # TODO: now that we are using a proper JSONField here, we could # probably change this field to be a ForeignKey to avoid repeating the - # config file over and over again and re-use them to save db data as + # config file over and over again and reuse them to save db data as # well if self._config and self.CONFIG_KEY in self._config: return ( @@ -1116,7 +1116,7 @@ class BuildCommandResultMixin: Mixin for common command result methods/properties. Shared methods between the database model :py:class:`BuildCommandResult` and - non-model respresentations of build command results from the API + non-model representations of build command results from the API """ @property @@ -1236,7 +1236,7 @@ class VersionAutomationRule(PolymorphicModel, TimeStampedModel): ) action_arg = models.CharField( _("Action argument"), - help_text=_("Value used for the action to perfom an operation"), + help_text=_("Value used for the action to perform an operation"), max_length=255, null=True, blank=True, diff --git a/readthedocs/builds/version_slug.py b/readthedocs/builds/version_slug.py index 3c15f0c1f8c..d7be140eba3 100644 --- a/readthedocs/builds/version_slug.py +++ b/readthedocs/builds/version_slug.py @@ -112,7 +112,7 @@ def slugify(self, content): space_replacement="-", ) - # Remove first character wile it's an invalid character for the + # Remove first character while it's an invalid character for the # beginning of the slug slugified = slugified.lstrip(self.ok_chars) diff --git a/readthedocs/config/config.py b/readthedocs/config/config.py index 2452621e647..53cf01260d7 100644 --- a/readthedocs/config/config.py +++ b/readthedocs/config/config.py @@ -530,7 +530,7 @@ def validate_doc_types(self): Validates that the user only have one type of documentation. This should be called before validating ``sphinx`` or ``mkdocs`` to - avoid innecessary validations. + avoid unnecessary validations. """ with self.catch_validation_error("."): if "sphinx" in self._raw_config and "mkdocs" in self._raw_config: diff --git a/readthedocs/config/notifications.py b/readthedocs/config/notifications.py index c43c148edb6..0396af277df 100644 --- a/readthedocs/config/notifications.py +++ b/readthedocs/config/notifications.py @@ -142,7 +142,7 @@ body=_( textwrap.dedent( """ - The name of the package {{pacakge}} is invalid. + The name of the package {{package}} is invalid. """ ).strip(), ), diff --git a/readthedocs/conftest.py b/readthedocs/conftest.py index 8a23a39bcd3..0a334657952 100644 --- a/readthedocs/conftest.py +++ b/readthedocs/conftest.py @@ -21,5 +21,5 @@ def clear_cache(): """ # Code run before each test yield - # Code run afer each test + # Code run after each test cache.clear() diff --git a/readthedocs/core/filters.py b/readthedocs/core/filters.py index a24db416165..177cdc93ca8 100644 --- a/readthedocs/core/filters.py +++ b/readthedocs/core/filters.py @@ -66,7 +66,7 @@ def get_filterset(self, **kwargs): :param kwargs: Arguments to pass to ``FilterSet.__init__`` """ # This method overrides the method from FilterMixin with differing - # arguments. We can switch this later if we ever resturcture the view + # arguments. We can switch this later if we ever restructure the view # pylint: disable=arguments-differ if not getattr(self, "filterset", None): filterset_class = self.get_filterset_class() diff --git a/readthedocs/core/management/commands/contact_owners.py b/readthedocs/core/management/commands/contact_owners.py index a4731bb7151..e40c69a1f0b 100644 --- a/readthedocs/core/management/commands/contact_owners.py +++ b/readthedocs/core/management/commands/contact_owners.py @@ -69,7 +69,7 @@ class Command(BaseCommand): .. note:: If you need to extend the behavior or add a new use case, - we recommend creating a simple script file that re-use the methods + we recommend creating a simple script file that reuse the methods and functions from this command. This is an example to contact Domain owners: https://gist.github.com/humitos/3e08ed4763a9312f5c0a9a997ea95a42 diff --git a/readthedocs/core/utils/filesystem.py b/readthedocs/core/utils/filesystem.py index 805120c409f..7008b1f8b75 100644 --- a/readthedocs/core/utils/filesystem.py +++ b/readthedocs/core/utils/filesystem.py @@ -162,7 +162,7 @@ def safe_rmtree(path, *args, **kwargs): """ Wrapper around shutil.rmtree to check for symlinks. - shutil.rmtree doens't follow symlinks by default, + shutil.rmtree doesn't follow symlinks by default, this function just logs in case users are trying to use symlinks. https://docs.python.org/3/library/shutil.html#shutil.rmtree diff --git a/readthedocs/doc_builder/director.py b/readthedocs/doc_builder/director.py index 806d264075b..8cc6bd6ed0f 100644 --- a/readthedocs/doc_builder/director.py +++ b/readthedocs/doc_builder/director.py @@ -590,7 +590,7 @@ def install_build_tools(self): ] ): # We cap setuptools to avoid breakage of projects - # relying on setup.py invokations, + # relying on setup.py invocations, # see https://github.com/readthedocs/readthedocs.org/issues/8659 setuptools_version = ( "setuptools<58.3.0" diff --git a/readthedocs/doc_builder/environments.py b/readthedocs/doc_builder/environments.py index c1f723fb423..d39d7fd0d2f 100644 --- a/readthedocs/doc_builder/environments.py +++ b/readthedocs/doc_builder/environments.py @@ -416,7 +416,7 @@ class BaseBuildEnvironment: :param version: Project version that is being built :param build: Build instance :param environment: shell environment variables - :param record: whether or not record a build commands in the databse via + :param record: whether or not record a build commands in the database via the API. The only case where we want this to be `False` is when instantiating this class from `sync_repository_task` because it's a background task that does not expose commands to the user. diff --git a/readthedocs/notifications/messages.py b/readthedocs/notifications/messages.py index b359fb15b59..0a89783c41e 100644 --- a/readthedocs/notifications/messages.py +++ b/readthedocs/notifications/messages.py @@ -294,7 +294,7 @@ def get_rendered_body(self): ), Message( id=BuildUserError.BUILD_OUTPUT_OLD_DIRECTORY_USED, - header=_("Your project is outputing files in an old directory"), + header=_("Your project is outputting files in an old directory"), body=_( textwrap.dedent( """ diff --git a/readthedocs/notifications/models.py b/readthedocs/notifications/models.py index be49bf21aeb..63685f3645c 100644 --- a/readthedocs/notifications/models.py +++ b/readthedocs/notifications/models.py @@ -20,7 +20,7 @@ class Notification(TimeStampedModel): message_id = models.CharField(max_length=128) # UNREAD: the notification was not shown to the user - # READ: the notifiation was shown + # READ: the notification was shown # DISMISSED: the notification was shown and the user dismissed it # CANCELLED: removed automatically because the user has done the action required (e.g. paid the subscription) state = models.CharField( @@ -35,7 +35,7 @@ class Notification(TimeStampedModel): db_index=True, ) - # Makes the notification imposible to dismiss (useful for Build notifications) + # Makes the notification impossible to dismiss (useful for Build notifications) dismissable = models.BooleanField(default=False) # Show the notification under the bell icon for the user diff --git a/readthedocs/oauth/tasks.py b/readthedocs/oauth/tasks.py index c98ba45ce80..7ca8293f719 100644 --- a/readthedocs/oauth/tasks.py +++ b/readthedocs/oauth/tasks.py @@ -66,7 +66,7 @@ def sync_remote_repositories_organizations(organization_slugs=None): It will trigger one `sync_remote_repositories` task per user. - :param organization_slugs: list containg organization's slugs to sync. If + :param organization_slugs: list containing organization's slugs to sync. If not passed, all organizations with ALLAUTH SSO enabled will be synced :type organization_slugs: list diff --git a/readthedocs/organizations/tests/test_filters.py b/readthedocs/organizations/tests/test_filters.py index ee3df5a4198..e07a5a2fff8 100644 --- a/readthedocs/organizations/tests/test_filters.py +++ b/readthedocs/organizations/tests/test_filters.py @@ -567,7 +567,7 @@ def test_filtered_queryset_team_invalid_choice(self, user, organization): indirect=True, ) def test_team_filter_choices(self, user, organization, teams): - """Team filter choices limited to organization teams with permisisons.""" + """Team filter choices limited to organization teams with permissions.""" filter = self.get_filterset_for_user( user, organization=organization, diff --git a/readthedocs/organizations/tests/test_forms.py b/readthedocs/organizations/tests/test_forms.py index 847db520ed9..3efabe8a971 100644 --- a/readthedocs/organizations/tests/test_forms.py +++ b/readthedocs/organizations/tests/test_forms.py @@ -122,7 +122,7 @@ def test_add_fresh_member_by_email(self): def test_add_duplicate_invite_by_email(self): """Add duplicate invite by email.""" self.assertEqual(self.organization.teams.count(), 1) - email = "non-existant@example.com" + email = "non-existent@example.com" self.assertEqual(Invitation.objects.all().count(), 0) diff --git a/readthedocs/projects/tasks/builds.py b/readthedocs/projects/tasks/builds.py index 4d3e38b8bb7..e584f268681 100644 --- a/readthedocs/projects/tasks/builds.py +++ b/readthedocs/projects/tasks/builds.py @@ -83,11 +83,11 @@ class TaskData: """ - Object to store all data related to a Celery task excecution. + Object to store all data related to a Celery task execution. - We use this object from inside the task to store data while we are runnig + We use this object from inside the task to store data while we are running the task. This is to avoid using `self.` inside the task due to its - limitations: it's instanciated once and that instance is re-used for all + limitations: it's instantiated once and that instance is re-used for all the tasks ran. This could produce sharing instance state between two different and unrelated tasks. @@ -773,7 +773,7 @@ def update_build(self, state=None): log.exception("Error while updating the build object.", state=state) def execute(self): - # Clonning + # Cloning self.update_build(state=BUILD_STATE_CLONING) # TODO: remove the ``create_vcs_environment`` hack. Ideally, this should be diff --git a/readthedocs/proxito/middleware.py b/readthedocs/proxito/middleware.py index b6807967a74..f9670245f7f 100644 --- a/readthedocs/proxito/middleware.py +++ b/readthedocs/proxito/middleware.py @@ -328,7 +328,7 @@ def add_cors_headers(self, request, response): """ # TODO: se should add these headers to files from docs only, # proxied APIs and other endpoints should not have CORS headers. - # These attributes aren't currently set for proxied APIs, but we shuold + # These attributes aren't currently set for proxied APIs, but we should # find a better way to do this. project_slug = getattr(request, "path_project_slug", "") version_slug = getattr(request, "path_version_slug", "") diff --git a/readthedocs/proxito/tests/test_full.py b/readthedocs/proxito/tests/test_full.py index 6d60009b9aa..9837cd1e6e4 100644 --- a/readthedocs/proxito/tests/test_full.py +++ b/readthedocs/proxito/tests/test_full.py @@ -190,7 +190,7 @@ def test_external_version_serving_old_slugs(self): """ Test external version serving with projects with `--` in their slug. - Some old projects may have been created with a slug containg `--`, + Some old projects may have been created with a slug containing `--`, our current code doesn't allow these type of slugs. """ fixture.get( diff --git a/readthedocs/proxito/views/hosting.py b/readthedocs/proxito/views/hosting.py index 8500715f505..15708dc71dd 100644 --- a/readthedocs/proxito/views/hosting.py +++ b/readthedocs/proxito/views/hosting.py @@ -35,7 +35,7 @@ class ClientError(Exception): VERSION_NOT_CURRENTLY_SUPPORTED = ( "The version specified in 'api-version' is currently not supported" ) - VERSION_INVALID = "The version specifified in 'api-version' is invalid" + VERSION_INVALID = "The version specified in 'api-version' is invalid" class BaseReadTheDocsConfigJson(CDNCacheTagsMixin, APIView): @@ -327,13 +327,13 @@ def _v0(self, project, version, build, filename, url, user): "external_version_warning": { "enabled": project.addons.external_version_warning_enabled, # NOTE: I think we are moving away from these selectors - # since we are doing floating noticications now. + # since we are doing floating notifications now. # "query_selector": "[role=main]", }, "non_latest_version_warning": { "enabled": project.addons.stable_latest_version_warning_enabled, # NOTE: I think we are moving away from these selectors - # since we are doing floating noticications now. + # since we are doing floating notifications now. # "query_selector": "[role=main]", "versions": list( versions_active_built_not_hidden.values_list("slug", flat=True) @@ -472,7 +472,7 @@ def _v0(self, project, version, build, filename, url, user): { "ethicalads": { "enabled": project.addons.ethicalads_enabled, - # NOTE: this endpoint is not authenticated, the user checks are done over an annonymous user for now + # NOTE: this endpoint is not authenticated, the user checks are done over an anonymous user for now # # NOTE: it requires ``settings.USE_PROMOS=True`` to return ``ad_free=false`` here "ad_free": is_ad_free_user(AnonymousUser()) diff --git a/readthedocs/rtd_tests/tests/test_api.py b/readthedocs/rtd_tests/tests/test_api.py index 027cc53607d..a5dbd67c06f 100644 --- a/readthedocs/rtd_tests/tests/test_api.py +++ b/readthedocs/rtd_tests/tests/test_api.py @@ -541,7 +541,7 @@ def test_get_raw_log_building(self): self.assertIn("Commit: {}".format(build.commit), resp.content.decode()) self.assertIn("Date: ", resp.content.decode()) self.assertIn("State: building", resp.content.decode()) - self.assertIn("Success: Unknow", resp.content.decode()) + self.assertIn("Success: Unknown", resp.content.decode()) self.assertIn("[rtd-command-info]", resp.content.decode()) self.assertIn( "python setup.py install\nInstalling dependencies...", diff --git a/readthedocs/rtd_tests/tests/test_automation_rules.py b/readthedocs/rtd_tests/tests/test_automation_rules.py index a6b9df0e507..55716ec0c50 100644 --- a/readthedocs/rtd_tests/tests/test_automation_rules.py +++ b/readthedocs/rtd_tests/tests/test_automation_rules.py @@ -400,7 +400,7 @@ def test_add_rule_regex(self): assert self.project.automation_rules.count() == 2 assert rule.priority == 0 - # Adding a rule with a not secuencial priority + # Adding a rule with a not sequential priority rule = get( RegexAutomationRule, description="Third rule", diff --git a/readthedocs/rtd_tests/tests/test_doc_building.py b/readthedocs/rtd_tests/tests/test_doc_building.py index 128dab250d3..58ba5faf369 100644 --- a/readthedocs/rtd_tests/tests/test_doc_building.py +++ b/readthedocs/rtd_tests/tests/test_doc_building.py @@ -233,7 +233,7 @@ def test_result(self): def test_missing_command(self): """Test missing command.""" - path = os.path.join("non-existant", str(uuid.uuid4())) + path = os.path.join("non-existent", str(uuid.uuid4())) self.assertFalse(os.path.exists(path)) cmd = BuildCommand(path) cmd.run() diff --git a/readthedocs/rtd_tests/utils.py b/readthedocs/rtd_tests/utils.py index 4c940367ac4..022fda710a0 100644 --- a/readthedocs/rtd_tests/utils.py +++ b/readthedocs/rtd_tests/utils.py @@ -214,7 +214,7 @@ def delete_git_branch(directory, branch): def create_git_submodule( directory, submodule, - msg="Add realative submodule", + msg="Add relative submodule", branch="master", ): env = environ.copy() diff --git a/readthedocs/search/tests/data/sphinx/in/page.html b/readthedocs/search/tests/data/sphinx/in/page.html index 224d82846c9..658d8638a5b 100644 --- a/readthedocs/search/tests/data/sphinx/in/page.html +++ b/readthedocs/search/tests/data/sphinx/in/page.html @@ -151,7 +151,7 @@

Footnotes and domains - +
1(1,2)
diff --git a/readthedocs/settings/docker_compose.py b/readthedocs/settings/docker_compose.py index 1b2a99cd405..08d50a4309f 100644 --- a/readthedocs/settings/docker_compose.py +++ b/readthedocs/settings/docker_compose.py @@ -57,7 +57,7 @@ class DockerBaseSettings(CommunityBaseSettings): def DOCROOT(self): # Add an extra directory level using the container's hostname. # This allows us to run development environment with multiple builders (`--scale-build=2` or more), - # and avoid the builders overwritting each others when building the same project/version + # and avoid the builders overwriting each others when building the same project/version return os.path.join(super().DOCROOT, socket.gethostname()) # New templates @@ -210,7 +210,7 @@ def DATABASES(self): # noqa @property def SOCIALACCOUNT_PROVIDERS(self): - """Allow settings social account settigs from the host system.""" + """Allow settings social account settings from the host system.""" providers = self._SOCIALACCOUNT_PROVIDERS for provider in providers.keys(): try: diff --git a/readthedocs/subscriptions/tests/test_views.py b/readthedocs/subscriptions/tests/test_views.py index c6517207545..504d597c65d 100644 --- a/readthedocs/subscriptions/tests/test_views.py +++ b/readthedocs/subscriptions/tests/test_views.py @@ -113,7 +113,7 @@ def test_active_subscription(self): self.assertEqual(resp.context["stripe_subscription"], self.stripe_subscription) self.assertContains(resp, "active") self.assertNotContains(resp, "Extra products:") - # The subscribe form isn't shown, but the manage susbcription button is. + # The subscribe form isn't shown, but the manage subscription button is. self.assertContains(resp, "Manage Subscription") self.assertNotContains(resp, "Create Subscription") @@ -131,7 +131,7 @@ def test_active_subscription_with_extra_product(self): self.assertEqual(resp.context["stripe_subscription"], self.stripe_subscription) self.assertContains(resp, "active") self.assertContains(resp, "Extra products:") - # The subscribe form isn't shown, but the manage susbcription button is. + # The subscribe form isn't shown, but the manage subscription button is. self.assertContains(resp, "Manage Subscription") self.assertNotContains(resp, "Create Subscription") diff --git a/readthedocs/telemetry/collectors.py b/readthedocs/telemetry/collectors.py index 4b32644654e..471dde3a1e1 100644 --- a/readthedocs/telemetry/collectors.py +++ b/readthedocs/telemetry/collectors.py @@ -17,7 +17,7 @@ class BuildDataCollector: """ Build data collector. - Collect data from a runnig build. + Collect data from a running build. """ def __init__(self, environment): @@ -58,7 +58,7 @@ def run(self, *args, **kwargs): def collect(self): """ - Collect all relevant data from the runnig build. + Collect all relevant data from the running build. Data that can be extracted from the database (project/organization) isn't collected here. diff --git a/readthedocs/templates/projects/notifications/deprecated_github_webhook_email.html b/readthedocs/templates/projects/notifications/deprecated_github_webhook_email.html index b55a906c932..31da9541464 100644 --- a/readthedocs/templates/projects/notifications/deprecated_github_webhook_email.html +++ b/readthedocs/templates/projects/notifications/deprecated_github_webhook_email.html @@ -4,7 +4,7 @@

To continue building your Read the Docs project on changes to your repository, you will need to add a new webhook on your GitHub repository. You can either connect your GitHub account and configure a GitHub webhook integration, or you can add a generic webhook integration.

-

You can find more information on our webhook intergrations in our documentation, at:

+

You can find more information on our webhook integrations in our documentation, at:

{% comment %}Plain text link because of text version of email{% endcomment %}

https://docs.readthedocs.io/page/webhooks.html#webhook-github-services

diff --git a/readthedocs/templates/projects/notifications/deprecated_github_webhook_email.txt b/readthedocs/templates/projects/notifications/deprecated_github_webhook_email.txt index 07eeb747b5b..3ced4a361fb 100644 --- a/readthedocs/templates/projects/notifications/deprecated_github_webhook_email.txt +++ b/readthedocs/templates/projects/notifications/deprecated_github_webhook_email.txt @@ -9,7 +9,7 @@ you will need to add a new webhook on your GitHub repository. You can either connect your GitHub account and configure a GitHub webhook integration, or you can add a generic webhook integration. -You can find more information on our webhook intergrations in our documentation, at: +You can find more information on our webhook integrations in our documentation, at: https://docs.readthedocs.io/page/webhooks.html#webhook-github-services {% endblock %} diff --git a/readthedocs/templates/projects/project_dashboard_base.html b/readthedocs/templates/projects/project_dashboard_base.html index 875c1080aed..adfde6d7717 100644 --- a/readthedocs/templates/projects/project_dashboard_base.html +++ b/readthedocs/templates/projects/project_dashboard_base.html @@ -77,7 +77,7 @@

{% trans "Projects" %}

{% trans "passing" %} {% else %} {% trans "failing" %} - {# TODO: What whould be show here when "not build.sucess and cancelled"? #} + {# TODO: What would be show here when "not build.success and cancelled"? #} {% endif %} {% else %} {% trans "No builds yet" %} diff --git a/requirements/pip.in b/requirements/pip.in index ce480229257..fdd3cde7a97 100644 --- a/requirements/pip.in +++ b/requirements/pip.in @@ -76,7 +76,7 @@ redis celery==5.2.7 django-celery-beat -# Docker images need a dependency explicity marked for tzdata in order to have +# Docker images need a dependency explicitly marked for tzdata in order to have # necessary timezone data. # https://github.com/readthedocs/readthedocs.org/issues/10453 # TODO: remove this dependency once we upgrade Celery. It should auto-install it. diff --git a/scripts/compile_version_upload_s3.sh b/scripts/compile_version_upload_s3.sh index e9f30458b5f..8d1dd6e3f50 100755 --- a/scripts/compile_version_upload_s3.sh +++ b/scripts/compile_version_upload_s3.sh @@ -6,7 +6,7 @@ # This script automates the process to build and upload a Python/Node/Rust/Go # version and upload it to S3 making it available for the builders. When a # pre-compiled version is available in the cache, builds are faster because they -# don't have to donwload and compile the requested version. +# don't have to download and compile the requested version. # # # LOCAL DEVELOPMENT ENVIRONMENT