diff --git a/.github/workflows/release-whl-kernel.yml b/.github/workflows/release-whl-kernel.yml
index b49da1feb9c..1b2efaad77d 100644
--- a/.github/workflows/release-whl-kernel.yml
+++ b/.github/workflows/release-whl-kernel.yml
@@ -42,6 +42,8 @@ jobs:
needs: build-wheels
runs-on: ubuntu-latest
steps:
+ - uses: actions/checkout@v4
+
- name: Download artifacts
uses: actions/download-artifact@v4
with:
@@ -57,3 +59,20 @@ jobs:
token: ${{ secrets.WHL_TOKEN }}
files: |
sgl-kernel/dist/*
+
+ - name: Clone wheel index
+ run: git clone https://oauth2:${WHL_TOKEN}@github.com/sgl-project/whl.git sgl-whl
+ env:
+ WHL_TOKEN: ${{ secrets.WHL_TOKEN }}
+
+ - name: Update wheel index
+ run: python3 scripts/update_kernel_whl_index.py
+
+ - name: Push wheel index
+ run: |
+ cd sgl-whl
+ git config --local user.name "github-actions[bot]"
+ git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
+ git add -A
+ git commit -m "update whl index"
+ git push
diff --git a/scripts/update_kernel_whl_index.py b/scripts/update_kernel_whl_index.py
new file mode 100644
index 00000000000..bcd92ef64e9
--- /dev/null
+++ b/scripts/update_kernel_whl_index.py
@@ -0,0 +1,16 @@
+# Reference: https://github.com/flashinfer-ai/flashinfer/blob/v0.2.0/scripts/update_whl_index.py
+
+import hashlib
+import pathlib
+import re
+
+for path in sorted(pathlib.Path("sgl-kernel/dist").glob("*.whl")):
+ with open(path, "rb") as f:
+ sha256 = hashlib.sha256(f.read()).hexdigest()
+ ver = re.findall(r"sgl_kernel-([0-9.]+(?:\.post[0-9]+)?)-", path.name)[0]
+ index_dir = pathlib.Path(f"sgl-whl/cu118")
+ index_dir.mkdir(exist_ok=True)
+ base_url = "https://github.com/sgl-project/whl/releases/download"
+ full_url = f"{base_url}/v{ver}/{path.name}#sha256={sha256}"
+ with (index_dir / "index.html").open("a") as f:
+ f.write(f'{path.name}
\n')