File size: 4,694 Bytes
61ba51e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | #!/usr/bin/env python3
"""
Check if sgl-kernel version from sgl-kernel/pyproject.toml matches the versions
used in SGLang files (python/pyproject.toml, engine.py, and Dockerfile).
Sets GitHub Actions output variables to indicate if sync is needed.
"""
import os
import re
import sys
from pathlib import Path
try:
import tomllib # Python 3.11+
except ImportError:
import tomli as tomllib # Fallback for older Python versions
def get_kernel_version_from_source() -> str:
"""Extract version from sgl-kernel/pyproject.toml (line 11)"""
pyproject_path = Path("sgl-kernel/pyproject.toml")
if not pyproject_path.exists():
print(f"Error: {pyproject_path} not found")
sys.exit(1)
with open(pyproject_path, "rb") as f:
data = tomllib.load(f)
version = data.get("project", {}).get("version")
if not version:
print("Error: Could not find version in sgl-kernel/pyproject.toml")
sys.exit(1)
return version
def get_kernel_version_from_python_pyproject() -> str:
"""Extract sgl-kernel version from python/pyproject.toml"""
pyproject_path = Path("python/pyproject.toml")
if not pyproject_path.exists():
print(f"Error: {pyproject_path} not found")
sys.exit(1)
content = pyproject_path.read_text()
# Match "sgl-kernel==x.x.x"
match = re.search(r'"sgl-kernel==([^"]+)"', content)
if not match:
print("Error: Could not find sgl-kernel version in python/pyproject.toml")
sys.exit(1)
return match.group(1)
def get_kernel_version_from_engine() -> str:
"""Extract sgl-kernel version from python/sglang/srt/entrypoints/engine.py"""
engine_path = Path("python/sglang/srt/entrypoints/engine.py")
if not engine_path.exists():
print(f"Error: {engine_path} not found")
sys.exit(1)
content = engine_path.read_text()
# Find the assert_pkg_version call for sgl-kernel
# Look for the pattern: assert_pkg_version("sgl-kernel", "version", ...)
match = re.search(
r'assert_pkg_version\s*\(\s*"sgl-kernel"\s*,\s*"([^"]+)"', content
)
if not match:
print("Error: Could not find sgl-kernel version in engine.py")
sys.exit(1)
return match.group(1)
def get_kernel_version_from_dockerfile() -> str:
"""Extract SGL_KERNEL_VERSION from docker/Dockerfile"""
dockerfile_path = Path("docker/Dockerfile")
if not dockerfile_path.exists():
print(f"Error: {dockerfile_path} not found")
sys.exit(1)
content = dockerfile_path.read_text()
# Match ARG SGL_KERNEL_VERSION=x.x.x
match = re.search(r"^ARG\s+SGL_KERNEL_VERSION=(.+)$", content, re.MULTILINE)
if not match:
print("Error: Could not find SGL_KERNEL_VERSION in Dockerfile")
sys.exit(1)
return match.group(1).strip()
def main():
kernel_version = get_kernel_version_from_source()
pyproject_version = get_kernel_version_from_python_pyproject()
engine_version = get_kernel_version_from_engine()
dockerfile_version = get_kernel_version_from_dockerfile()
print(f"Kernel version in sgl-kernel/pyproject.toml: {kernel_version}")
print(f"Kernel version in python/pyproject.toml: {pyproject_version}")
print(f"Kernel version in engine.py: {engine_version}")
print(f"Kernel version in Dockerfile: {dockerfile_version}")
# Check if any version differs from the source
needs_sync = (
kernel_version != pyproject_version
or kernel_version != engine_version
or kernel_version != dockerfile_version
)
# Set GitHub Actions output
github_output = os.getenv("GITHUB_OUTPUT")
if github_output:
with open(github_output, "a") as f:
f.write(f"needs_sync={'true' if needs_sync else 'false'}\n")
f.write(f"kernel_version={kernel_version}\n")
if needs_sync:
print(f"\n✓ Sync needed to version: {kernel_version}")
mismatches = []
if kernel_version != pyproject_version:
mismatches.append(
f" - python/pyproject.toml: {pyproject_version} → {kernel_version}"
)
if kernel_version != engine_version:
mismatches.append(f" - engine.py: {engine_version} → {kernel_version}")
if kernel_version != dockerfile_version:
mismatches.append(
f" - Dockerfile: {dockerfile_version} → {kernel_version}"
)
print("Changes needed:")
for mismatch in mismatches:
print(mismatch)
sys.exit(0)
else:
print("\n✓ All versions are in sync, no action needed")
sys.exit(0)
if __name__ == "__main__":
main()
|