[{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12136","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12136/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12136/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12136/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12136","id":2193905322,"node_id":"PR_kwDOAbYXYc5qCIOU","number":12136,"title":"🔧 Setup `ruff format` (initially excluding all files)","user":{"login":"chrisjsewell","id":2997570,"node_id":"MDQ6VXNlcjI5OTc1NzA=","avatar_url":"https://avatars.githubusercontent.com/u/2997570?v=4","gravatar_id":"","url":"https://api.github.com/users/chrisjsewell","html_url":"https://github.com/chrisjsewell","followers_url":"https://api.github.com/users/chrisjsewell/followers","following_url":"https://api.github.com/users/chrisjsewell/following{/other_user}","gists_url":"https://api.github.com/users/chrisjsewell/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisjsewell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisjsewell/subscriptions","organizations_url":"https://api.github.com/users/chrisjsewell/orgs","repos_url":"https://api.github.com/users/chrisjsewell/repos","events_url":"https://api.github.com/users/chrisjsewell/events{/privacy}","received_events_url":"https://api.github.com/users/chrisjsewell/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2024-03-19T03:04:10Z","updated_at":"2024-03-19T07:40:33Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12136","html_url":"https://github.com/sphinx-doc/sphinx/pull/12136","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12136.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12136.patch","merged_at":null},"body":"Lets get this show oin the road!\r\nI think there is no reason to not have a formatter and, especially as we are already adding ruff linting, `ruff format` is a no-brainer.\r\n\r\nLets add it like this first, with all files excluded, so we don't introduce merge conflicts for outstanding PRs etc.\r\nThen we can gradually un-exclude files as we go.\r\n","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12136/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":1,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12136/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12135","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12135/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12135/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12135/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12135","id":2193856382,"node_id":"PR_kwDOAbYXYc5qB94U","number":12135,"title":"🔧 Add `all-checks` rule to Makefile","user":{"login":"chrisjsewell","id":2997570,"node_id":"MDQ6VXNlcjI5OTc1NzA=","avatar_url":"https://avatars.githubusercontent.com/u/2997570?v=4","gravatar_id":"","url":"https://api.github.com/users/chrisjsewell","html_url":"https://github.com/chrisjsewell","followers_url":"https://api.github.com/users/chrisjsewell/followers","following_url":"https://api.github.com/users/chrisjsewell/following{/other_user}","gists_url":"https://api.github.com/users/chrisjsewell/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisjsewell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisjsewell/subscriptions","organizations_url":"https://api.github.com/users/chrisjsewell/orgs","repos_url":"https://api.github.com/users/chrisjsewell/repos","events_url":"https://api.github.com/users/chrisjsewell/events{/privacy}","received_events_url":"https://api.github.com/users/chrisjsewell/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-19T02:10:38Z","updated_at":"2024-03-19T02:10:57Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12135","html_url":"https://github.com/sphinx-doc/sphinx/pull/12135","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12135.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12135.patch","merged_at":null},"body":"just for dev ease","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12135/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12135/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12134","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12134/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12134/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12134/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12134","id":2193791415,"node_id":"PR_kwDOAbYXYc5qBwTr","number":12134,"title":"👌 Set colorized output with a context manager","user":{"login":"chrisjsewell","id":2997570,"node_id":"MDQ6VXNlcjI5OTc1NzA=","avatar_url":"https://avatars.githubusercontent.com/u/2997570?v=4","gravatar_id":"","url":"https://api.github.com/users/chrisjsewell","html_url":"https://github.com/chrisjsewell","followers_url":"https://api.github.com/users/chrisjsewell/followers","following_url":"https://api.github.com/users/chrisjsewell/following{/other_user}","gists_url":"https://api.github.com/users/chrisjsewell/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisjsewell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisjsewell/subscriptions","organizations_url":"https://api.github.com/users/chrisjsewell/orgs","repos_url":"https://api.github.com/users/chrisjsewell/repos","events_url":"https://api.github.com/users/chrisjsewell/events{/privacy}","received_events_url":"https://api.github.com/users/chrisjsewell/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-19T01:01:09Z","updated_at":"2024-03-19T02:43:12Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"draft":true,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12134","html_url":"https://github.com/sphinx-doc/sphinx/pull/12134","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12134.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12134.patch","merged_at":null},"body":"Rather than having singular `nocolor` and `coloron` functions (left for back-compatibility, introduce a `colorize_output` context manager, for temporarily enabling / disabling colorized output streams, on entering, then return to the initial state on exit.\r\n\r\nTwo outstandung questions:\r\n\r\n1. double-check working of colorama init/deinit (see https://github.com/tartley/colorama/blob/master/colorama/initialise.py#L23)\r\n2. currently `make_app` is now set to always have color deactivated (which helps for checking output strings), but maybe this should be configurable?","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12134/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12134/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12133","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12133/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12133/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12133/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12133","id":2193653673,"node_id":"PR_kwDOAbYXYc5qBRZD","number":12133,"title":"👌 Handle external references pointing to object types","user":{"login":"chrisjsewell","id":2997570,"node_id":"MDQ6VXNlcjI5OTc1NzA=","avatar_url":"https://avatars.githubusercontent.com/u/2997570?v=4","gravatar_id":"","url":"https://api.github.com/users/chrisjsewell","html_url":"https://github.com/chrisjsewell","followers_url":"https://api.github.com/users/chrisjsewell/followers","following_url":"https://api.github.com/users/chrisjsewell/following{/other_user}","gists_url":"https://api.github.com/users/chrisjsewell/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisjsewell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisjsewell/subscriptions","organizations_url":"https://api.github.com/users/chrisjsewell/orgs","repos_url":"https://api.github.com/users/chrisjsewell/repos","events_url":"https://api.github.com/users/chrisjsewell/events{/privacy}","received_events_url":"https://api.github.com/users/chrisjsewell/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-18T23:25:23Z","updated_at":"2024-03-18T23:49:02Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12133","html_url":"https://github.com/sphinx-doc/sphinx/pull/12133","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12133.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12133.patch","merged_at":null},"body":"This PR fixes the issue of `objects.inv` denoting object names, whilst the `external` role only allows for role names. \r\n\r\nAs an example, take the `objects.inv` for the sphinx documentation, which contains:\r\n\r\n```\r\npy:function\r\n compile : usage/domains/python.html#compile\r\n```\r\n\r\nA user might understandably expect that they could reference this using `` :external:py:function:`compile` ``, but actually this would currently error with:\r\n\r\n```\r\nWARNING: role for external cross-reference not found: py:function\r\n```\r\n\r\nthis is because, `function` is the object type, yet `external` expects the related role name `func` 😒\r\nIt should not be necessary for the user to know about this distinction, and in fact all the documentation talks about object types, not role names: https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html#explicitly-reference-external-objects\r\n\r\nIn this PR, we add logic, to first look if the name relates to a role name (as previously, to not be back-breaking) but, if not, then also look if the name relates to an object that has a known role and, if so, use that.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12133/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12133/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12132","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12132/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12132/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12132/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12132","id":2193365776,"node_id":"PR_kwDOAbYXYc5qAPCw","number":12132,"title":"🔧 Remove unused regexes","user":{"login":"chrisjsewell","id":2997570,"node_id":"MDQ6VXNlcjI5OTc1NzA=","avatar_url":"https://avatars.githubusercontent.com/u/2997570?v=4","gravatar_id":"","url":"https://api.github.com/users/chrisjsewell","html_url":"https://github.com/chrisjsewell","followers_url":"https://api.github.com/users/chrisjsewell/followers","following_url":"https://api.github.com/users/chrisjsewell/following{/other_user}","gists_url":"https://api.github.com/users/chrisjsewell/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisjsewell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisjsewell/subscriptions","organizations_url":"https://api.github.com/users/chrisjsewell/orgs","repos_url":"https://api.github.com/users/chrisjsewell/repos","events_url":"https://api.github.com/users/chrisjsewell/events{/privacy}","received_events_url":"https://api.github.com/users/chrisjsewell/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-18T21:28:42Z","updated_at":"2024-03-18T21:31:44Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12132","html_url":"https://github.com/sphinx-doc/sphinx/pull/12132","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12132.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12132.patch","merged_at":null},"body":"These appear to have been copied to class variables at some point, but then not removed as global variables\r\n\r\n","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12132/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12132/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12131","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12131/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12131/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12131/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12131","id":2193139652,"node_id":"PR_kwDOAbYXYc5p_b3O","number":12131,"title":"✨ Add `show_warning_types` configuration variable","user":{"login":"chrisjsewell","id":2997570,"node_id":"MDQ6VXNlcjI5OTc1NzA=","avatar_url":"https://avatars.githubusercontent.com/u/2997570?v=4","gravatar_id":"","url":"https://api.github.com/users/chrisjsewell","html_url":"https://github.com/chrisjsewell","followers_url":"https://api.github.com/users/chrisjsewell/followers","following_url":"https://api.github.com/users/chrisjsewell/following{/other_user}","gists_url":"https://api.github.com/users/chrisjsewell/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisjsewell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisjsewell/subscriptions","organizations_url":"https://api.github.com/users/chrisjsewell/orgs","repos_url":"https://api.github.com/users/chrisjsewell/repos","events_url":"https://api.github.com/users/chrisjsewell/events{/privacy}","received_events_url":"https://api.github.com/users/chrisjsewell/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-18T19:49:32Z","updated_at":"2024-03-18T21:34:01Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12131","html_url":"https://github.com/sphinx-doc/sphinx/pull/12131","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12131.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12131.patch","merged_at":null},"body":"This PR add the `show_warning_types` config variable which when set to `True`, prepends the type and subtype (if set) to warning messages.\r\nFor example:\r\n\r\n```\r\nWARNING: py:class reference target not found: TextElement [ref.class]\r\n```\r\n\r\nThis follows the best practices of other tools, such as mypy and ruff to provide the user greater information on the warning:\r\n\r\n1. To provide greater specificity for the origin of the warning, particularly for extensions which utilise warning types. Currently these extensions have to provide bespoke solutions for showing the warning origin (see e.g. https://myst-parser.readthedocs.io/en/latest/configuration.html#build-warnings)\r\n\r\n2. To encourage users to deal with warnings. I strongly recommend for users to run `sphinx-build -nW --keep-going`, then fix all warnings. Practically this is not always possible and so the use of `show_warning_types` and `suppress_warnings`, provides a way for users to deal with most warnings, whilst being able to suppress \"less important\" ones\r\n\r\nNote currently, the default is `False`, i.e. they will still not be shown, which is done in order to introduce any breaking changes.\r\nBut, like https://github.com/python/mypy/pull/13542, I would strongly encourage this eventualy defaulting to `True`.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12131/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12131/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12130","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12130/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12130/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12130/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12130","id":2192829042,"node_id":"I_kwDOAbYXYc6Cs-py","number":12130,"title":"Have one clear API for calling `Sphinx` without unintended side-effects (deprecate `SphinxTestApp`?)","user":{"login":"chrisjsewell","id":2997570,"node_id":"MDQ6VXNlcjI5OTc1NzA=","avatar_url":"https://avatars.githubusercontent.com/u/2997570?v=4","gravatar_id":"","url":"https://api.github.com/users/chrisjsewell","html_url":"https://github.com/chrisjsewell","followers_url":"https://api.github.com/users/chrisjsewell/followers","following_url":"https://api.github.com/users/chrisjsewell/following{/other_user}","gists_url":"https://api.github.com/users/chrisjsewell/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisjsewell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisjsewell/subscriptions","organizations_url":"https://api.github.com/users/chrisjsewell/orgs","repos_url":"https://api.github.com/users/chrisjsewell/repos","events_url":"https://api.github.com/users/chrisjsewell/events{/privacy}","received_events_url":"https://api.github.com/users/chrisjsewell/received_events","type":"User","site_admin":false},"labels":[{"id":162455256,"node_id":"MDU6TGFiZWwxNjI0NTUyNTY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/api","name":"api","color":"855686","default":false,"description":""}],"state":"open","locked":false,"assignee":{"login":"chrisjsewell","id":2997570,"node_id":"MDQ6VXNlcjI5OTc1NzA=","avatar_url":"https://avatars.githubusercontent.com/u/2997570?v=4","gravatar_id":"","url":"https://api.github.com/users/chrisjsewell","html_url":"https://github.com/chrisjsewell","followers_url":"https://api.github.com/users/chrisjsewell/followers","following_url":"https://api.github.com/users/chrisjsewell/following{/other_user}","gists_url":"https://api.github.com/users/chrisjsewell/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisjsewell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisjsewell/subscriptions","organizations_url":"https://api.github.com/users/chrisjsewell/orgs","repos_url":"https://api.github.com/users/chrisjsewell/repos","events_url":"https://api.github.com/users/chrisjsewell/events{/privacy}","received_events_url":"https://api.github.com/users/chrisjsewell/received_events","type":"User","site_admin":false},"assignees":[{"login":"chrisjsewell","id":2997570,"node_id":"MDQ6VXNlcjI5OTc1NzA=","avatar_url":"https://avatars.githubusercontent.com/u/2997570?v=4","gravatar_id":"","url":"https://api.github.com/users/chrisjsewell","html_url":"https://github.com/chrisjsewell","followers_url":"https://api.github.com/users/chrisjsewell/followers","following_url":"https://api.github.com/users/chrisjsewell/following{/other_user}","gists_url":"https://api.github.com/users/chrisjsewell/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisjsewell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisjsewell/subscriptions","organizations_url":"https://api.github.com/users/chrisjsewell/orgs","repos_url":"https://api.github.com/users/chrisjsewell/repos","events_url":"https://api.github.com/users/chrisjsewell/events{/privacy}","received_events_url":"https://api.github.com/users/chrisjsewell/received_events","type":"User","site_admin":false}],"milestone":null,"comments":0,"created_at":"2024-03-18T17:22:20Z","updated_at":"2024-03-18T17:44:40Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"body":"Currenty, there is no clearly documented way to \"properly\" use Sphinx programatically.\r\nBy \"properly\", I mean in a way that could be called multiple times within the same Python interpretor, without any unexpected polluting of the global state, and thus act exactly the same as if each call had been made in a separate Python interpretor\r\n\r\nAt present, there are diverging ways to do this, for the main CLI and for test cases:\r\n\r\n```python\r\nwith patch_docutils(confdir), docutils_namespace():\r\n\tapp = Sphinx(...)\r\n app.build(...)\r\n```\r\n\r\n```python\r\napp = SphinxTestApp(...)\r\napp.build(...)\r\napp.cleanup()\r\n```\r\n\r\nIts not really clear from first appearance, but these actually almost achieve the same thing:\r\n\r\n- `docutils_namespace`, on exit, resets the directives/roles lookups and additional node visitors\r\n- `SphinxTestApp.cleanup` resets the directives/roles lookups and additional node visitors\r\n\r\nHowever, there are also clear differences:\r\n\r\n- `patch_docutils` temporarily patches docutils in a number of ways, that do not appear to be addressed by `SphinxTestApp`, in essence meaning you are not strictly testing the behaviour of Sphinx in production when using `SphinxTestApp`\r\n- `SphinxTestApp.cleanup` does addition global state cleaning, restoring: `sys.path`, `sphinx.locale.translators`, and `sphinx.pycode.ModuleAnalyzer.cache`\r\n\r\nI feel this divergence is unecessary, and ideally there would be one clear way to call sphinx as an API, perhaps something like:\r\n\r\n```python\r\nwith Sphinx.restore_global_state(confdir):\r\n\tapp = Sphinx(...)\r\n\tapp.build(...)\r\n```\r\n\r\ncc @picnixz and @jayaddison for discussion, as it relates to #12093 etc\r\n\r\n---\r\n\r\nAn additional note (as I just mentioned in https://github.com/sphinx-doc/sphinx/pull/12089#issuecomment-2004551050)\r\nis that it is not currently possible to temporarily turn-off colored logging output.\r\nThis is annoying for if you want to assert the content of the warning stream\r\n\r\nIn the CLI it can be turned off, but is then never reset to its previous state: https://github.com/chrisjsewell/sphinx/blob/fa290049515c38e68edda7e8c17be69b8793bb84/sphinx/cmd/build.py#L327\r\n","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12130/reactions","total_count":2,"+1":2,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12130/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12129","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12129/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12129/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12129/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12129","id":2192559237,"node_id":"I_kwDOAbYXYc6Cr8yF","number":12129,"title":"Strings not localized","user":{"login":"dbitouze","id":1032633,"node_id":"MDQ6VXNlcjEwMzI2MzM=","avatar_url":"https://avatars.githubusercontent.com/u/1032633?v=4","gravatar_id":"","url":"https://api.github.com/users/dbitouze","html_url":"https://github.com/dbitouze","followers_url":"https://api.github.com/users/dbitouze/followers","following_url":"https://api.github.com/users/dbitouze/following{/other_user}","gists_url":"https://api.github.com/users/dbitouze/gists{/gist_id}","starred_url":"https://api.github.com/users/dbitouze/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbitouze/subscriptions","organizations_url":"https://api.github.com/users/dbitouze/orgs","repos_url":"https://api.github.com/users/dbitouze/repos","events_url":"https://api.github.com/users/dbitouze/events{/privacy}","received_events_url":"https://api.github.com/users/dbitouze/received_events","type":"User","site_admin":false},"labels":[{"id":162407993,"node_id":"MDU6TGFiZWwxNjI0MDc5OTM=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:bug","name":"type:bug","color":"a11d21","default":false,"description":""},{"id":4602212668,"node_id":"LA_kwDOAbYXYc8AAAABElAxPA","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/i18n","name":"i18n","color":"ededed","default":false,"description":null}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-18T15:38:09Z","updated_at":"2024-03-18T16:43:42Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"body":"### Describe the bug\n\nSome strings are not localized.\r\n\r\nFor instance, with `language = 'fr'` in `conf.py`, the `.../_build/html/search.html?q=test` (see minimal `Sphinx` joined) page displays:\r\n\r\n> Une recherche sur plusieurs mots ne retourne que les résultats contenant tous les mots. \r\n\r\n(in French in the text), but also on the same page:\r\n\r\n> Search finished, found 1 page(s) matching the search query.\r\n\r\n(in English in the text, instead of French) and, this, despite:\r\n```\r\n#: sphinx/themes/basic/static/searchtools.js:118\r\nmsgid \"\"\r\n\"Search finished, found ${resultCount} page(s) matching the search query.\"\r\nmsgstr \"Recherche terminée, ${resultCount} page(s) correspondant à la requête de recherche ont été trouvées.\"\r\n```\r\nin `.../sphinx/locale/fr/LC_MESSAGES/sphinx.po`.\n\n### How to Reproduce\n\nSee [`test-sphinx.tar.gz`](https://github.com/sphinx-doc/sphinx/files/14638627/test-sphinx.tar.gz).\r\n\n\n### Environment Information\n\n```text\nPlatform: linux; (Linux-6.6.18-desktop-1.mga9-x86_64-with-glibc2.36)\r\nPython version: 3.10.11 (main, Apr 16 2023, 03:21:15) [GCC 12.2.1 20230415])\r\nPython implementation: CPython\r\nSphinx version: 7.2.6\r\nDocutils version: 0.20.1\r\nJinja2 version: 3.1.2\r\nPygments version: 2.17.2\n```\n\n\n### Sphinx extensions\n\n_No response_\n\n### Additional context\n\n_No response_","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12129/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12129/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12126","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12126/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12126/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12126/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12126","id":2191917293,"node_id":"PR_kwDOAbYXYc5p7P-d","number":12126,"title":"[tests] linkcheck: bind each test HTTP server to a unique port per-testcase.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":162429779,"node_id":"MDU6TGFiZWwxNjI0Mjk3Nzk=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:proposal","name":"type:proposal","color":"207de5","default":false,"description":""},{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""},{"id":835300861,"node_id":"MDU6TGFiZWw4MzUzMDA4NjE=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/internals:refactoring","name":"internals:refactoring","color":"ff82e3","default":false,"description":""},{"id":2498133141,"node_id":"MDU6TGFiZWwyNDk4MTMzMTQx","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/builder:linkcheck","name":"builder:linkcheck","color":"37C7B8","default":false,"description":""},{"id":6690265035,"node_id":"LA_kwDOAbYXYc8AAAABjsVXyw","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/python","name":"python","color":"2b67c6","default":false,"description":"Pull requests that update Python code"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-18T11:15:09Z","updated_at":"2024-03-18T18:08:02Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12126","html_url":"https://github.com/sphinx-doc/sphinx/pull/12126","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12126.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12126.patch","merged_at":null},"body":"### Feature or Bugfix\r\n- Refactoring\r\n\r\n### Purpose\r\n- Reduce the possibility that `linkcheck` builder tests can interfere with each other.\r\n- Allow the `linkcheck` builder tests to run in arbitrary order.\r\n\r\n### Detail\r\n- Use an atomic integer datatype provided by the [`atomos` library](https://github.com/maxcountryman/atomos/) to increment a port number per-test-case.\r\n- Expose the port number by `yield`'ing it from the test HTTP server context-manager.\r\n- TODO:\r\n - [x] Instead of using `overwrite_file`, replace port numbers in the source documents (can `docutils` apply runtime variable-based substitutions?)\r\n - [x] Figure out what's going on with the 'local file' URIs in `test_defaults`; fix that in the mainline branch, separate to this PR (moved to #12128).\r\n - [x] ~~Document and consider the implications of reading `html_baseurl` from the `linkcheck` builder (not all projects build as HTML... and not all HTML projects set `html_baseurl`)~~ Not a good idea; retain backwards-compatibility instead and don't use this unrelated `confvar`.\r\n\r\n### Relates\r\n- Relates to #11285.\r\n- Resolves #12122.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12126/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12126/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12123","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12123/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12123/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12123/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12123","id":2191220411,"node_id":"PR_kwDOAbYXYc5p45A5","number":12123,"title":"Bump ruff from 0.3.2 to 0.3.3","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","site_admin":false},"labels":[{"id":4781870649,"node_id":"LA_kwDOAbYXYc8AAAABHQWOOQ","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":6690265035,"node_id":"LA_kwDOAbYXYc8AAAABjsVXyw","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/python","name":"python","color":"2b67c6","default":false,"description":"Pull requests that update Python code"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-18T04:44:03Z","updated_at":"2024-03-18T04:44:04Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12123","html_url":"https://github.com/sphinx-doc/sphinx/pull/12123","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12123.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12123.patch","merged_at":null},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.3.2 to 0.3.3.\n\nRelease notes
\nSourced from ruff's releases.
\n\nv0.3.3
\nChanges
\nPreview features
\n\n- [
flake8-bandit
]: Implement S610
rule (#10316) \n- [
pycodestyle
] Implement blank-line-at-end-of-file
(W391
) (#10243) \n- [
pycodestyle
] Implement redundant-backslash
(E502
) (#10292) \n- [
pylint
] - implement redeclared-assigned-name
(W0128
) (#9268) \n
\nRule changes
\n\n- [
flake8_comprehensions
] Handled special case for C400
which also matches C416
(#10419) \n- [
flake8-bandit
] Implement upstream updates for S311
, S324
and S605
(#10313) \n- [
pyflakes
] Remove F401
fix for __init__
imports by default and allow opt-in to unsafe fix (#10365) \n- [
pylint
] Implement invalid-bool-return-type
(E304
) (#10377) \n- [
pylint
] Include builtin warnings in useless-exception-statement (PLW0133
) (#10394) \n
\nCLI
\n\n- Add message on success to
ruff check
(#8631) \n
\nBug fixes
\n\n- [
PIE970
] Allow trailing ellipsis in typing.TYPE_CHECKING
(#10413) \n- Avoid
TRIO115
if the argument is a variable (#10376) \n- [
F811
] Avoid removing shadowed imports that point to different symbols (#10387) \n- Fix
F821
and F822
false positives in .pyi
files (#10341) \n- Fix
F821
false negatives in .py
files when from __future__ import annotations
is active (#10362) \n- Fix case where
Indexer
fails to identify continuation preceded by newline #10351 (#10354) \n- Sort hash maps in
Settings
display (#10370) \n- Track conditional deletions in the semantic model (#10415)
\n- [
C413
] Wrap expressions in parentheses when negating (#10346) \n- [
pycodestyle
] Do not ignore lines before the first logical line in blank lines rules. (#10382) \n- [
pycodestyle
] Do not trigger E225
and E275
when the next token is a ')' (#10315) \n- [
pylint
] Avoid false-positive slot non-assignment for __dict__
(PLE0237
) (#10348) \n- Gate f-string struct size test for Rustc < 1.76 (#10371)
\n
\nDocumentation
\n\n- Use
ruff.toml
format in README (#10393) \n- [
RUF008
] Make it clearer that a mutable default in a dataclass is only valid if it is typed as a ClassVar (#10395) \n- [
pylint
] Extend docs and test in invalid-str-return-type
(E307
) (#10400) \n- Remove
.
from check
and format
commands (#10217) \n
\nContributors
\n\n\n
\n... (truncated)
\n \n\nChangelog
\nSourced from ruff's changelog.
\n\n0.3.3
\nPreview features
\n\n- [
flake8-bandit
]: Implement S610
rule (#10316) \n- [
pycodestyle
] Implement blank-line-at-end-of-file
(W391
) (#10243) \n- [
pycodestyle
] Implement redundant-backslash
(E502
) (#10292) \n- [
pylint
] - implement redeclared-assigned-name
(W0128
) (#9268) \n
\nRule changes
\n\n- [
flake8_comprehensions
] Handled special case for C400
which also matches C416
(#10419) \n- [
flake8-bandit
] Implement upstream updates for S311
, S324
and S605
(#10313) \n- [
pyflakes
] Remove F401
fix for __init__
imports by default and allow opt-in to unsafe fix (#10365) \n- [
pylint
] Implement invalid-bool-return-type
(E304
) (#10377) \n- [
pylint
] Include builtin warnings in useless-exception-statement (PLW0133
) (#10394) \n
\nCLI
\n\n- Add message on success to
ruff check
(#8631) \n
\nBug fixes
\n\n- [
PIE970
] Allow trailing ellipsis in typing.TYPE_CHECKING
(#10413) \n- Avoid
TRIO115
if the argument is a variable (#10376) \n- [
F811
] Avoid removing shadowed imports that point to different symbols (#10387) \n- Fix
F821
and F822
false positives in .pyi
files (#10341) \n- Fix
F821
false negatives in .py
files when from __future__ import annotations
is active (#10362) \n- Fix case where
Indexer
fails to identify continuation preceded by newline #10351 (#10354) \n- Sort hash maps in
Settings
display (#10370) \n- Track conditional deletions in the semantic model (#10415)
\n- [
C413
] Wrap expressions in parentheses when negating (#10346) \n- [
pycodestyle
] Do not ignore lines before the first logical line in blank lines rules. (#10382) \n- [
pycodestyle
] Do not trigger E225
and E275
when the next token is a ')' (#10315) \n- [
pylint
] Avoid false-positive slot non-assignment for __dict__
(PLE0237
) (#10348) \n- Gate f-string struct size test for Rustc < 1.76 (#10371)
\n
\nDocumentation
\n\n- Use
ruff.toml
format in README (#10393) \n- [
RUF008
] Make it clearer that a mutable default in a dataclass is only valid if it is typed as a ClassVar (#10395) \n- [
pylint
] Extend docs and test in invalid-str-return-type
(E307
) (#10400) \n- Remove
.
from check
and format
commands (#10217) \n
\n
\n \n\nCommits
\n\n608df9a
Bump version to 0.3.3 (#10425) \n740c08b
[pylint
] - implement redeclared-assigned-name
(W0128
) (#9268) \n7e652e8
[flake8_comprehensions
] Handled special case for C400
which also matches ... \n9675e18
Allow trailing ellipsis in typing.TYPE_CHECKING
(#10413) \n10ace88
Track conditional deletions in the semantic model (#10415) \na8e50a7
[RUF008] Make it clearer that a mutable default in a dataclass is only valid ... \ne944c16
[pycodestyle
] Do not ignore lines before the first logical line in blank li... \n5f40371
Use ExprFString
for StringLike::FString
variant (#10311) \nf7802ad
[pylint
] Extend docs and test in invalid-str-return-type
(E307
) (#10400) \ne832327
Require --preview for ruff server
(#10368) \n- Additional commits viewable in compare view
\n
\n \n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff&package-manager=pip&previous-version=0.3.2&new-version=0.3.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\nDependabot commands and options
\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n ","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12123/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12123/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12122","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12122/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12122/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12122/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12122","id":2190898266,"node_id":"I_kwDOAbYXYc6ClnRa","number":12122,"title":"[tests] linkcheck builder unit tests fail sporadically when run using unpredictable orderings.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":162407993,"node_id":"MDU6TGFiZWwxNjI0MDc5OTM=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:bug","name":"type:bug","color":"a11d21","default":false,"description":""},{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""},{"id":2498133141,"node_id":"MDU6TGFiZWwyNDk4MTMzMTQx","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/builder:linkcheck","name":"builder:linkcheck","color":"37C7B8","default":false,"description":""}],"state":"open","locked":false,"assignee":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"assignees":[{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false}],"milestone":null,"comments":0,"created_at":"2024-03-17T22:32:25Z","updated_at":"2024-03-17T22:32:26Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"### Describe the bug\n\nAlthough the [`linkcheck` builder unit tests](https://github.com/sphinx-doc/sphinx/blob/bf0bec3b4b8c019acad4a77a9e228de4e65b538b/tests/test_builders/test_build_linkcheck.py) pass fairly reliably in the GitHub Actions continuous integration we have configured, they are less reliable when run using a random unit test ordering.\r\n\r\nIdeally unit tests should be able to run independently of each other; as reported in #11285, we do have some side-effects within our test suite, and it is possible that side-effects are a factor here too.\n\n### How to Reproduce\n\nUsing the [`pytest-randomly` plugin](https://github.com/pytest-dev/pytest-randomly) is a straightforward way to replicate this problem.\r\n\r\nFrom a checkout of bf0bec3b4b8c019acad4a77a9e228de4e65b538b I'm able to see the problem occur fairly reliably with `pytest==8.1.1` and `pytest-randomly==3.15.0` by running:\r\n\r\n```sh\r\n$ pytest --randomly-seed=16 tests/test_builders/test_build_linkcheck.py\r\n...\r\n=========================== short test summary info ============================\r\nFAILED tests/test_builders/test_build_linkcheck.py::test_too_many_requests_retry_after_HTTP_date[GMT-3] - assert '127.0.0.1 - .../1.1\" 200 -\\n' == '127.0.0.1 - .../1.1\" 200 -\\n'\r\n========================= 1 failed, 38 passed in 1.59s =========================\r\n```\n\n### Environment Information\n\n```text\nPlatform: linux; (Linux-6.6.15-rt-amd64-x86_64-with-glibc2.37)\r\nPython version: 3.11.8 (main, Feb 7 2024, 21:52:08) [GCC 13.2.0])\r\nPython implementation: CPython\r\nSphinx version: 7.3.0+/bf0bec3b4\r\nDocutils version: 0.20.1\r\nJinja2 version: 3.1.3\r\nPygments version: 2.17.2\n```\n\n\n### Sphinx extensions\n\n```python\nN/A\n```\n\n\n### Additional context\n\n_No response_","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12122/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12122/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12121","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12121/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12121/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12121/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12121","id":2190886245,"node_id":"I_kwDOAbYXYc6ClkVl","number":12121,"title":"[tests] Test case 'test_domain_cpp_build_semicolon' fails when run individually.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":162407993,"node_id":"MDU6TGFiZWwxNjI0MDc5OTM=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:bug","name":"type:bug","color":"a11d21","default":false,"description":""},{"id":162407996,"node_id":"MDU6TGFiZWwxNjI0MDc5OTY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/help%20wanted","name":"help wanted","color":"159818","default":true,"description":null},{"id":162526831,"node_id":"MDU6TGFiZWwxNjI1MjY4MzE=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/domains:cpp","name":"domains:cpp","color":"366AC0","default":false,"description":""},{"id":178463404,"node_id":"MDU6TGFiZWwxNzg0NjM0MDQ=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/good%20first%20issue","name":"good first issue","color":"7070f0","default":true,"description":null},{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-17T22:01:16Z","updated_at":"2024-03-17T22:32:43Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"### Describe the bug\n\nUnit tests should not rely upon being run in any particular order; ideally they should test behaviours of the underlying code whether they run in the same order that they're declared in the test module, or any other arbitrary ordering.\r\n\r\nBy extension this means that it should be possible to run an individual unit test.\r\n\r\nCurrently at commit bf0bec3b4b8c019acad4a77a9e228de4e65b538b the [`test_domain_cpp_build_semicolon` unit test](https://github.com/sphinx-doc/sphinx/blob/master/tests/test_domains/test_domain_cpp.py#L1139-L1143) fails when it is run individually.\n\n### How to Reproduce\n\nThis can be replicated by checking out the code at bf0bec3b4b8c019acad4a77a9e228de4e65b538b, installing the Python test dependencies, and running:\r\n\r\n```\r\n$ pytest tests/test_domains/test_domain_cpp.py -k semicolon\r\n...\r\n=========================== short test summary info ============================\r\nFAILED tests/test_domains/test_domain_cpp.py::test_domain_cpp_build_semicolon - AssertionError: assert 1 == 0\r\n====================== 1 failed, 115 deselected in 0.72s =======================\r\n```\n\n### Environment Information\n\n```text\nPlatform: linux; (Linux-6.6.15-rt-amd64-x86_64-with-glibc2.37)\r\nPython version: 3.11.8 (main, Feb 7 2024, 21:52:08) [GCC 13.2.0])\r\nPython implementation: CPython\r\nSphinx version: 7.3.0+/bf0bec3b4\r\nDocutils version: 0.20.1\r\nJinja2 version: 3.1.3\r\nPygments version: 2.17.2\n```\n\n\n### Sphinx extensions\n\n```python\nN/A\n```\n\n\n### Additional context\n\nFixing this would contribute towards resolving #11285.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12121/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12121/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12120","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12120/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12120/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12120/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12120","id":2190822140,"node_id":"I_kwDOAbYXYc6ClUr8","number":12120,"title":"[tests] ToC: ordering condition involving title generation.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":162407993,"node_id":"MDU6TGFiZWwxNjI0MDc5OTM=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:bug","name":"type:bug","color":"a11d21","default":false,"description":""},{"id":162407996,"node_id":"MDU6TGFiZWwxNjI0MDc5OTY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/help%20wanted","name":"help wanted","color":"159818","default":true,"description":null},{"id":178463404,"node_id":"MDU6TGFiZWwxNzg0NjM0MDQ=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/good%20first%20issue","name":"good first issue","color":"7070f0","default":true,"description":null},{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-17T19:16:21Z","updated_at":"2024-03-17T21:55:00Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"### Describe the bug\r\n\r\nWhen running text-builder tests from the suite from commit bf0bec3b4b8c019acad4a77a9e228de4e65b538b using `pytest tests/test_builders/test_build_text.py`, the [`test_nonascii_title_line` test case](https://github.com/sphinx-doc/sphinx/blob/bf0bec3b4b8c019acad4a77a9e228de4e65b538b/tests/test_builders/test_build_text.py#L56-L62) fails when `test_secnums` is evaluated before `test_nonascii_title_line`.\r\n\r\n### How to Reproduce\r\n\r\nFrom a checkout of 23eb54538781f63b5878f6b456296f0b6a97a6bc and using `pytest==8.1.1`:\r\n\r\n```sh\r\n$ pytest -vv tests/test_builders/test_build_text.py tests/test_builders/test_build_text.py -k 'secnum or nonascii_title'\r\n```\r\n\r\n(\r\n\r\n### Environment Information\r\n\r\n```text\r\nPlatform: linux; (Linux-6.6.15-rt-amd64-x86_64-with-glibc2.37)\r\nPython version: 3.11.8 (main, Feb 7 2024, 21:52:08) [GCC 13.2.0])\r\nPython implementation: CPython\r\nSphinx version: 7.3.0+/23eb54538\r\nDocutils version: 0.20.1\r\nJinja2 version: 3.1.3\r\nPygments version: 2.17.2\r\n```\r\n\r\n\r\n### Sphinx extensions\r\n\r\n```python\r\nN/A\r\n```\r\n\r\n\r\n### Additional context\r\n\r\nRelates to #11285.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12120/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12120/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12119","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12119/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12119/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12119/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12119","id":2190805324,"node_id":"PR_kwDOAbYXYc5p3g6O","number":12119,"title":"[tests] Remove result-sharing between 'test_html5_output' and 'test_html5_download'.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":162407993,"node_id":"MDU6TGFiZWwxNjI0MDc5OTM=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:bug","name":"type:bug","color":"a11d21","default":false,"description":""},{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-17T18:31:29Z","updated_at":"2024-03-17T18:31:46Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12119","html_url":"https://github.com/sphinx-doc/sphinx/pull/12119","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12119.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12119.patch","merged_at":null},"body":"### Feature or Bugfix\r\n- Bugfix\r\n\r\n### Purpose\r\n- In an attempt to help with issues with parallelizing tests documented in #11285, I've begun running tests locally in random order to attempt to find and resolve problems.\r\n\r\n### Detail\r\n- Remove sharing of the output results between the `test_html5_output` and `test_html5_download` test cases.\r\n- Previously, when `test_html5_download` ran before `test_html5_output`, the latter would fail.\r\n\r\n### Relates\r\n- Contributes towards #11285.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12119/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12119/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12118","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12118/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12118/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12118/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12118","id":2190799475,"node_id":"PR_kwDOAbYXYc5p3fxe","number":12118,"title":"[tests] Make the 'test_html_copy_source' case agnostic of test evaluation order.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":162407993,"node_id":"MDU6TGFiZWwxNjI0MDc5OTM=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:bug","name":"type:bug","color":"a11d21","default":false,"description":""},{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":11,"created_at":"2024-03-17T18:16:53Z","updated_at":"2024-03-18T10:33:08Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12118","html_url":"https://github.com/sphinx-doc/sphinx/pull/12118","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12118.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12118.patch","merged_at":null},"body":"### Feature or Bugfix\r\n- Bugfix\r\n\r\n### Purpose\r\n- In an attempt to help with issues with parallelizing tests documented in #11285, I've begun running tests locally in random order to attempt to find and resolve problems.\r\n\r\n### Detail\r\n- Use a unique `srcdir` during the [`test_html_copy_source` test case](https://github.com/sphinx-doc/sphinx/blob/bf0bec3b4b8c019acad4a77a9e228de4e65b538b/tests/test_builders/test_build_html.py#L122-L125) so that it can succeed even if other tests cases that use the same `testroot` modify their source files before it runs.\r\n\r\n### Relates\r\n- Contributes towards #11285.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12118/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12118/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12115","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12115/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12115/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12115/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12115","id":2190611751,"node_id":"I_kwDOAbYXYc6CkhUn","number":12115,"title":"[CI/CD] branch for testing Windows integration","user":{"login":"picnixz","id":10796600,"node_id":"MDQ6VXNlcjEwNzk2NjAw","avatar_url":"https://avatars.githubusercontent.com/u/10796600?v=4","gravatar_id":"","url":"https://api.github.com/users/picnixz","html_url":"https://github.com/picnixz","followers_url":"https://api.github.com/users/picnixz/followers","following_url":"https://api.github.com/users/picnixz/following{/other_user}","gists_url":"https://api.github.com/users/picnixz/gists{/gist_id}","starred_url":"https://api.github.com/users/picnixz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/picnixz/subscriptions","organizations_url":"https://api.github.com/users/picnixz/orgs","repos_url":"https://api.github.com/users/picnixz/repos","events_url":"https://api.github.com/users/picnixz/events{/privacy}","received_events_url":"https://api.github.com/users/picnixz/received_events","type":"User","site_admin":false},"labels":[{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""},{"id":5840982818,"node_id":"LA_kwDOAbYXYc8AAAABXCZTIg","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/internals:other","name":"internals:other","color":"ff82e3","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":5,"created_at":"2024-03-17T11:19:20Z","updated_at":"2024-03-17T14:21:06Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"body":"It's always tricky to tests on Windows platform for many reasons. The first reason is that you need the linters to pass and then, you usually wait for EVERY Unix-based tests to finish until Windows is finally starting.\r\n\r\nI plan to create a read-only branch synchronized on master where you can rebase your branches for which you only want to check Windows-related code. In particular, I will remove all CI/CD jobs related to linux (should I leave the linters?) and make the Windows jobs required.\r\n\r\nSo whenever you have a PR you want to only test for Windows integration, make a PR against the `windows-testing` branch instead of `master`.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12115/reactions","total_count":1,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12115/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12107","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12107/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12107/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12107/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12107","id":2189946486,"node_id":"PR_kwDOAbYXYc5p0sd_","number":12107,"title":"[search] Refactor: make the search code more testable.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":162612552,"node_id":"MDU6TGFiZWwxNjI2MTI1NTI=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/html%20search","name":"html search","color":"FFFFFF","default":false,"description":null},{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""},{"id":835300861,"node_id":"MDU6TGFiZWw4MzUzMDA4NjE=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/internals:refactoring","name":"internals:refactoring","color":"ff82e3","default":false,"description":""},{"id":4781870657,"node_id":"LA_kwDOAbYXYc8AAAABHQWOQQ","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/javascript","name":"javascript","color":"168700","default":false,"description":"Pull requests that update Javascript code"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-16T12:30:32Z","updated_at":"2024-03-18T19:33:53Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12107","html_url":"https://github.com/sphinx-doc/sphinx/pull/12107","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12107.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12107.patch","merged_at":null},"body":"### Feature or Bugfix\r\n- Refactoring\r\n\r\n### Purpose\r\n- Make it easier to write and run tests for the HTML search JavaScript code by extracting functions that can be called individually to parse queries and perform searches, without running any display/DOM-related logic.\r\n\r\n### Detail\r\n- Extract `Search._parseQuery` to transform a query into search terms.\r\n- Extract `Search._performSearch` to run a query and return results using search term arguments.\r\n- Update the test suite to use the newly-extracted functions.\r\n\r\n### Relates\r\n- Builds upon #12102.\r\n- Makes it easier to write JavaScript test coverage for #12047.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12107/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12107/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12106","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12106/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12106/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12106/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12106","id":2189921339,"node_id":"PR_kwDOAbYXYc5p0ncm","number":12106,"title":"[tests] add logic for testing ``sphinx.testing.fixtures`` [part 3]","user":{"login":"picnixz","id":10796600,"node_id":"MDQ6VXNlcjEwNzk2NjAw","avatar_url":"https://avatars.githubusercontent.com/u/10796600?v=4","gravatar_id":"","url":"https://api.github.com/users/picnixz","html_url":"https://github.com/picnixz","followers_url":"https://api.github.com/users/picnixz/followers","following_url":"https://api.github.com/users/picnixz/following{/other_user}","gists_url":"https://api.github.com/users/picnixz/gists{/gist_id}","starred_url":"https://api.github.com/users/picnixz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/picnixz/subscriptions","organizations_url":"https://api.github.com/users/picnixz/orgs","repos_url":"https://api.github.com/users/picnixz/repos","events_url":"https://api.github.com/users/picnixz/events{/privacy}","received_events_url":"https://api.github.com/users/picnixz/received_events","type":"User","site_admin":false},"labels":[{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-16T11:23:45Z","updated_at":"2024-03-17T15:05:06Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12106","html_url":"https://github.com/sphinx-doc/sphinx/pull/12106","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12106.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12106.patch","merged_at":null},"body":"This follows #12093.\r\n\r\nThis adds the tests for testing our plugin implementation.\r\n\r\nDue to ``xdist`` implementation, the collection of test items does not happen on the controller node but only at the level of the worker nodes and each worker node executes the same protocol.\r\n\r\nNow, if a test is parametrized, it is obvious that we want the tests to be executed by the same worker, hence the needs of ``xdist_group``. Unfortunately, you cannot specify the group at the moment a fixture is requested since it will already be too late. Thus, if no explicit group is given, we automatically add a group to parametrized tests based on the location of the \"base\" node.\r\n\r\nNote that this feature only affects our internal tests, so downstream repos using the plugin are not affected and should do their own trick for ``xdist`` (they can use the same approach or do whatever they need manually).\r\n","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12106/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12106/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12102","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12102/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12102/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12102/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12102","id":2189250699,"node_id":"PR_kwDOAbYXYc5pyW8W","number":12102,"title":"[tests] JavaScript: extract searchindex.js-format test fixtures.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":162612552,"node_id":"MDU6TGFiZWwxNjI2MTI1NTI=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/html%20search","name":"html search","color":"FFFFFF","default":false,"description":null},{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""},{"id":835300861,"node_id":"MDU6TGFiZWw4MzUzMDA4NjE=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/internals:refactoring","name":"internals:refactoring","color":"ff82e3","default":false,"description":""},{"id":4781870657,"node_id":"LA_kwDOAbYXYc8AAAABHQWOQQ","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/javascript","name":"javascript","color":"168700","default":false,"description":"Pull requests that update Javascript code"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":5,"created_at":"2024-03-15T18:35:38Z","updated_at":"2024-03-18T19:42:05Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12102","html_url":"https://github.com/sphinx-doc/sphinx/pull/12102","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12102.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12102.patch","merged_at":null},"body":"### Feature or Bugfix\r\n- Refactoring\r\n\r\n### Purpose\r\n- Reformats the test `index` data in the JavaScript HTML search tests to match the format emitted by the Sphinx (Python) HTML builder.\r\n\r\n### Detail\r\n- The content of `searchindex.js` is a JavaScript code file that runs `Search.setIndex(...)` with the contents of the index as an argument.\r\n- Instead of loading the index per-test from a variable, retrieve each fixture from the built-in local `karma` HTTP server and `eval` it.\r\n- In follow-up pull requests, the plan is to generate fixtures from genuine, buildable test Sphinx project sources included within this repository.\r\n\r\n### Relates\r\n- Works towards #12099.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12102/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12102/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12100","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12100/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12100/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12100/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12100","id":2189050360,"node_id":"I_kwDOAbYXYc6CekH4","number":12100,"title":"Remote images: something about URI handling on Windows is fragile.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":162407993,"node_id":"MDU6TGFiZWwxNjI0MDc5OTM=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:bug","name":"type:bug","color":"a11d21","default":false,"description":""},{"id":162407996,"node_id":"MDU6TGFiZWwxNjI0MDc5OTY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/help%20wanted","name":"help wanted","color":"159818","default":true,"description":null},{"id":5840982818,"node_id":"LA_kwDOAbYXYc8AAAABXCZTIg","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/internals:other","name":"internals:other","color":"ff82e3","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-15T16:33:28Z","updated_at":"2024-03-15T16:34:06Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"Sourced from https://github.com/sphinx-doc/sphinx/pull/12095#issuecomment-1998348348:\r\n\r\nThe [Windows test output](https://github.com/sphinx-doc/sphinx/actions/runs/8285970988/job/22674853402?pr=12095#step:6:2185) for this change appears to have uncovered an unrelated problem: handling `http://localhost:7777/sphinx.png` raises a `WinError` exception somewhere on that platform while it does not on Linux.\r\n\r\n```\r\nWARNING: Could not fetch remote image: http://localhost:7777/sphinx.png [[WinError 267] The directory name is invalid: 'C:\\\\Users\\\\runneradmin\\\\AppData\\\\Local\\\\Temp\\\\...\\\\images\\\\_build\\\\doctrees\\\\images\\\\http/localhost:7777']\r\n```\r\n\r\nMy best guess is around this area of code (it has quite a large `try...catch` block):\r\n\r\nhttps://github.com/sphinx-doc/sphinx/blob/98d0cc8602e254218cdd01212366d5304e5fba48/sphinx/transforms/post_transforms/images.py#L57-L113\r\n\r\nThese lines initially seem like a possibility:\r\n\r\nhttps://github.com/sphinx-doc/sphinx/blob/98d0cc8602e254218cdd01212366d5304e5fba48/sphinx/transforms/post_transforms/images.py#L70-L71\r\n\r\n_Originally posted by @jayaddison in https://github.com/sphinx-doc/sphinx/issues/12095#issuecomment-1998348348_\r\n ","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12100/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12100/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12099","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12099/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12099/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12099/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12099","id":2189039383,"node_id":"I_kwDOAbYXYc6CehcX","number":12099,"title":"Tests: generate the indexes in the HTML search JavaScript tests using the application code.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":162429779,"node_id":"MDU6TGFiZWwxNjI0Mjk3Nzk=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:proposal","name":"type:proposal","color":"207de5","default":false,"description":""},{"id":162612552,"node_id":"MDU6TGFiZWwxNjI2MTI1NTI=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/html%20search","name":"html search","color":"FFFFFF","default":false,"description":null},{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""},{"id":835300861,"node_id":"MDU6TGFiZWw4MzUzMDA4NjE=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/internals:refactoring","name":"internals:refactoring","color":"ff82e3","default":false,"description":""},{"id":4781870657,"node_id":"LA_kwDOAbYXYc8AAAABHQWOQQ","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/javascript","name":"javascript","color":"168700","default":false,"description":"Pull requests that update Javascript code"}],"state":"open","locked":false,"assignee":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"assignees":[{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false}],"milestone":null,"comments":2,"created_at":"2024-03-15T16:29:08Z","updated_at":"2024-03-16T11:02:32Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"**Is your feature request related to a problem? Please describe.**\r\nWe have JavaScript [test coverage of our HTML search functionality](https://github.com/sphinx-doc/sphinx/blob/5695b76f05af253f8eb3a956d25950af81befc7e/tests/js/searchtools.js), and that's great.\r\n\r\nHowever: the tests use [inline-declared index datastructures](https://github.com/sphinx-doc/sphinx/blob/5695b76f05af253f8eb3a956d25950af81befc7e/tests/js/searchtools.js#L6-L12) to represent what each test index is expected to contain.\r\n\r\nThat means that the format of the search indexes produced by the application code could go out of sync with the JavaScript tests unnoticed, and we may not catch regressions -- or, equally as annoyingly, it might be very difficult to accurately write additional tests from scratch in future.\r\n\r\n**Describe the solution you'd like**\r\nAlthough it would add Python, and `sphinx`, and its requirements to the dependencies for the [JavaScript test workflow](https://github.com/sphinx-doc/sphinx/blob/5695b76f05af253f8eb3a956d25950af81befc7e/.github/workflows/nodejs.yml#L29-L43), I think we should do that and build test index fixtures dynamically.\r\n\r\nThey should be checked-in to source control, and the test would fail if the generated-index didn't match the one currently checked-in.\r\n\r\n**Describe alternatives you've considered**\r\nAllowing the status-quo to continue seems fine, but the fact that we lack continuous committers / experts in the search area (it has taken me a while to begin to understand it, and I still don't feel completely confident about it) makes me want to guard it a bit against lack of continuous maintenance/knowledge.\r\n\r\n**Additional context**\r\nThis would require good documentation too.\r\n\r\n- #12028 was a false-alarm where I _thought_ that something about the test index data was wrong -- but it wasn't. That would have been easier to prove/disprove if the indexes were generated from a project directory.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12099/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12099/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12097","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12097/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12097/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12097/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12097","id":2187938973,"node_id":"I_kwDOAbYXYc6CaUyd","number":12097,"title":"enable mypy linting on `tests/` directory","user":{"login":"danieleades","id":33452915,"node_id":"MDQ6VXNlcjMzNDUyOTE1","avatar_url":"https://avatars.githubusercontent.com/u/33452915?v=4","gravatar_id":"","url":"https://api.github.com/users/danieleades","html_url":"https://github.com/danieleades","followers_url":"https://api.github.com/users/danieleades/followers","following_url":"https://api.github.com/users/danieleades/following{/other_user}","gists_url":"https://api.github.com/users/danieleades/gists{/gist_id}","starred_url":"https://api.github.com/users/danieleades/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/danieleades/subscriptions","organizations_url":"https://api.github.com/users/danieleades/orgs","repos_url":"https://api.github.com/users/danieleades/repos","events_url":"https://api.github.com/users/danieleades/events{/privacy}","received_events_url":"https://api.github.com/users/danieleades/received_events","type":"User","site_admin":false},"labels":[{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""},{"id":4592753003,"node_id":"LA_kwDOAbYXYc8AAAABEb_Zaw","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/internals:typing","name":"internals:typing","color":"ff82e3","default":false,"description":""}],"state":"open","locked":false,"assignee":{"login":"picnixz","id":10796600,"node_id":"MDQ6VXNlcjEwNzk2NjAw","avatar_url":"https://avatars.githubusercontent.com/u/10796600?v=4","gravatar_id":"","url":"https://api.github.com/users/picnixz","html_url":"https://github.com/picnixz","followers_url":"https://api.github.com/users/picnixz/followers","following_url":"https://api.github.com/users/picnixz/following{/other_user}","gists_url":"https://api.github.com/users/picnixz/gists{/gist_id}","starred_url":"https://api.github.com/users/picnixz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/picnixz/subscriptions","organizations_url":"https://api.github.com/users/picnixz/orgs","repos_url":"https://api.github.com/users/picnixz/repos","events_url":"https://api.github.com/users/picnixz/events{/privacy}","received_events_url":"https://api.github.com/users/picnixz/received_events","type":"User","site_admin":false},"assignees":[{"login":"picnixz","id":10796600,"node_id":"MDQ6VXNlcjEwNzk2NjAw","avatar_url":"https://avatars.githubusercontent.com/u/10796600?v=4","gravatar_id":"","url":"https://api.github.com/users/picnixz","html_url":"https://github.com/picnixz","followers_url":"https://api.github.com/users/picnixz/followers","following_url":"https://api.github.com/users/picnixz/following{/other_user}","gists_url":"https://api.github.com/users/picnixz/gists{/gist_id}","starred_url":"https://api.github.com/users/picnixz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/picnixz/subscriptions","organizations_url":"https://api.github.com/users/picnixz/orgs","repos_url":"https://api.github.com/users/picnixz/repos","events_url":"https://api.github.com/users/picnixz/events{/privacy}","received_events_url":"https://api.github.com/users/picnixz/received_events","type":"User","site_admin":false}],"milestone":null,"comments":7,"created_at":"2024-03-15T08:04:18Z","updated_at":"2024-03-16T23:26:16Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"mypy currently ignores the tests/ directory. We should enable it.\r\n\r\n@picnixz this is likely a job for you as you're far more comfortable with the sphinx tests than I!\r\n\r\nThis could also be done incrementally using the 'allow-list' approach i've been using to ratchet up the type linting strictness in the main package","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12097/reactions","total_count":1,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12097/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12096","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12096/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12096/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12096/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12096","id":2187130107,"node_id":"I_kwDOAbYXYc6CXPT7","number":12096,"title":"Regression: CSS file added by extension cannot be overridden by users anymore","user":{"login":"mgeier","id":705404,"node_id":"MDQ6VXNlcjcwNTQwNA==","avatar_url":"https://avatars.githubusercontent.com/u/705404?v=4","gravatar_id":"","url":"https://api.github.com/users/mgeier","html_url":"https://github.com/mgeier","followers_url":"https://api.github.com/users/mgeier/followers","following_url":"https://api.github.com/users/mgeier/following{/other_user}","gists_url":"https://api.github.com/users/mgeier/gists{/gist_id}","starred_url":"https://api.github.com/users/mgeier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mgeier/subscriptions","organizations_url":"https://api.github.com/users/mgeier/orgs","repos_url":"https://api.github.com/users/mgeier/repos","events_url":"https://api.github.com/users/mgeier/events{/privacy}","received_events_url":"https://api.github.com/users/mgeier/received_events","type":"User","site_admin":false},"labels":[{"id":162407993,"node_id":"MDU6TGFiZWwxNjI0MDc5OTM=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:bug","name":"type:bug","color":"a11d21","default":false,"description":""},{"id":162415728,"node_id":"MDU6TGFiZWwxNjI0MTU3Mjg=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/builder:html","name":"builder:html","color":"37C7B8","default":false,"description":""},{"id":4641227053,"node_id":"LA_kwDOAbYXYc8AAAABFKOBLQ","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:regression","name":"type:regression","color":"EC3C24","default":false,"description":""},{"id":5840982818,"node_id":"LA_kwDOAbYXYc8AAAABXCZTIg","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/internals:other","name":"internals:other","color":"ff82e3","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":8,"created_at":"2024-03-14T19:35:27Z","updated_at":"2024-03-17T19:34:16Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"### Describe the bug\n\nIn my concrete case, the CSS file is added with `add_css_file()`\r\nin my `nbsphinx` extension: https://github.com/spatialaudio/nbsphinx/blob/53be5e632f0c9483ba65ba6690da9b137f9c1120/src/nbsphinx/__init__.py#L1655\n\n### How to Reproduce\n\nCheck out https://github.com/spatialaudio/nbsphinx/ and add this to `doc/conf.py`:\r\n\r\n```python\r\nhtml_static_path = ['my-static-path']\r\n```\r\n\r\nCreate a file `my-static-path/nbsphinx-gallery.css` with some CSS overrides, like e.g. in https://github.com/Substra/substra-documentation/blob/d2785aa82d46686d82ab66d2c24f95af86d28ce6/docs/source/static/nbsphinx-gallery.css.\r\n\r\nRun Sphinx.\r\n\r\nLook at one of the thumbnail galleries.\n\n### Environment Information\n\n```text\nAny Sphinx version after ae206694e68bea074aca633ea0d32e9ed882a95f, appearing first in release 7.1.0.\n```\n\n\n### Sphinx extensions\n\n```python\n`nbsphinx`, but this should happen with any extension that adds some CSS.\n```\n\n\n### Additional context\n\nThis was originally reported here: https://github.com/spatialaudio/nbsphinx/issues/778\r\n\r\nI have bisected it, and the culprit is ae206694e68bea074aca633ea0d32e9ed882a95f, which is part of #11415.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12096/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12096/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12095","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12095/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12095/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12095/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12095","id":2187033392,"node_id":"PR_kwDOAbYXYc5pqsmb","number":12095,"title":"[tests] Make the test suite connectivity-agnostic.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""},{"id":835300861,"node_id":"MDU6TGFiZWw4MzUzMDA4NjE=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/internals:refactoring","name":"internals:refactoring","color":"ff82e3","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2024-03-14T18:39:59Z","updated_at":"2024-03-17T14:41:01Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":true,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12095","html_url":"https://github.com/sphinx-doc/sphinx/pull/12095","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12095.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12095.patch","merged_at":null},"body":"### Feature or Bugfix\r\n- Bugfix\r\n\r\n### Purpose\r\n- Intended to allow the test suite to run equally well whether the test host is online.\r\n\r\n### Detail\r\n- Use local test HTTP server instances instead of fetching remote resources.\r\n- Remove a remote image that causes `epubcheck` to fail when checking an `epub` file that contains remote references (because the image couldn't be retrieved during the Sphinx build).\r\n\r\n### Relates\r\n- Resolves #12094.","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12095/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12095/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12094","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12094/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12094/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12094/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12094","id":2186996390,"node_id":"I_kwDOAbYXYc6CWuqm","number":12094,"title":"tests: network state (online/offline) affects epubcheck unit test outcome.","user":{"login":"jayaddison","id":55152140,"node_id":"MDQ6VXNlcjU1MTUyMTQw","avatar_url":"https://avatars.githubusercontent.com/u/55152140?v=4","gravatar_id":"","url":"https://api.github.com/users/jayaddison","html_url":"https://github.com/jayaddison","followers_url":"https://api.github.com/users/jayaddison/followers","following_url":"https://api.github.com/users/jayaddison/following{/other_user}","gists_url":"https://api.github.com/users/jayaddison/gists{/gist_id}","starred_url":"https://api.github.com/users/jayaddison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayaddison/subscriptions","organizations_url":"https://api.github.com/users/jayaddison/orgs","repos_url":"https://api.github.com/users/jayaddison/repos","events_url":"https://api.github.com/users/jayaddison/events{/privacy}","received_events_url":"https://api.github.com/users/jayaddison/received_events","type":"User","site_admin":false},"labels":[{"id":162407993,"node_id":"MDU6TGFiZWwxNjI0MDc5OTM=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:bug","name":"type:bug","color":"a11d21","default":false,"description":""},{"id":178462914,"node_id":"MDU6TGFiZWwxNzg0NjI5MTQ=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/builder:epub","name":"builder:epub","color":"37C7B8","default":false,"description":""},{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2024-03-14T18:24:24Z","updated_at":"2024-03-14T18:36:02Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"### Describe the bug\n\nThe [`test_run_epubcheck` unit test case](https://github.com/sphinx-doc/sphinx/blob/98d0cc8602e254218cdd01212366d5304e5fba48/tests/test_builders/test_build_epub.py#L375-L390) passes as expected when:\r\n\r\n* Java is [considered runnable](https://github.com/sphinx-doc/sphinx/blob/98d0cc8602e254218cdd01212366d5304e5fba48/tests/test_builders/test_build_epub.py#L382).\r\n* The `epubcheck[.jar]` program [is found](https://github.com/sphinx-doc/sphinx/blob/98d0cc8602e254218cdd01212366d5304e5fba48/tests/test_builders/test_build_epub.py#L381-L382).\r\n* The `DO_EPUBCHECK` environment variable [is set](https://github.com/sphinx-doc/sphinx/blob/98d0cc8602e254218cdd01212366d5304e5fba48/tests/test_builders/test_build_epub.py#L375-L376) (the value does not matter).\r\n* It can download a [remote image contained in the `test-root/images.txt`](https://github.com/sphinx-doc/sphinx/blob/98d0cc8602e254218cdd01212366d5304e5fba48/tests/roots/test-root/images.txt#L15-L16) file.\r\n\r\n(note: we _do_ enable `DO_EPUBCHECK` in our continous integration [in the `latex` workflow](https://github.com/sphinx-doc/sphinx/blob/98d0cc8602e254218cdd01212366d5304e5fba48/.github/workflows/main.yml#L121-L143) -- and `epubcheck` is installed into the relevant `sphinx-ci` container image)\r\n\r\nThere are a few quirks here: I think that the test behaving differently offline isn't desirable though (or to phrase it another way: connectivity shouldn't be a requirement for most dependable software to test/build, because it's hard to predict when/where it will be rebuilt).\n\n### How to Reproduce\n\nEnsure that `epubcheck` and the local development and test dependencies for `sphinx` are installed, and then disable network connectivity on the unit test host.\r\n\r\nFrom the `sphinx.git` checkout directory:\r\n```\r\n$ DO_EPUBCHECK=1 pytest tests/test_builders/test_build_epub.py -k epubcheck\r\n```\n\n### Environment Information\n\n```text\nPlatform: linux; (Linux-6.6.15-rt-amd64-x86_64-with-glibc2.37)\r\nPython version: 3.11.8 (main, Feb 7 2024, 21:52:08) [GCC 13.2.0])\r\nPython implementation: CPython\r\nSphinx version: 7.3.0+/98d0cc860\r\nDocutils version: 0.20.1\r\nJinja2 version: 3.1.3\r\nPygments version: 2.17.2\r\n\r\n\r\n`epubcheck` v4.2.6 (Debian-packaged)\n```\n\n\n### Sphinx extensions\n\n```python\nN/A\n```\n\n\n### Additional context\n\n_No response_","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12094/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12094/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12093","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12093/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12093/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12093/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12093","id":2186738861,"node_id":"PR_kwDOAbYXYc5pprkW","number":12093,"title":"[tests] Implementation of the new testing plugin (backward-compatible) [part 2]","user":{"login":"picnixz","id":10796600,"node_id":"MDQ6VXNlcjEwNzk2NjAw","avatar_url":"https://avatars.githubusercontent.com/u/10796600?v=4","gravatar_id":"","url":"https://api.github.com/users/picnixz","html_url":"https://github.com/picnixz","followers_url":"https://api.github.com/users/picnixz/followers","following_url":"https://api.github.com/users/picnixz/following{/other_user}","gists_url":"https://api.github.com/users/picnixz/gists{/gist_id}","starred_url":"https://api.github.com/users/picnixz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/picnixz/subscriptions","organizations_url":"https://api.github.com/users/picnixz/orgs","repos_url":"https://api.github.com/users/picnixz/repos","events_url":"https://api.github.com/users/picnixz/events{/privacy}","received_events_url":"https://api.github.com/users/picnixz/received_events","type":"User","site_admin":false},"labels":[{"id":259070486,"node_id":"MDU6TGFiZWwyNTkwNzA0ODY=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:tests","name":"type:tests","color":"BE0FE5","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2024-03-14T16:03:36Z","updated_at":"2024-03-18T10:15:34Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12093","html_url":"https://github.com/sphinx-doc/sphinx/pull/12093","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12093.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12093.patch","merged_at":null},"body":"Follows #12089.\r\n\r\nThis is the smallest possible set of changes that could be done in order to introduce the new plugin since pytest does not offer the possibilty to enable plugins per conftest file (i.e., I cannot test both the new plugin and keep the old one for the other tests).\r\n\r\nAs such, I need to merge both plugins (legacy and new implementations) in one plugin. I could like.. ignore the test part of the new plugin but it wouldn't make sense since no one would be able to see the plugin in action otherwise (and just pushing the utility functions does not seem right either).\r\n\r\nOnce #12089 is merged, this one can follow as it is based on top of the latter. After that, we need to fix each test individually so that they use the new features (for now, the plugin is still backwards compatible, though some parts can be removed when we're done with the cleanup).\r\n\r\ncc @jayaddison ","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12093/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12093/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12092","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12092/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12092/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12092/events","html_url":"https://github.com/sphinx-doc/sphinx/issues/12092","id":2186544382,"node_id":"I_kwDOAbYXYc6CVAT-","number":12092,"title":"how to avoid modification inside a SymLink-DST in outdir if a path is linked into it","user":{"login":"berlin2123","id":68841407,"node_id":"MDQ6VXNlcjY4ODQxNDA3","avatar_url":"https://avatars.githubusercontent.com/u/68841407?v=4","gravatar_id":"","url":"https://api.github.com/users/berlin2123","html_url":"https://github.com/berlin2123","followers_url":"https://api.github.com/users/berlin2123/followers","following_url":"https://api.github.com/users/berlin2123/following{/other_user}","gists_url":"https://api.github.com/users/berlin2123/gists{/gist_id}","starred_url":"https://api.github.com/users/berlin2123/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/berlin2123/subscriptions","organizations_url":"https://api.github.com/users/berlin2123/orgs","repos_url":"https://api.github.com/users/berlin2123/repos","events_url":"https://api.github.com/users/berlin2123/events{/privacy}","received_events_url":"https://api.github.com/users/berlin2123/received_events","type":"User","site_admin":false},"labels":[{"id":162429779,"node_id":"MDU6TGFiZWwxNjI0Mjk3Nzk=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:proposal","name":"type:proposal","color":"207de5","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2024-03-14T14:36:54Z","updated_at":"2024-03-15T05:03:24Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"body":"**Feature**\r\nAdd config variable html_static_link_path to **Link** paths or files into the Output _static path instead of Copying them.\r\n\r\n**Purpose**\r\n- **Linking instead of copying** will dramatically reduce hard disk usage and speed up the build process, especially when the directories or files are particularly large. \r\n\r\n**Status**\r\nHave add this Feature by PR #12080 \r\n\r\n**Why open this issue**\r\nTalking about how to avoid modification of files inside `link-souce`","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12092/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12092/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12087","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12087/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12087/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12087/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12087","id":2186083321,"node_id":"PR_kwDOAbYXYc5pnZ7z","number":12087,"title":"[8.x] fix intersphinx cache","user":{"login":"picnixz","id":10796600,"node_id":"MDQ6VXNlcjEwNzk2NjAw","avatar_url":"https://avatars.githubusercontent.com/u/10796600?v=4","gravatar_id":"","url":"https://api.github.com/users/picnixz","html_url":"https://github.com/picnixz","followers_url":"https://api.github.com/users/picnixz/followers","following_url":"https://api.github.com/users/picnixz/following{/other_user}","gists_url":"https://api.github.com/users/picnixz/gists{/gist_id}","starred_url":"https://api.github.com/users/picnixz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/picnixz/subscriptions","organizations_url":"https://api.github.com/users/picnixz/orgs","repos_url":"https://api.github.com/users/picnixz/repos","events_url":"https://api.github.com/users/picnixz/events{/privacy}","received_events_url":"https://api.github.com/users/picnixz/received_events","type":"User","site_admin":false},"labels":[{"id":162407993,"node_id":"MDU6TGFiZWwxNjI0MDc5OTM=","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/type:bug","name":"type:bug","color":"a11d21","default":false,"description":""},{"id":1898174464,"node_id":"MDU6TGFiZWwxODk4MTc0NDY0","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/extensions:intersphinx","name":"extensions:intersphinx","color":"D1EB8A","default":false,"description":""},{"id":6516016651,"node_id":"LA_kwDOAbYXYc8AAAABhGKGCw","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/DO%20NOT%20MERGE","name":"DO NOT MERGE","color":"B60205","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/milestones/144","html_url":"https://github.com/sphinx-doc/sphinx/milestone/144","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/milestones/144/labels","id":10683168,"node_id":"MI_kwDOAbYXYc4AowMg","number":144,"title":"8.x","description":null,"creator":{"login":"picnixz","id":10796600,"node_id":"MDQ6VXNlcjEwNzk2NjAw","avatar_url":"https://avatars.githubusercontent.com/u/10796600?v=4","gravatar_id":"","url":"https://api.github.com/users/picnixz","html_url":"https://github.com/picnixz","followers_url":"https://api.github.com/users/picnixz/followers","following_url":"https://api.github.com/users/picnixz/following{/other_user}","gists_url":"https://api.github.com/users/picnixz/gists{/gist_id}","starred_url":"https://api.github.com/users/picnixz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/picnixz/subscriptions","organizations_url":"https://api.github.com/users/picnixz/orgs","repos_url":"https://api.github.com/users/picnixz/repos","events_url":"https://api.github.com/users/picnixz/events{/privacy}","received_events_url":"https://api.github.com/users/picnixz/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":0,"state":"open","created_at":"2024-03-14T09:49:19Z","updated_at":"2024-03-14T11:17:54Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2024-03-14T11:13:18Z","updated_at":"2024-03-17T14:52:17Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"draft":true,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12087","html_url":"https://github.com/sphinx-doc/sphinx/pull/12087","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12087.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12087.patch","merged_at":null},"body":"This one is based on top of #12083.\r\n\r\nThis is the actual implementation (and bugfix) of #11466. I open it so that I can track more easily (and don't forget about it) but don't review it until the aforementioned PR is merged (and this one is rebased).","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12087/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12087/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12083","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12083/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12083/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12083/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12083","id":2185857706,"node_id":"PR_kwDOAbYXYc5pmogl","number":12083,"title":"[8.x] deprecate intersphinx format ","user":{"login":"picnixz","id":10796600,"node_id":"MDQ6VXNlcjEwNzk2NjAw","avatar_url":"https://avatars.githubusercontent.com/u/10796600?v=4","gravatar_id":"","url":"https://api.github.com/users/picnixz","html_url":"https://github.com/picnixz","followers_url":"https://api.github.com/users/picnixz/followers","following_url":"https://api.github.com/users/picnixz/following{/other_user}","gists_url":"https://api.github.com/users/picnixz/gists{/gist_id}","starred_url":"https://api.github.com/users/picnixz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/picnixz/subscriptions","organizations_url":"https://api.github.com/users/picnixz/orgs","repos_url":"https://api.github.com/users/picnixz/repos","events_url":"https://api.github.com/users/picnixz/events{/privacy}","received_events_url":"https://api.github.com/users/picnixz/received_events","type":"User","site_admin":false},"labels":[{"id":1898174464,"node_id":"MDU6TGFiZWwxODk4MTc0NDY0","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/extensions:intersphinx","name":"extensions:intersphinx","color":"D1EB8A","default":false,"description":""},{"id":6516016651,"node_id":"LA_kwDOAbYXYc8AAAABhGKGCw","url":"https://api.github.com/repos/sphinx-doc/sphinx/labels/DO%20NOT%20MERGE","name":"DO NOT MERGE","color":"B60205","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/milestones/144","html_url":"https://github.com/sphinx-doc/sphinx/milestone/144","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/milestones/144/labels","id":10683168,"node_id":"MI_kwDOAbYXYc4AowMg","number":144,"title":"8.x","description":null,"creator":{"login":"picnixz","id":10796600,"node_id":"MDQ6VXNlcjEwNzk2NjAw","avatar_url":"https://avatars.githubusercontent.com/u/10796600?v=4","gravatar_id":"","url":"https://api.github.com/users/picnixz","html_url":"https://github.com/picnixz","followers_url":"https://api.github.com/users/picnixz/followers","following_url":"https://api.github.com/users/picnixz/following{/other_user}","gists_url":"https://api.github.com/users/picnixz/gists{/gist_id}","starred_url":"https://api.github.com/users/picnixz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/picnixz/subscriptions","organizations_url":"https://api.github.com/users/picnixz/orgs","repos_url":"https://api.github.com/users/picnixz/repos","events_url":"https://api.github.com/users/picnixz/events{/privacy}","received_events_url":"https://api.github.com/users/picnixz/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":0,"state":"open","created_at":"2024-03-14T09:49:19Z","updated_at":"2024-03-14T11:17:54Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2024-03-14T09:21:23Z","updated_at":"2024-03-17T14:52:27Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12083","html_url":"https://github.com/sphinx-doc/sphinx/pull/12083","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12083.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12083.patch","merged_at":null},"body":"Extracted from #11706.\r\n\r\ncc @jayaddison ","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12083/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12083/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12080","repository_url":"https://api.github.com/repos/sphinx-doc/sphinx","labels_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12080/labels{/name}","comments_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12080/comments","events_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12080/events","html_url":"https://github.com/sphinx-doc/sphinx/pull/12080","id":2185748524,"node_id":"PR_kwDOAbYXYc5pmUjn","number":12080,"title":"Add config variable html_link_path to Link paths or files into the Outdir","user":{"login":"berlin2123","id":68841407,"node_id":"MDQ6VXNlcjY4ODQxNDA3","avatar_url":"https://avatars.githubusercontent.com/u/68841407?v=4","gravatar_id":"","url":"https://api.github.com/users/berlin2123","html_url":"https://github.com/berlin2123","followers_url":"https://api.github.com/users/berlin2123/followers","following_url":"https://api.github.com/users/berlin2123/following{/other_user}","gists_url":"https://api.github.com/users/berlin2123/gists{/gist_id}","starred_url":"https://api.github.com/users/berlin2123/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/berlin2123/subscriptions","organizations_url":"https://api.github.com/users/berlin2123/orgs","repos_url":"https://api.github.com/users/berlin2123/repos","events_url":"https://api.github.com/users/berlin2123/events{/privacy}","received_events_url":"https://api.github.com/users/berlin2123/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":5,"created_at":"2024-03-14T08:34:05Z","updated_at":"2024-03-16T03:23:06Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/pulls/12080","html_url":"https://github.com/sphinx-doc/sphinx/pull/12080","diff_url":"https://github.com/sphinx-doc/sphinx/pull/12080.diff","patch_url":"https://github.com/sphinx-doc/sphinx/pull/12080.patch","merged_at":null},"body":"Subject: \r\nAdd config variable html_static_link_path to **Link** paths or files into the Output _static path instead of Copying them.\r\n\r\n### Feature or Bugfix\r\n- Feature\r\n\r\n### Purpose\r\n- **Linking instead of copying** will dramatically reduce hard disk usage and speed up the build process, especially when the directories or files are particularly large. \r\n\r\n### Relates\r\n- https://github.com/orgs/sphinx-doc/discussions/12051\r\n\r\n### Testing\r\n- just tested inside Linux, not yet Windows or MacOS \r\n","reactions":{"url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12080/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/sphinx-doc/sphinx/issues/12080/timeline","performed_via_github_app":null,"state_reason":null}]