From 63074a3239368ec1e52aaac7ff00eaf9ec56e263 Mon Sep 17 00:00:00 2001 From: Vishal Goyal Date: Mon, 5 Jan 2026 21:13:47 +0530 Subject: [PATCH 01/11] fix: set asyncio_default_fixture_loop_scope to avoid pytest warning --- api_app/pytest.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api_app/pytest.ini b/api_app/pytest.ini index 9e90ef7cb8..56f124a8e4 100644 --- a/api_app/pytest.ini +++ b/api_app/pytest.ini @@ -1,3 +1,5 @@ [pytest] filterwarnings = error +asyncio_mode = auto +asyncio_default_fixture_loop_scope = function From e8e21a646ec398774455e605f5143e886a84f5b0 Mon Sep 17 00:00:00 2001 From: Vishal Date: Wed, 7 Jan 2026 21:22:40 +0530 Subject: [PATCH 02/11] Fix pytest-asyncio v1.x async fixture usage --- api_app/tests_ma/test_api/conftest.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api_app/tests_ma/test_api/conftest.py b/api_app/tests_ma/test_api/conftest.py index b386ce32bd..9e84fd34f9 100644 --- a/api_app/tests_ma/test_api/conftest.py +++ b/api_app/tests_ma/test_api/conftest.py @@ -127,11 +127,11 @@ def inner(): @pytest_asyncio.fixture(scope='module') -def app() -> FastAPI: +async def app() -> FastAPI: from main import get_application - the_app = get_application() - return the_app + + return get_application() @pytest_asyncio.fixture From 2ef08bf6882ccd471d5bce277158b362b14a49a0 Mon Sep 17 00:00:00 2001 From: Vishal Date: Thu, 8 Jan 2026 00:55:26 +0530 Subject: [PATCH 03/11] Fix pytest-asyncio deprecation by enforcing strict mode and sync fixtures --- api_app/pytest.ini | 2 +- api_app/tests_ma/test_api/test_routes/test_airlock.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api_app/pytest.ini b/api_app/pytest.ini index 56f124a8e4..a86e89e4bb 100644 --- a/api_app/pytest.ini +++ b/api_app/pytest.ini @@ -1,5 +1,5 @@ [pytest] filterwarnings = error -asyncio_mode = auto +asyncio_mode = strict asyncio_default_fixture_loop_scope = function diff --git a/api_app/tests_ma/test_api/test_routes/test_airlock.py b/api_app/tests_ma/test_api/test_routes/test_airlock.py index 852ef09dbe..5dc47622a1 100644 --- a/api_app/tests_ma/test_api/test_routes/test_airlock.py +++ b/api_app/tests_ma/test_api/test_routes/test_airlock.py @@ -1,6 +1,6 @@ import time import pytest -import pytest_asyncio +# import pytest_asyncio from mock import patch from fastapi import status from azure.core.exceptions import HttpResponseError @@ -127,7 +127,7 @@ def inner(): class TestAirlockRoutesThatRequireOwnerOrResearcherRights(): - @pytest_asyncio.fixture(autouse=True, scope='class') + @pytest.fixture(autouse=True, scope='class') def log_in_with_researcher_user(self, app, researcher_user): app.dependency_overrides[get_current_workspace_owner_or_researcher_user] = researcher_user app.dependency_overrides[get_current_workspace_owner_or_researcher_user_or_airlock_manager] = researcher_user @@ -303,7 +303,7 @@ async def test_get_airlock_container_link_returned_as_expected(self, get_airlock class TestAirlockRoutesThatRequireAirlockManagerRights(): - @pytest_asyncio.fixture(autouse=True, scope='class') + @pytest.fixture(autouse=True, scope='class') def log_in_with_airlock_manager_user(self, app, airlock_manager_user): app.dependency_overrides[get_current_airlock_manager_user] = airlock_manager_user app.dependency_overrides[get_current_workspace_owner_or_researcher_user_or_airlock_manager] = airlock_manager_user @@ -463,7 +463,7 @@ async def test_post_revoke_airlock_request_missing_reason_returns_422(self, _, a class TestAirlockRoutesPermissions(): - @pytest_asyncio.fixture() + @pytest.fixture() def log_in_with_user(self, app): def inner(user): app.dependency_overrides[get_current_workspace_owner_or_researcher_user] = user From e4d68f7d80405ff37bad6ff0a4d15af3f4789540 Mon Sep 17 00:00:00 2001 From: Vishal Date: Mon, 12 Jan 2026 22:13:05 +0530 Subject: [PATCH 04/11] Remove remaining pytest_asyncio fixtures and use sync pytest fixtures --- api_app/tests_ma/conftest.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api_app/tests_ma/conftest.py b/api_app/tests_ma/conftest.py index 6245ec23ec..b47ec5a811 100644 --- a/api_app/tests_ma/conftest.py +++ b/api_app/tests_ma/conftest.py @@ -1,5 +1,5 @@ import pytest -import pytest_asyncio + from mock import AsyncMock, patch from azure.cosmos.aio import CosmosClient, DatabaseProxy @@ -575,8 +575,8 @@ def simple_pipeline_step() -> PipelineStep: ) -@pytest_asyncio.fixture(autouse=True) -async def no_database(): +@pytest.fixture(autouse=True) +def no_database(): with patch('api.dependencies.database.get_credential_async', return_value=AsyncMock()), \ patch('api.dependencies.database.CosmosClient', return_value=AsyncMock(spec=CosmosClient)) as cosmos_client_mock: cosmos_client_mock.return_value.get_database_client.return_value = AsyncMock(spec=DatabaseProxy) From 9ed935607c434a787623720b6b22a35bd79cc3fc Mon Sep 17 00:00:00 2001 From: Vishal Date: Mon, 12 Jan 2026 22:15:52 +0530 Subject: [PATCH 05/11] Fix remaining fixtures for pytest-asyncio strict mode --- api_app/tests_ma/test_api/conftest.py | 18 +++---- .../test_api/test_routes/test_airlock.py | 47 ++++++++++++++----- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/api_app/tests_ma/test_api/conftest.py b/api_app/tests_ma/test_api/conftest.py index 9e84fd34f9..e585828218 100644 --- a/api_app/tests_ma/test_api/conftest.py +++ b/api_app/tests_ma/test_api/conftest.py @@ -1,5 +1,5 @@ import pytest -import pytest_asyncio + from mock import patch from fastapi import FastAPI @@ -126,16 +126,18 @@ def inner(): return inner -@pytest_asyncio.fixture(scope='module') -async def app() -> FastAPI: +@pytest.fixture(scope='module') +def app() -> FastAPI: from main import get_application return get_application() -@pytest_asyncio.fixture -async def client(app: FastAPI) -> AsyncClient: - - async with AsyncClient(app=app, base_url="http://testserver", headers={"Content-Type": "application/json"}) as client: - yield client +@pytest.fixture +def client(app: FastAPI) -> AsyncClient: + return AsyncClient( + app=app, + base_url="http://testserver", + headers={"Content-Type": "application/json"}, + ) diff --git a/api_app/tests_ma/test_api/test_routes/test_airlock.py b/api_app/tests_ma/test_api/test_routes/test_airlock.py index 5dc47622a1..2345e8025e 100644 --- a/api_app/tests_ma/test_api/test_routes/test_airlock.py +++ b/api_app/tests_ma/test_api/test_routes/test_airlock.py @@ -1,6 +1,6 @@ import time import pytest -# import pytest_asyncio + from mock import patch from fastapi import status from azure.core.exceptions import HttpResponseError @@ -17,7 +17,7 @@ from models.domain.operation import Operation from resources import strings from services.authentication import get_current_workspace_owner_or_researcher_user, get_current_workspace_owner_or_researcher_user_or_airlock_manager, get_current_airlock_manager_user -pytestmark = pytest.mark.asyncio + WORKSPACE_ID = "abc000d3-82da-4bfc-b6e9-9a7853ef753e" @@ -127,18 +127,31 @@ def inner(): class TestAirlockRoutesThatRequireOwnerOrResearcherRights(): - @pytest.fixture(autouse=True, scope='class') + @pytest.fixture(autouse=True, scope="class") def log_in_with_researcher_user(self, app, researcher_user): app.dependency_overrides[get_current_workspace_owner_or_researcher_user] = researcher_user app.dependency_overrides[get_current_workspace_owner_or_researcher_user_or_airlock_manager] = researcher_user - with patch("api.routes.airlock.AirlockRequestRepository.create_airlock_request_item", return_value=sample_airlock_request_object()), \ - patch("api.routes.workspaces.OperationRepository.resource_has_deployed_operation"), \ - patch("api.routes.airlock.AirlockRequestRepository.save_item"), \ - patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id"), \ - patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}): + with patch( + "api.routes.airlock.AirlockRequestRepository.create_airlock_request_item", + return_value=sample_airlock_request_object(), + ), patch( + "api.routes.workspaces.OperationRepository.resource_has_deployed_operation" + ), patch( + "api.routes.airlock.AirlockRequestRepository.save_item" + ), patch( + "api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id" + ), patch( + "services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", + return_value={ + "WorkspaceResearcher": ["researcher@outlook.com"], + "WorkspaceOwner": ["owner@outlook.com"], + "AirlockManager": ["manager@outlook.com"], + }, + ): yield app.dependency_overrides = {} + # [GET] /workspaces/{workspace_id}/requests} @patch("api.routes.airlock.AirlockRequestRepository.get_airlock_requests", return_value=[]) async def test_get_all_airlock_requests_by_workspace_returns_200(self, _, app, client): @@ -303,17 +316,24 @@ async def test_get_airlock_container_link_returned_as_expected(self, get_airlock class TestAirlockRoutesThatRequireAirlockManagerRights(): - @pytest.fixture(autouse=True, scope='class') + @pytest.fixture(autouse=True, scope="class") def log_in_with_airlock_manager_user(self, app, airlock_manager_user): app.dependency_overrides[get_current_airlock_manager_user] = airlock_manager_user app.dependency_overrides[get_current_workspace_owner_or_researcher_user_or_airlock_manager] = airlock_manager_user - with patch("services.airlock.AirlockRequestRepository.create_airlock_request_item", return_value=sample_airlock_request_object()), \ - patch("api.routes.workspaces.OperationRepository.resource_has_deployed_operation"), \ - patch("services.airlock.AirlockRequestRepository.save_item"), \ - patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id"): + with patch( + "services.airlock.AirlockRequestRepository.create_airlock_request_item", + return_value=sample_airlock_request_object(), + ), patch( + "api.routes.workspaces.OperationRepository.resource_has_deployed_operation" + ), patch( + "services.airlock.AirlockRequestRepository.save_item" + ), patch( + "api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id" + ): yield app.dependency_overrides = {} + # [POST] /workspaces/{workspace_id}/requests/{airlock_request_id}/review @patch("services.airlock.AirlockRequestRepository.read_item_by_id", return_value=sample_airlock_request_object(status=AirlockRequestStatus.InReview)) @patch("services.airlock.AirlockRequestRepository.create_airlock_review_item", return_value=sample_airlock_review_object()) @@ -471,6 +491,7 @@ def inner(user): app.dependency_overrides[get_current_workspace_owner_or_researcher_user_or_airlock_manager] = user return inner + @pytest.mark.parametrize("role", (role for role in get_required_roles(endpoint=create_draft_request))) @patch("api.routes.workspaces.OperationRepository.resource_has_deployed_operation") @patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace(WORKSPACE_ID)) From 435a77ff94603294e9af18acb3c55d4d4833abd4 Mon Sep 17 00:00:00 2001 From: Vishal Date: Tue, 13 Jan 2026 20:56:37 +0530 Subject: [PATCH 06/11] Add Bandit security scanning to PR validation workflow --- .github/workflows/build_validation_develop.yml | 15 +++++++++++++++ pyproject.toml | 9 +++++++++ 2 files changed, 24 insertions(+) create mode 100644 pyproject.toml diff --git a/.github/workflows/build_validation_develop.yml b/.github/workflows/build_validation_develop.yml index abe806ddfb..76b1bd7ef1 100644 --- a/.github/workflows/build_validation_develop.yml +++ b/.github/workflows/build_validation_develop.yml @@ -103,6 +103,21 @@ jobs: VALIDATE_TSX: true VALIDATE_TYPESCRIPT_ES: true + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: "pip" + + - name: Install Bandit + if: ${{ steps.filter.outputs.core == 'true' }} + run: pip install bandit + + - name: Run Bandit security checks + if: ${{ steps.filter.outputs.core == 'true' }} + run: bandit -c pyproject.toml -r . + + - name: Docs validation if: ${{ steps.filter.outputs.docs == 'true' }} run: | diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000..45f7c10cbf --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,9 @@ +[tool.bandit] +exclude_dirs = [ + "api_app/tests_ma", + "airlock_processor/tests", + "resource_processor/tests_rp", + "e2e_tests", + ".venv", + "venv" +] From cc2c3e6b4dbc26c402a0c23e4e642e1207ba11b5 Mon Sep 17 00:00:00 2001 From: Vishal Date: Wed, 14 Jan 2026 20:47:00 +0530 Subject: [PATCH 07/11] Remove Bandit config and CI steps from pytest-asyncio fix PR --- .github/workflows/build_validation_develop.yml | 9 --------- pyproject.toml | 9 --------- 2 files changed, 18 deletions(-) delete mode 100644 pyproject.toml diff --git a/.github/workflows/build_validation_develop.yml b/.github/workflows/build_validation_develop.yml index 76b1bd7ef1..a589475105 100644 --- a/.github/workflows/build_validation_develop.yml +++ b/.github/workflows/build_validation_develop.yml @@ -109,15 +109,6 @@ jobs: python-version: "3.11" cache: "pip" - - name: Install Bandit - if: ${{ steps.filter.outputs.core == 'true' }} - run: pip install bandit - - - name: Run Bandit security checks - if: ${{ steps.filter.outputs.core == 'true' }} - run: bandit -c pyproject.toml -r . - - - name: Docs validation if: ${{ steps.filter.outputs.docs == 'true' }} run: | diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 45f7c10cbf..0000000000 --- a/pyproject.toml +++ /dev/null @@ -1,9 +0,0 @@ -[tool.bandit] -exclude_dirs = [ - "api_app/tests_ma", - "airlock_processor/tests", - "resource_processor/tests_rp", - "e2e_tests", - ".venv", - "venv" -] From 85500c9ed0016f6edd686bd8541fc48e2a4ed380 Mon Sep 17 00:00:00 2001 From: Vishal Date: Wed, 14 Jan 2026 21:14:57 +0530 Subject: [PATCH 08/11] Fix AsyncClient fixture lifecycle for pytest-asyncio strict mode --- api_app/tests_ma/test_api/conftest.py | 79 ++++++++++----------------- 1 file changed, 30 insertions(+), 49 deletions(-) diff --git a/api_app/tests_ma/test_api/conftest.py b/api_app/tests_ma/test_api/conftest.py index e585828218..97f1abf1ee 100644 --- a/api_app/tests_ma/test_api/conftest.py +++ b/api_app/tests_ma/test_api/conftest.py @@ -1,14 +1,14 @@ import pytest +import pytest_asyncio from mock import patch - from fastapi import FastAPI from httpx import AsyncClient from models.domain.authentication import User -@pytest.fixture(autouse=True, scope='module') +@pytest.fixture(autouse=True, scope="module") def no_lifespan_events(): with patch("main.lifespan"): yield @@ -16,9 +16,15 @@ def no_lifespan_events(): @pytest.fixture(autouse=True) def no_auth_token(): - """ overrides validating and decoding tokens for all tests""" - with patch('services.aad_authentication.AccessService.__call__', return_value="token"): - with patch('services.aad_authentication.AzureADAuthorization._decode_token', return_value="decoded_token"): + """Overrides validating and decoding tokens for all tests""" + with patch( + "services.aad_authentication.AccessService.__call__", + return_value="token", + ): + with patch( + "services.aad_authentication.AzureADAuthorization._decode_token", + return_value="decoded_token", + ): yield @@ -34,7 +40,7 @@ def create_test_user() -> User: name="Test User", email="test@user.com", roles=[], - roleAssignments=[] + roleAssignments=[], ) @@ -70,74 +76,49 @@ def create_workspace_airlock_manager_user() -> User: return user -def override_get_user(): - user = create_test_user() - user.roles = [] - user.roleAssignments = [("ab123", "ab124")] - return user - - -def get_required_roles(endpoint): - dependencies = list(filter(lambda x: hasattr(x.dependency, 'require_one_of_roles'), endpoint.__defaults__)) - required_roles = dependencies[0].dependency.require_one_of_roles - return required_roles - - -@pytest.fixture(scope='module') +@pytest.fixture(scope="module") def admin_user(): - def inner(): - return create_admin_user() - return inner + return create_admin_user -@pytest.fixture(scope='module') +@pytest.fixture(scope="module") def non_admin_user(): - def inner(): - return create_non_admin_user() - return inner + return create_non_admin_user -@pytest.fixture(scope='module') +@pytest.fixture(scope="module") def owner_user(): - def inner(): - return create_workspace_owner_user() - return inner + return create_workspace_owner_user -@pytest.fixture(scope='module') +@pytest.fixture(scope="module") def researcher_user(): - def inner(): - return create_workspace_researcher_user() - return inner + return create_workspace_researcher_user -@pytest.fixture(scope='module') +@pytest.fixture(scope="module") def airlock_manager_user(): - def inner(): - return create_workspace_airlock_manager_user() - return inner + return create_workspace_airlock_manager_user -@pytest.fixture(scope='module') +@pytest.fixture(scope="module") def no_workspace_role_user(): def inner(): - user = create_test_user() - return user + return create_test_user() return inner -@pytest.fixture(scope='module') +@pytest.fixture(scope="module") def app() -> FastAPI: from main import get_application - - return get_application() -@pytest.fixture -def client(app: FastAPI) -> AsyncClient: - return AsyncClient( +@pytest_asyncio.fixture +async def client(app: FastAPI) -> AsyncClient: + async with AsyncClient( app=app, base_url="http://testserver", headers={"Content-Type": "application/json"}, - ) + ) as client: + yield client From e6164c6315167b90e8d8101bae4cb9e0094f0fcf Mon Sep 17 00:00:00 2001 From: Vishal Date: Wed, 14 Jan 2026 21:35:57 +0530 Subject: [PATCH 09/11] Resolve merge conflict in conftest.py --- api_app/tests_ma/test_api/conftest.py | 72 ++++++++++++++++++--------- 1 file changed, 48 insertions(+), 24 deletions(-) diff --git a/api_app/tests_ma/test_api/conftest.py b/api_app/tests_ma/test_api/conftest.py index 97f1abf1ee..e0fdc3bb3a 100644 --- a/api_app/tests_ma/test_api/conftest.py +++ b/api_app/tests_ma/test_api/conftest.py @@ -1,14 +1,16 @@ import pytest import pytest_asyncio + from mock import patch + from fastapi import FastAPI from httpx import AsyncClient from models.domain.authentication import User -@pytest.fixture(autouse=True, scope="module") +@pytest.fixture(autouse=True, scope='module') def no_lifespan_events(): with patch("main.lifespan"): yield @@ -16,15 +18,9 @@ def no_lifespan_events(): @pytest.fixture(autouse=True) def no_auth_token(): - """Overrides validating and decoding tokens for all tests""" - with patch( - "services.aad_authentication.AccessService.__call__", - return_value="token", - ): - with patch( - "services.aad_authentication.AzureADAuthorization._decode_token", - return_value="decoded_token", - ): + """ overrides validating and decoding tokens for all tests""" + with patch('services.aad_authentication.AccessService.__call__', return_value="token"): + with patch('services.aad_authentication.AzureADAuthorization._decode_token', return_value="decoded_token"): yield @@ -40,7 +36,7 @@ def create_test_user() -> User: name="Test User", email="test@user.com", roles=[], - roleAssignments=[], + roleAssignments=[] ) @@ -76,41 +72,67 @@ def create_workspace_airlock_manager_user() -> User: return user -@pytest.fixture(scope="module") +def override_get_user(): + user = create_test_user() + user.roles = [] + user.roleAssignments = [("ab123", "ab124")] + return user + + +def get_required_roles(endpoint): + dependencies = list(filter(lambda x: hasattr(x.dependency, 'require_one_of_roles'), endpoint.__defaults__)) + required_roles = dependencies[0].dependency.require_one_of_roles + return required_roles + + +@pytest.fixture(scope='module') def admin_user(): - return create_admin_user + def inner(): + return create_admin_user() + return inner -@pytest.fixture(scope="module") +@pytest.fixture(scope='module') def non_admin_user(): - return create_non_admin_user + def inner(): + return create_non_admin_user() + return inner -@pytest.fixture(scope="module") +@pytest.fixture(scope='module') def owner_user(): - return create_workspace_owner_user + def inner(): + return create_workspace_owner_user() + return inner -@pytest.fixture(scope="module") +@pytest.fixture(scope='module') def researcher_user(): - return create_workspace_researcher_user + def inner(): + return create_workspace_researcher_user() + return inner -@pytest.fixture(scope="module") +@pytest.fixture(scope='module') def airlock_manager_user(): - return create_workspace_airlock_manager_user + def inner(): + return create_workspace_airlock_manager_user() + return inner -@pytest.fixture(scope="module") +@pytest.fixture(scope='module') def no_workspace_role_user(): def inner(): - return create_test_user() + user = create_test_user() + return user return inner -@pytest.fixture(scope="module") +@pytest.fixture(scope='module') def app() -> FastAPI: from main import get_application + + return get_application() @@ -122,3 +144,5 @@ async def client(app: FastAPI) -> AsyncClient: headers={"Content-Type": "application/json"}, ) as client: yield client + + From 0d21f8cac0a5df9ccb287488499eed60dc45d301 Mon Sep 17 00:00:00 2001 From: Vishal Date: Wed, 14 Jan 2026 21:51:33 +0530 Subject: [PATCH 10/11] Mark airlock route tests as asyncio --- api_app/tests_ma/test_api/test_routes/test_airlock.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api_app/tests_ma/test_api/test_routes/test_airlock.py b/api_app/tests_ma/test_api/test_routes/test_airlock.py index 2345e8025e..7cfb618577 100644 --- a/api_app/tests_ma/test_api/test_routes/test_airlock.py +++ b/api_app/tests_ma/test_api/test_routes/test_airlock.py @@ -1,6 +1,8 @@ import time import pytest +pytestmark = pytest.mark.asyncio + from mock import patch from fastapi import status from azure.core.exceptions import HttpResponseError @@ -19,7 +21,6 @@ from services.authentication import get_current_workspace_owner_or_researcher_user, get_current_workspace_owner_or_researcher_user_or_airlock_manager, get_current_airlock_manager_user - WORKSPACE_ID = "abc000d3-82da-4bfc-b6e9-9a7853ef753e" IMPORT_WORKSPACE_ID = "cba000d3-13da-58fc-b6e9-9a7853ef753e" WORKSPACE_SERVICE_ID = "ca8fec6b-3d90-4ad3-a003-77daddfc2d64" From 4bbf729e87472d7fad1d9172d3377c54a11127d9 Mon Sep 17 00:00:00 2001 From: Vishal Date: Mon, 19 Jan 2026 22:30:10 +0530 Subject: [PATCH 11/11] Remove unrelated CI Python setup from pytest-asyncio fix --- .github/workflows/build_validation_develop.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/build_validation_develop.yml b/.github/workflows/build_validation_develop.yml index a589475105..45a0c7db94 100644 --- a/.github/workflows/build_validation_develop.yml +++ b/.github/workflows/build_validation_develop.yml @@ -103,11 +103,6 @@ jobs: VALIDATE_TSX: true VALIDATE_TYPESCRIPT_ES: true - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.11" - cache: "pip" - name: Docs validation if: ${{ steps.filter.outputs.docs == 'true' }}