Skip to content

Conversation

@ganeshku1
Copy link
Member

@ganeshku1 ganeshku1 commented Aug 30, 2025

If a user want to test all the docs with e2e example execute this command.
Ensure the machine where you are running these commands have a GPU on it.

$ cd tests/ci/basic_end_to_end
$ python3 main.py --all-servers
  • Implement sequential server testing with complete lifecycle management
  • Add markdown parser for extracting tagged bash commands from documentation
  • Create server manager with background process handling and port cleanup
  • Implement AIPerf manager for test execution and result tracking

Summary by CodeRabbit

  • Documentation

    • Revamped tutorial with clearer AIPerf usage, streamlined Dynamo and vLLM setup/health-check sections, and updated Docker/env steps.
    • Updated endpoints (Dynamo now 8080) and reduced default profiling parameters for quicker runs.
    • Added inline setup, health-check, and run blocks for both Dynamo and vLLM.
  • Tests

    • Introduced end-to-end docs testing that discovers tagged blocks in guides, validates server readiness, and runs reduced-load AIPerf checks.
  • Chores

    • Removed legacy CI startup and end-to-end scripts in favor of the new docs-driven test flow.

@ganeshku1 ganeshku1 requested a review from lkomali August 30, 2025 23:40
@ganeshku1 ganeshku1 changed the title Add comprehensive CI testing framework for markdown-based end-to-end tests ci: Add comprehensive CI testing framework for markdown-based end-to-end tests Aug 31, 2025
@github-actions github-actions bot added the ci label Aug 31, 2025
@ganeshku1 ganeshku1 requested review from Copilot and removed request for lkomali August 31, 2025 01:35
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a comprehensive CI testing framework that extracts and executes markdown-tagged bash commands for end-to-end testing of documentation examples. The framework provides sequential server testing with complete lifecycle management, health checks, and detailed logging.

  • Introduces markdown parser to extract tagged bash commands from documentation files
  • Implements server manager with background process handling and port cleanup capabilities
  • Creates test orchestrator for coordinating complete test workflows with configurable timeouts

Reviewed Changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
test_orchestrator.py Main orchestrator coordinating test execution workflow with sequential server testing
test.sh Updates test script to use new Python framework instead of direct aiperf call
server_manager.py Manages server lifecycle including background processes, health checks, and cleanup
parse_and_execute_md_tags.py Legacy markdown parser with direct command execution capabilities
markdown_parser.py Core markdown parser for extracting tagged bash commands from documentation
main.py Entry point providing CLI interface for the test framework
aiperf_manager.py Handles AIPerf setup and test execution with result tracking
init.py Package initialization file
tutorial.md Updates documentation with proper markdown tags for CI testing

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@ganeshku1 ganeshku1 force-pushed the e2e-doc-test branch 3 times, most recently from cd43e7e to 3e4cd36 Compare August 31, 2025 01:52
@ganeshku1 ganeshku1 marked this pull request as draft August 31, 2025 02:04
@ganeshku1
Copy link
Member Author

@ganeshku1 ganeshku1 requested a review from lkomali August 31, 2025 14:47
@lkomali
Copy link
Contributor

lkomali commented Sep 2, 2025

I think the solution is pretty solid.

Just two things

  1. The basic-end-to-end folder is basic end to end CI test by Matt separate job from documentation testing.
    It might be better putting documentation testing related files into a separate folder to have clear separate folders for different tests which we can use in gitlab.yml.
  2. How are duplicate server setup tags handled? We can make sure the server setup is not detailed in different documents. However, in case, someone adds setup instructions again for dynamo open ai chat in a different document, this should throw an error. That helps in two ways - we know there are duplicate instructions and the developer would check the error, and remove them. Also, we don't have to maintain up-to-date instructions in two places. This case will not be common but a possibility since docs are added my multiple developers going forward.

@ganeshku1 ganeshku1 force-pushed the e2e-doc-test branch 11 times, most recently from 0c2162f to 31b2824 Compare September 7, 2025 17:50
@ganeshku1 ganeshku1 changed the title ci: Add comprehensive CI testing framework for markdown-based end-to-end tests ci: Add CI testing for markdown-based end-to-end tests Sep 8, 2025
@lkomali lkomali force-pushed the e2e-doc-test branch 2 times, most recently from 9ce6061 to 460f344 Compare September 9, 2025 19:42
@lkomali lkomali marked this pull request as ready for review September 9, 2025 20:27
Copy link
Contributor

@debermudez debermudez left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly stuff that got lost from a couple PRs in the recent history.

@ganeshku1
Copy link
Member Author

@matthewkotila and @lkomali is it okay to remove basic_end_to_end CI test after merging this PR?

@lkomali
Copy link
Contributor

lkomali commented Sep 15, 2025

@matthewkotila and @lkomali is it okay to remove basic_end_to_end CI test after merging this PR?

Will let @matthewkotila decide as he's the one who added the test.

ganeshku1 and others added 6 commits September 22, 2025 15:30
- Create utils.py with centralized utilities
- Add repo root path calculation to utils.py (single source of truth)
- Include Docker management utilities for container lifecycle
- Add command execution utilities with timeout handling
- Modular structure with reusable functions across all Python files
- Support --all-servers CLI option for CI integration
- Graceful server shutdown with Docker-based management
- Create utils.py with centralized utilities (repo root, Docker management, command execution)
- Enhanced docs/tutorial.md with HTML comment tags for both Dynamo and vLLM servers
- Support --all-servers CLI option for CI integration
- Graceful Docker-based server shutdown (no process killing)
- Fixed health check commands with proper 15-minute timeouts
- Clean AIPerf commands with proper parameter formatting
- Ready for CI pipeline execution with python3 main.py --all-servers
@codecov
Copy link

codecov bot commented Sep 22, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@coderabbitai
Copy link

coderabbitai bot commented Sep 24, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Docs tutorial updated with new setup/health-check tags and reduced-load examples for Dynamo (port 8080) and vLLM (port 8000). Legacy CI E2E shell scripts removed. New docs-driven E2E testing framework added: parser for tagged markdown, test runner orchestrating servers and an AIPerf container, utilities, constants, and entrypoint script.

Changes

Cohort / File(s) Summary
Docs tutorial updates
docs/tutorial.md
Rewrote/expanded Dynamo and vLLM sections; added setup/health-check HTML tag markers; updated Docker/env steps; changed endpoints (Dynamo 8080, vLLM 8000) and reduced profiling parameters; added aiperf-run blocks; restructured section titles.
Remove legacy CI scripts
tests/ci/basic_end_to_end/start_server.sh, tests/ci/basic_end_to_end/test.sh, tests/ci/common/setup_test.sh
Deleted old CI bootstrap, server startup, and E2E test scripts.
Docs E2E test framework — data and config
tests/ci/test_docs_end_to_end/constants.py, tests/ci/test_docs_end_to_end/data_types.py
Added constants for tag parsing and timeouts; introduced Command and Server dataclasses.
Docs E2E test framework — parsing
tests/ci/test_docs_end_to_end/parser.py
Added MarkdownParser to scan .md files, extract tagged bash blocks for setup/health-check/aiperf-run, and assemble Server definitions with validation.
Docs E2E test framework — runner and entrypoint
tests/ci/test_docs_end_to_end/test_runner.py, tests/ci/test_docs_end_to_end/main.py, tests/ci/test_docs_end_to_end/setup_test.sh
Added TestRunner to build AIPerf image, start container, run server setup and health-check, execute aiperf commands, and clean up. Added main entrypoint and CI wrapper script.
Docs E2E test framework — utilities
tests/ci/test_docs_end_to_end/utils.py
Added helpers for logging, command execution with timeouts, port extraction, Docker management, file checks, process termination, and cleanup.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant CI as CI Job
  participant Main as main.py
  participant Parser as MarkdownParser
  participant Runner as TestRunner
  participant Docker as Docker Engine
  participant Server as Target Server
  participant AIP as AIPerf Container

  CI->>Main: Run tests/ci/.../main.py --all-servers
  Main->>Parser: parse_directory(docs/)
  Parser-->>Main: servers: {name -> setup/health/aiperf cmds}

  Main->>Runner: run_tests(servers)
  Runner->>Docker: Build AIPerf image
  Docker-->>Runner: Build OK / version checked
  Runner->>Docker: Start AIPerf container
  Docker-->>Runner: Container ID

  loop For each server
    Runner->>Server: setup_command (background)
    Note over Runner,Server: Monitor setup output (timeout window)
    Runner->>Server: health_check_command (foreground/loop)
    Server-->>Runner: Ready (HTTP 200)

    loop AIPerf commands
      Runner->>AIP: exec aiperf ... --ui simple
      AIP-->>Runner: Exit code/result
    end

    Runner->>Server: Graceful shutdown/cleanup
  end

  Runner-->>Main: Success/Failure
  Main-->>CI: Exit code
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

I nudge the docs with gentle paws,
Tag clouds blink with setup laws.
Old shells hop off, new tests appear—
Parsers sniff commands so clear.
AIPerf drums in Docker’s den,
Health checks thump—one, two, then ten.
Carrots for green, merge it again! 🥕🐇

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title concisely and accurately summarizes the primary change: adding CI testing that discovers and runs end-to-end tests defined in markdown files. It uses the conventional "ci:" prefix and is specific enough for a reviewer to understand the main intent without being overly verbose.
Docstring Coverage ✅ Passed Docstring coverage is 92.31% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch e2e-doc-test

Tip

👮 Agentic pre-merge checks are now available in preview!

Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.

  • Built-in checks – Quickly apply ready-made checks to enforce title conventions, require pull request descriptions that follow templates, validate linked issues for compliance, and more.
  • Custom agentic checks – Define your own rules using CodeRabbit’s advanced agentic capabilities to enforce organization-specific policies and workflows. For example, you can instruct CodeRabbit’s agent to verify that API documentation is updated whenever API schema files are modified in a PR. Note: Upto 5 custom checks are currently allowed during the preview period. Pricing for this feature will be announced in a few weeks.

Please see the documentation for more information.

Example:

reviews:
  pre_merge_checks:
    custom_checks:
      - name: "Undocumented Breaking Changes"
        mode: "warning"
        instructions: |
          Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).

Please share your feedback with us on this Discord post.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (28)
tests/ci/test_docs_end_to_end/constants.py (2)

11-11: Include the hyphen in TAG_SUFFIX to avoid trailing '-' in server names.

Current slicing leaves a trailing '-' (e.g., "dynamo-default-openai-"). Make the suffix "-endpoint-server" so names are clean and consistent.

-TAG_SUFFIX = "endpoint-server"
+TAG_SUFFIX = "-endpoint-server"

22-26: Wire timeouts through the runner.

CONTAINER_BUILD_TIMEOUT, CONTAINER_START_TIMEOUT, and AIPERF_COMMAND_TIMEOUT should be enforced in the subprocess calls (build/run/exec) to prevent hangs.

Would you like a follow-up patch for test_runner.py to honor these constants?

tests/ci/test_docs_end_to_end/data_types.py (1)

26-28: Confirm Python >= 3.10 for PEP 604 unions.

Command | None requires Python 3.10+. If CI may run older, switch to Optional[Command] + from typing import Optional.

tests/ci/test_docs_end_to_end/main.py (2)

35-39: --all-servers flag is unused.

Either remove it or wire it to filter/select servers. Keeping unused flags increases confusion.


49-51: Returning success when no servers are found—confirm CI intent.

Exiting 0 on “No servers found” may mask discovery issues. Consider failing the job if discovery unexpectedly returns empty.

tests/ci/test_docs_end_to_end/parser.py (8)

45-51: Narrow the exception and log with traceback.

Catching Exception hides issues; use OSError and logger.exception to include stack traces.

-        except Exception as e:
-            logger.error(f"Failed to read file {file_path}: {e}")
+        except OSError as e:
+            logger.exception(f"Failed to read file {file_path}: {e}")

58-61: Simplify tag extraction regex.

Loosen to capture the whole tag content; prefix/suffix checks already validate it.

-                tag_match = re.match(r"<!--\s*([^-\s]+.*?)\s*-->", line)
+                tag_match = re.match(r"<!--\s*(.*?)\s*-->", line)

62-64: Fix comment to reflect all supported tags.

Includes health-check as well.

-                    # Check for setup or aiperf-run tags ending with endpoint-server
+                    # Check for setup/health-check/aiperf-run tags ending with endpoint-server

99-106: Support more fenced code block languages (bash/sh/shell/console).

Improves robustness to common doc styles.

-            if line == "```bash":
+            if re.fullmatch(r"```(bash|sh|shell|console)?", line):
                 break
             elif line and not line.startswith("#"):
                 return None
@@
-            if line.strip() == "```":
+            if line.strip() == "```":
                 return "".join(bash_lines).strip()

Also applies to: 115-116


126-131: Strip trailing '-' from derived server names.

Slicing with current suffix leaves a trailing separator.

-            server_name = tag_name[
-                SETUP_TAG_PREFIX_LEN:-TAG_SUFFIX_LEN
-            ]  # Remove prefix and suffix
+            server_name = tag_name[SETUP_TAG_PREFIX_LEN:-TAG_SUFFIX_LEN].rstrip("-")
+            # Remove prefix/suffix and any trailing separator

150-155: Apply the same trailing '-' fix for health-check tags.

-            server_name = tag_name[
-                HEALTH_CHECK_TAG_PREFIX_LEN:-TAG_SUFFIX_LEN
-            ]  # Remove prefix and suffix
+            server_name = tag_name[HEALTH_CHECK_TAG_PREFIX_LEN:-TAG_SUFFIX_LEN].rstrip("-")

176-181: Apply the same trailing '-' fix for aiperf-run tags.

-            server_name = tag_name[
-                AIPERF_RUN_TAG_PREFIX_LEN:-TAG_SUFFIX_LEN
-            ]  # Remove prefix and suffix
+            server_name = tag_name[AIPERF_RUN_TAG_PREFIX_LEN:-TAG_SUFFIX_LEN].rstrip("-")

140-147: Prefer raising exceptions over sys.exit for duplicates.

Let the caller decide how to handle errors; improves testability and reuse.

-                sys.exit(1)
+                raise ValueError(f"Duplicate setup tag for server '{server_name}'")
@@
-                sys.exit(1)
+                raise ValueError(f"Duplicate health-check tag for server '{server_name}'")

Also applies to: 164-172

docs/tutorial.md (4)

27-28: Typo: “Dyanmo” → “Dynamo”.

Fix the misspelling in the comment to avoid confusion.

Apply:

-# Download the Dyanmo container
+# Download the Dynamo container

102-103: Consistent capitalization: “vLLM”.

Use “vLLM” consistently in headings and text for polish.

-## Profile Qwen3-0.6B using vllm <a id="vllm-qwen3-0.6B">
+## Profile Qwen3-0.6B using vLLM <a id="vllm-qwen3-0.6B">

106-110: Avoid mutable “latest” image tag in CI docs. Pin a known-good version.

“latest” is non-reproducible and can break later. Pin the vLLM image or refer to an env var.

-docker pull vllm/vllm-openai:latest
-docker run --gpus all -p 8000:8000 vllm/vllm-openai:latest \
+export VLLM_IMAGE="vllm/vllm-openai:0.6.3" # example: pin to a tested version
+docker pull "${VLLM_IMAGE}"
+docker run --gpus all -p 8000:8000 "${VLLM_IMAGE}" \

20-21: No duplicate docs-testing tags found — add fail-fast detection

Scanned all .md files for tags — NO_DUPLICATES_FOUND.

  • Parser: add duplicate-detection that errors with file:line on collision (recommended).
  • Alternative: require stable per-file prefix for tags (e.g., tutorial-*) to avoid future collisions.
tests/ci/test_docs_end_to_end/test_runner.py (5)

124-140: Hard-coded venv path may be wrong. Verify aiperf without sourcing.

Relying on /opt/aiperf/venv assumes a specific Dockerfile. Safer to invoke aiperf --version directly and log stderr on failure.

-        verify_result = subprocess.run(
-            f"docker exec {container_name} bash -c 'source /opt/aiperf/venv/bin/activate && aiperf --version'",
+        verify_result = subprocess.run(
+            f"docker exec {container_name} bash -lc 'command -v aiperf >/dev/null 2>&1 && aiperf --version'",
             shell=True,
             capture_output=True,
             text=True,
             timeout=30,
         )
 
         if verify_result.returncode != 0:
             logger.error("AIPerf verification failed")
-            logger.error(f"Stdout: {verify_result.stdout}")
-            logger.error(f"Stderr: {verify_result.stderr}")
+            logger.error(f"Stdout: {verify_result.stdout.strip()}")
+            logger.error(f"Stderr: {verify_result.stderr.strip()}")
             return False
 
-        logger.info(f"AIPerf version: {verify_result.stdout.strip()}")
+        logger.info(f"AIPerf version: {verify_result.stdout.strip() or verify_result.stderr.strip()}")

Optionally, add a fallback to print PATH if detection fails.


262-266: Avoid duplicating --ui-type if the doc command already includes it.

Appending unconditionally can produce duplicated flags; safer to add only when missing.

-            aiperf_command_with_ui = f"{aiperf_cmd.command} --ui-type {AIPERF_UI_TYPE}"
+            aiperf_command_with_ui = (
+                aiperf_cmd.command
+                if "--ui-type" in aiperf_cmd.command
+                else f"{aiperf_cmd.command} --ui-type {AIPERF_UI_TYPE}"
+            )

77-85: Minor: text=True already implies universal newlines.

Drop universal_newlines=True for brevity; same below for other Popen calls.

-            text=True,
-            bufsize=1,
-            universal_newlines=True,
+            text=True,
+            bufsize=1,

Apply similarly at Lines 178-186, 224-232, 274-282.


88-96: Use logger instead of print for streaming output.

Keeps logs unified and captures in files; add a prefix via logger if needed.

-                print(f"BUILD: {line.rstrip()}")
+                logger.info(f"BUILD: {line.rstrip()}")

Repeat for SETUP/HEALTH/AIPERF prints.

Also applies to: 191-201, 236-243, 286-293


42-46: Server duplicate handling is upstream; add checks or enforce via parser.

Because servers arrive as a dict, duplicates may be lost. Consider receiving a list and validating uniqueness or augmenting the parser to surface duplicates explicitly.

Would you like a small addition in parser to collect duplicates and fail?

tests/ci/test_docs_end_to_end/utils.py (6)

16-17: Update stale comment for repo root.

Directory is test_docs_end_to_end now.

-    # We're in tests/ci/basic_end_to_end, so go up 4 levels to reach repo root
+    # We're in tests/ci/test_docs_end_to_end, so go up 4 levels to reach repo root

45-49: Use logging.exception and re-raise bare to preserve stack.

Improves diagnostics and traceback fidelity.

-    except subprocess.TimeoutExpired as e:
-        logger.warning(f"Command timed out after {timeout}s: {command}")
-        raise e
-    except Exception as e:
-        logger.error(f"Command failed: {command} - {e}")
-        raise e
+    except subprocess.TimeoutExpired:
+        logger.warning(f"Command timed out after {timeout}s: {command}")
+        raise
+    except Exception:
+        logger.exception(f"Command failed: {command}")
+        raise

74-75: Standardize on logger for real-time output, not print.

Unifies console/file logs.

-            print(f"{prefix}: {line.rstrip()}")
+            logger.info(f"{prefix}: {line.rstrip()}")

168-172: Avoid shell for killing processes; use os.kill.

Reduces S602 and avoids shell dependency.

-def safe_kill_process(pid: int, signal: int = 9) -> bool:
+def safe_kill_process(pid: int, signal: int = 9) -> bool:
     """Safely kill a process by PID with error handling"""
     try:
-        subprocess.run(f"kill -{signal} {pid}", shell=True, timeout=5)
+        import os, signal as sigmod
+        os.kill(pid, getattr(sigmod, f"SIG{signal}") if isinstance(signal, str) else signal)
         return True
     except Exception as e:
         logger.debug(f"Could not kill process {pid}: {e}")
         return False

175-185: Quote/validate filter_criteria or constrain to known filters.

Current shell interpolation risks breakage with spaces/special chars. At minimum, quote the arg.

-        result = subprocess.run(
-            f"docker ps --filter {filter_criteria} --format '{{{{.ID}}}}'",
+        import shlex
+        result = subprocess.run(
+            f"docker ps --filter {shlex.quote(filter_criteria)} --format '{{{{.ID}}}}'",
             shell=True,
             capture_output=True,
             text=True,
             timeout=5,
         )

Optionally, accept two params (filter key, value) and build safely.


193-207: Be careful with global Docker prunes in CI.

Even without force, prune can remove resources other jobs might rely on. Keep as-is but ensure tests run in isolated runners or namespaces.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9f32e7f and 0d8fccc.

📒 Files selected for processing (11)
  • docs/tutorial.md (4 hunks)
  • tests/ci/basic_end_to_end/start_server.sh (0 hunks)
  • tests/ci/basic_end_to_end/test.sh (0 hunks)
  • tests/ci/common/setup_test.sh (0 hunks)
  • tests/ci/test_docs_end_to_end/constants.py (1 hunks)
  • tests/ci/test_docs_end_to_end/data_types.py (1 hunks)
  • tests/ci/test_docs_end_to_end/main.py (1 hunks)
  • tests/ci/test_docs_end_to_end/parser.py (1 hunks)
  • tests/ci/test_docs_end_to_end/setup_test.sh (1 hunks)
  • tests/ci/test_docs_end_to_end/test_runner.py (1 hunks)
  • tests/ci/test_docs_end_to_end/utils.py (1 hunks)
💤 Files with no reviewable changes (3)
  • tests/ci/common/setup_test.sh
  • tests/ci/basic_end_to_end/start_server.sh
  • tests/ci/basic_end_to_end/test.sh
🧰 Additional context used
🧬 Code graph analysis (3)
tests/ci/test_docs_end_to_end/test_runner.py (2)
tests/ci/test_docs_end_to_end/data_types.py (1)
  • Server (22-28)
tests/ci/test_docs_end_to_end/utils.py (3)
  • cleanup_docker_resources (193-208)
  • docker_stop_and_remove (129-153)
  • get_repo_root (14-17)
tests/ci/test_docs_end_to_end/parser.py (1)
tests/ci/test_docs_end_to_end/data_types.py (2)
  • Command (11-18)
  • Server (22-28)
tests/ci/test_docs_end_to_end/main.py (3)
tests/ci/test_docs_end_to_end/parser.py (2)
  • MarkdownParser (27-190)
  • parse_directory (33-41)
tests/ci/test_docs_end_to_end/test_runner.py (2)
  • TestRunner (25-411)
  • run_tests (32-61)
tests/ci/test_docs_end_to_end/utils.py (2)
  • get_repo_root (14-17)
  • setup_logging (20-28)
🪛 Ruff (0.13.1)
tests/ci/test_docs_end_to_end/test_runner.py

77-77: subprocess call with shell=True identified, security issue

(S602)


112-112: subprocess call with shell=True identified, security issue

(S602)


125-125: subprocess call with shell=True identified, security issue

(S602)


178-178: subprocess call with shell=True identified, security issue

(S602)


224-224: subprocess call with shell=True identified, security issue

(S602)


274-274: subprocess call with shell=True identified, security issue

(S602)


371-371: subprocess call with shell=True identified, security issue

(S602)


387-387: Do not catch blind exception: Exception

(BLE001)

tests/ci/test_docs_end_to_end/parser.py

48-48: Do not catch blind exception: Exception

(BLE001)


49-49: Use logging.exception instead of logging.error

Replace with exception

(TRY400)

tests/ci/test_docs_end_to_end/utils.py

36-36: subprocess call with shell=True identified, security issue

(S602)


43-43: Consider moving this statement to an else block

(TRY300)


46-46: Use raise without specifying exception name

Remove exception name

(TRY201)


48-48: Use logging.exception instead of logging.error

Replace with exception

(TRY400)


49-49: Use raise without specifying exception name

Remove exception name

(TRY201)


57-57: subprocess call with shell=True identified, security issue

(S602)


117-117: subprocess call with shell=True identified, security issue

(S602)


125-125: Do not catch blind exception: Exception

(BLE001)


133-133: subprocess call with shell=True identified, security issue

(S602)


142-142: subprocess call with shell=True identified, security issue

(S602)


150-150: Consider moving this statement to an else block

(TRY300)


151-151: Do not catch blind exception: Exception

(BLE001)


161-161: Do not catch blind exception: Exception

(BLE001)


168-168: subprocess call with shell=True identified, security issue

(S602)


169-169: Consider moving this statement to an else block

(TRY300)


170-170: Do not catch blind exception: Exception

(BLE001)


178-178: subprocess call with shell=True identified, security issue

(S602)


188-188: Consider moving this statement to an else block

(TRY300)


189-189: Do not catch blind exception: Exception

(BLE001)


205-205: subprocess call with shell=True identified, security issue

(S602)


207-207: Do not catch blind exception: Exception

(BLE001)

🪛 Shellcheck (0.11.0)
tests/ci/test_docs_end_to_end/setup_test.sh

[warning] 6-6: Use 'cd ... || exit' or 'cd ... || return' in case cd fails.

(SC2164)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build (ubuntu-latest, 3.10)
🔇 Additional comments (2)
docs/tutorial.md (2)

86-87: Double‑check Dynamo endpoint port alignment with the running server.

The aiperf command targets localhost:8080. Ensure this matches the server’s effective bind/forwarding (especially if the CI image moves to 8000).


75-75: Confirm Dynamo health-check should remain on port 8080 (update if CI flips to 8000).
docs/tutorial.md uses localhost:8080 for Dynamo health-check and --url (lines 75, 86); vLLM uses localhost:8000 (lines 115, 130).

@ganeshku1 ganeshku1 merged commit aab408d into main Sep 25, 2025
5 checks passed
@ganeshku1 ganeshku1 deleted the e2e-doc-test branch September 25, 2025 17:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants