name: OpenOperator integration on: pull_request: push: branches: [main, develop, "codex/**"] permissions: contents: read jobs: focused-regression: runs-on: ubuntu-latest timeout-minutes: 45 steps: - uses: actions/checkout@v4 with: fetch-depth: 2 - uses: actions/setup-python@v5 with: python-version: "3.12" cache: pip - name: Install declared dependencies run: python -m pip install -r requirements.txt -r requirements.dev.txt fonttools - name: Install pinned supervisor test runtimes run: | python -m venv /tmp/venv-argus /tmp/venv-argus/bin/pip install -c plugins/argus_supervisor/runtime/argus-constraints.txt git+https://github.com/microsoft/ArgusAgent.git@fdfeb715b0749db176c7d8b3212a717fb81087ba python -m venv /tmp/venv-foreman /tmp/venv-foreman/bin/pip install -c plugins/argus_supervisor/runtime/foreman-constraints.txt git+https://github.com/JsonLord/foreman-supervisor.git@381ca2de90af9efc2781a58055cc3028c7cabbb9 - name: Static checks run: | python -m compileall -q helpers api plugins/_goal plugins/argus_supervisor scripts agents/spynel extensions/python/monologue_start bash -n scripts/qualify_openoperator_a2a.sh docker/run/fs/exe/huggingface-entrypoint.sh docker/run/fs/ins/copy_A0.sh docker/run/fs/ins/install_argus_supervisor.sh git diff --check HEAD^ HEAD - name: Require real Argus integration discovery (no skips) run: | python -m pytest -q plugins/argus_supervisor/tests/test_plugin_integration.py::test_real_profile_plugin_and_sync_startup_hook_are_discovered --junitxml=/tmp/argus-discovery.xml python - <<'PYTHON' import xml.etree.ElementTree as ET cases = ET.parse('/tmp/argus-discovery.xml').findall('.//testcase') assert len(cases) == 1, 'Critical integration test must execute exactly once' assert not any(case.find(tag) is not None for case in cases for tag in ('skipped', 'failure', 'error')) PYTHON - name: Focused integration regression env: ARGUS_TEST_ARGUS_PYTHON: /tmp/venv-argus/bin/python ARGUS_TEST_FOREMAN_PYTHON: /tmp/venv-foreman/bin/python run: | pytest -q \ plugins/_goal/tests \ plugins/argus_supervisor/tests \ tests/test_goal_state_contract.py \ tests/test_api_token_authority.py \ tests/test_hf_integration_auth.py \ tests/test_settings_probe.py \ tests/test_spynel.py \ tests/test_spynel_resolver.py \ tests/test_spynel_dispatch_integration.py \ tests/test_spynel_profile_guard.py \ tests/test_search_reliability.py \ tests/test_tinyfish_fallback.py \ tests/test_document_query_plugin.py \ tests/test_document_query_fallback.py \ tests/test_hf_deployment_control.py \ tests/test_hf_searxng_startup.py \ plugins/_chat_naming/tests \ tests/test_blocking_a2a.py \ tests/test_fasta2a_server.py \ tests/test_a2a_argus_supervisor.py \ tests/test_a2a_boundary.py \ tests/test_fasta2a_client.py \ tests/test_http_auth_csrf.py \ tests/test_sidebar_row_actions.py \ tests/test_prompt_improver.py \ tests/test_specialist_profiles.py \ tests/test_runtime_dockerized.py \ tests/test_settings_root_password.py \ tests/test_settings_mcp.py \ tests/test_hf_space_defaults.py \ tests/test_hf_smoke.py \ tests/test_memory_extension_hf.py \ tests/test_webui_icons.py \ tests/test_tiny_coder_model_binding.py \ tests/test_colab_a0.py \ tests/test_worktree_isolation_contract.py