File size: 3,953 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
#!/usr/bin/env python3
"""
Bump sgl-kernel version in SGLang files to match the version in sgl-kernel/pyproject.toml.
Updates:
  - python/pyproject.toml
  - python/sglang/srt/entrypoints/engine.py
  - docker/Dockerfile
"""

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"""
    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 update_python_pyproject(new_version: str) -> bool:
    """Update sgl-kernel version in 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()

    # Replace "sgl-kernel==x.x.x" with new version
    new_content = re.sub(
        r'"sgl-kernel==[^"]+"',
        f'"sgl-kernel=={new_version}"',
        content,
    )

    if content == new_content:
        print("No changes needed in python/pyproject.toml")
        return False

    pyproject_path.write_text(new_content)
    print(f"✓ Updated python/pyproject.toml to version {new_version}")
    return True


def update_engine_py(new_version: str) -> bool:
    """Update sgl-kernel version in 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()

    # Replace version in assert_pkg_version("sgl-kernel", "version", ...)
    new_content = re.sub(
        r'(assert_pkg_version\s*\(\s*"sgl-kernel"\s*,\s*)"[^"]+"',
        rf'\1"{new_version}"',
        content,
    )

    if content == new_content:
        print("No changes needed in engine.py")
        return False

    engine_path.write_text(new_content)
    print(f"✓ Updated engine.py to version {new_version}")
    return True


def update_dockerfile(new_version: str) -> bool:
    """Update SGL_KERNEL_VERSION in 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()

    # Replace ARG SGL_KERNEL_VERSION=x.x.x with new version
    new_content = re.sub(
        r"^(ARG\s+SGL_KERNEL_VERSION=)(.+)$",
        rf"\g<1>{new_version}",
        content,
        flags=re.MULTILINE,
    )

    if content == new_content:
        print("No changes needed in Dockerfile")
        return False

    dockerfile_path.write_text(new_content)
    print(f"✓ Updated Dockerfile to version {new_version}")
    return True


def main():
    kernel_version = get_kernel_version_from_source()
    print(f"Bumping sgl-kernel version to: {kernel_version}\n")

    updated_files = []

    if update_python_pyproject(kernel_version):
        updated_files.append("python/pyproject.toml")

    if update_engine_py(kernel_version):
        updated_files.append("python/sglang/srt/entrypoints/engine.py")

    if update_dockerfile(kernel_version):
        updated_files.append("docker/Dockerfile")

    print()
    if updated_files:
        print(f"✓ Successfully updated {len(updated_files)} file(s):")
        for file in updated_files:
            print(f"  - {file}")
    else:
        print("✓ All files already have the correct version")


if __name__ == "__main__":
    main()