Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
e83ce66
feat: make no-hit-lru P/D-aware (#522)
evacchi Jan 18, 2026
f6c1d79
Update disaggregated Prefill/Decode inference serving documentation (…
mayabar Jan 19, 2026
81ffa11
deps(actions): bump crate-ci/typos from 1.42.0 to 1.42.1 (#572)
dependabot[bot] Jan 19, 2026
f49e129
deps(go): bump github.com/onsi/ginkgo/v2 in the go-dependencies group…
dependabot[bot] Jan 19, 2026
f272b85
fix reviewers auto assign minor bug (#575)
nirrozenbaum Jan 20, 2026
faa0ec2
fix(scorer): make active request pd aware (#569)
kyanokashi Jan 20, 2026
6b6a1fc
test(e2e): cleanup kind cluster (#563)
zdtsw Jan 21, 2026
06ed85d
refactor: add early validation in DP profile handler (#554)
zdtsw Jan 21, 2026
4884fc2
deps(go): bump the kubernetes group with 2 updates (#574)
dependabot[bot] Jan 21, 2026
981f17a
refactor: kv cache manager repo (#570)
sagearc Jan 21, 2026
f0d12fb
bumping IGW version to the full released version (#583)
kfswain Jan 21, 2026
c58cf2d
Enable prefix-cache awareness in active-active multi-replica schedule…
vMaroon Jan 22, 2026
3476caf
Switch to pre-built vLLM wheels for CPU builds (#582)
sagearc Jan 22, 2026
fa48006
update llm-d-kv-cache import to v0.5.0-RC1 (#584)
vMaroon Jan 22, 2026
7485dc7
Use 1.3.0 CRDs (#586)
shmuelk Jan 22, 2026
3c69796
free disk space on ci-release (#587)
vMaroon Jan 22, 2026
b52a2c4
feat: use Tinyllama as the "model" for kind test and switch to use pr…
zdtsw Jan 26, 2026
98a3296
Update linter configuration (#588)
elevran Jan 26, 2026
b0d60e1
fix: config should use new precise-prefix-cache-scorer (#576)
zdtsw Jan 26, 2026
02b5a3e
deps(actions): bump crate-ci/typos from 1.42.1 to 1.42.2 (#589)
dependabot[bot] Jan 26, 2026
b0730f7
Updated to more recent GIE (#592)
shmuelk Jan 29, 2026
1f9ddb4
pull kvc v0.5.0 libs (#595)
vMaroon Feb 1, 2026
f8315f2
deps(actions): bump crate-ci/typos from 1.42.2 to 1.43.0 (#596)
dependabot[bot] Feb 3, 2026
1d60202
address nil,nil return linter error in test mock (#598)
elevran Feb 3, 2026
415bbcc
deps(go): bump the go-dependencies group with 2 updates (#597)
dependabot[bot] Feb 3, 2026
cf638f5
Models extractor (#553)
irar2 Feb 5, 2026
dc96b95
feat(lmcache): implement decode first flow on lmcache connector when …
kyanokashi Feb 6, 2026
3ed3d5c
Extend support for different ways to decide if disaggregated PD is re…
mayabar Feb 10, 2026
4e36e94
chore: fix wrong port for NIXL (#593)
zdtsw Feb 10, 2026
40dc2e5
fix: resolve JSON serialization error in active-request-scorer debug …
albertoperdomo2 Feb 11, 2026
d19cda9
Implement "LGTM" ChatOps Workflow.
revit13 Feb 12, 2026
92c4bd7
test
revit13 Feb 12, 2026
9dfbb10
Lgtm2 (#17)
revit13 Feb 12, 2026
8d0cc67
test
revit13 Feb 12, 2026
6bf1e87
test: automated LGTM workflow test (#19)
revit13 Feb 12, 2026
77d2bab
test: automated LGTM workflow test (#20)
revit13 Feb 12, 2026
d3977ee
test: automated LGTM workflow test (#21)
revit13 Feb 12, 2026
576d58f
test: automated LGTM workflow test (#22)
revit13 Feb 12, 2026
9bbc206
test
revit13 Feb 12, 2026
37063e6
test: automated LGTM workflow test (#24)
revit13 Feb 12, 2026
46d498a
test
revit13 Feb 12, 2026
251d888
test: automated LGTM workflow test (#26)
revit13 Feb 12, 2026
330cf5c
test
revit13 Feb 12, 2026
f991ca8
Address review comments.
revit13 Feb 15, 2026
b0f3400
test: automated LGTM workflow test (#33)
revit13 Feb 15, 2026
f0855fd
test: automated LGTM workflow test (#34)
revit13 Feb 15, 2026
2d20273
test: automated LGTM workflow test (#35)
revit13 Feb 15, 2026
cb3b2b8
test: automated LGTM workflow test (#36)
revit13 Feb 15, 2026
5bf0ea4
test
revit13 Feb 15, 2026
be2fe95
test
revit13 Feb 15, 2026
602326c
test: automated LGTM workflow test (#39)
revit13 Feb 15, 2026
ae20da6
test: duplicate-lgtm
revit13 Feb 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Git
.git
.gitignore

# Build artifacts
bin
build

# IDE and OS files
.idea
.vscode
*.DS_Store

# Local virtual environments
venv

# Python cache files
__pycache__

# Docker files
Dockerfile
4 changes: 2 additions & 2 deletions .github/workflows/auto-assign.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Auto Assign Reviewers

on:
pull_request:
types: [opened, reopened, synchronize]
types: [opened]
pull_request_target:
types: [opened, reopened, synchronize]
types: [opened]

permissions:
contents: read
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/check-typos.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ jobs:
uses: actions/checkout@v6

- name: Check typos
uses: crate-ci/typos@v1.42.0
uses: crate-ci/typos@v1.43.0

37 changes: 22 additions & 15 deletions .github/workflows/ci-pr-checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,31 @@ jobs:
check-changes:
runs-on: ubuntu-latest
outputs:
docs: ${{ steps.filter.outputs.docs }}
src: ${{ steps.filter.outputs.src }}
steps:
- name: Checkout source
uses: actions/checkout@v6
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
docs:
- 'README.md'
- 'docs/**'
src:
- '**/*.go'
- '**/*.py'
- Dockerfile.epp
- Dockerfile.sidecar
- Makefile*
- go.mod
lint-and-test:
needs: check-changes
if: ${{ needs.check-changes.outputs.docs == 'false' }}
if: ${{ needs.check-changes.outputs.src == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
tool-cache: false

- name: Checkout source
uses: actions/checkout@v6

Expand All @@ -43,9 +52,6 @@ jobs:
go-version: "${{ env.GO_VERSION }}"
cache-dependency-path: ./go.sum

- name: Install dependencies
run: sudo make install-dependencies

- name: Configure CGO for Python
run: |
PYTHON_INCLUDE=$(python3 -c "import sysconfig; print(sysconfig.get_path('include'))")
Expand All @@ -57,14 +63,17 @@ jobs:
- name: Set PKG_CONFIG_PATH
run: echo "PKG_CONFIG_PATH=/usr/lib/pkgconfig" >> $GITHUB_ENV

- name: go mod tidy
run: go mod tidy
- name: Install dependencies
run: |
go mod tidy
sudo -E env "PATH=$PATH" make install-dependencies install-python-deps

- name: Run lint checks
uses: golangci/golangci-lint-action@v9
with:
version: 'v2.1.6'
version: "v2.1.6"
args: "--config=./.golangci.yml"
skip-cache: true
env:
CGO_ENABLED: ${{ env.CGO_ENABLED }}
CGO_CFLAGS: ${{ env.CGO_CFLAGS }}
Expand All @@ -74,10 +83,8 @@ jobs:

- name: Run make build
shell: bash
run: |
make build
run: make build

- name: Run make test
shell: bash
run: |
make test
run: make test
5 changes: 5 additions & 0 deletions .github/workflows/ci-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ jobs:
docker-build-and-push:
runs-on: ubuntu-latest
steps:
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
tool-cache: false

- name: Checkout source
uses: actions/checkout@v6

Expand Down
18 changes: 18 additions & 0 deletions .github/workflows/dispatch-on-lgtm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: ChatOps Dispatcher
on:
issue_comment:
types: [created]

jobs:
dispatch:
runs-on: ubuntu-latest
steps:
- name: Slash Command Dispatch
uses: peter-evans/slash-command-dispatch@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
commands: lgtm
# 1. Basic Security: Only allow users with 'write' access to even trigger this
permission: write
issue-type: pull-request
reactions: false
140 changes: 140 additions & 0 deletions .github/workflows/lgtm-command.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# ============================================================================
# LGTM Command Worker
# ============================================================================
# Handles /lgtm commands from chatops-dispatcher
#
# Flow:
# 1. User comments /lgtm on PR
# 2. chatops-dispatcher catches it and dispatches here
# 3. This workflow:
# - Verifies user is in OWNERS file
# - Checks if PR is draft
# - Checks for blocking labels (hold/wip/do-not-merge)
# - Adds lgtm label
# - Enables auto-merge
# ============================================================================

name: LGTM Command Worker
on:
repository_dispatch:
types: [lgtm-command]

env:
BLOCKING_LABELS: "hold|wip|do-not-merge"

jobs:
apply-lgtm:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: write
steps:
- uses: actions/checkout@v4
- uses: tibdex/github-app-token@v1
id: generate-token
with:
app_id: ${{ secrets.VLLMD_BOT_APP_ID }}
private_key: ${{ secrets.VLLMD_BOT_APP_PRIVATE_KEY }}
repository: ${{ github.repository }}

# -----------------------------------------------------------------------
# STEP 1: AUTHORIZATION - Verify user is in OWNERS file
# -----------------------------------------------------------------------
# Only users listed as approvers in OWNERS can use /lgtm
# This prevents unauthorized users from approving PRs
- name: Check Permissions
id: check
env:
ACTOR: ${{ github.event.client_payload.github.actor }}
run: |
# Extract only the approvers section and check if ACTOR is listed
APPROVERS=$(sed -n '/^approvers:/,/^[^ -]/p' OWNERS | grep -v '^approvers:')
if echo "$APPROVERS" | grep -q "^\s*-\s*$ACTOR\s*$"; then
echo "authorized=true" >> $GITHUB_OUTPUT
else
echo "::error:: User $ACTOR is not an approver."
exit 1
fi

# -----------------------------------------------------------------------
# STEP 2: VALIDATION - Check if PR is in draft mode
# -----------------------------------------------------------------------
# Draft PRs cannot be approved - they must be marked ready for review
# This prevents accidental approval of incomplete work
- name: Check Draft Status
if: steps.check.outputs.authorized == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.client_payload.github.payload.issue.number }}
REPO: ${{ github.repository }}
run: |
IS_DRAFT=$(gh pr view $PR_NUMBER --repo "$REPO" --json isDraft --jq '.isDraft')
if [ "$IS_DRAFT" = "true" ]; then
echo "::error:: Cannot LGTM a Draft PR."
gh issue comment $PR_NUMBER --repo "$REPO" --body "⚠️ **LGTM Failed**: PR is a Draft."
exit 1
fi

# -----------------------------------------------------------------------
# STEP 3: BLOCKING LABELS - Check for hold/wip/do-not-merge
# -----------------------------------------------------------------------
# If any blocking label exists, fail immediately
# This prevents approving PRs that are explicitly marked as not ready
- name: Check for Blocking Labels
if: steps.check.outputs.authorized == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_URL: ${{ github.event.client_payload.github.payload.issue.html_url }}
run: |
LABELS=$(gh pr view "$PR_URL" --json labels --jq '.labels[].name')
if echo "$LABELS" | grep -Eiq "^($BLOCKING_LABELS)$"; then
echo "::error:: PR is blocked by label."
gh issue comment "$PR_URL" --body " **Merge Blocked**: Please remove the \`hold\`, \`wip\`, or \`do-not-merge\` label before merging."
exit 1
fi

# -----------------------------------------------------------------------
# STEP 4: APPLY LGTM - Add label, wait, then enable auto-merge
# -----------------------------------------------------------------------
# 1. Add lgtm label (triggers gatekeeper to validate)
# 2. Enable auto-merge (PR will merge when all checks pass)
- name: Apply Label & Merge
if: steps.check.outputs.authorized == 'true'
env:
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
PR_NUMBER: ${{ github.event.client_payload.github.payload.issue.number }}
PR_URL: ${{ github.event.client_payload.github.payload.issue.html_url }}
run: |
# Apply lgtm label
if ! gh issue edit "$PR_NUMBER" --add-label "lgtm"; then
echo "::error:: Failed to add lgtm label"
gh issue comment "$PR_URL" --body " **Error**: Failed to add lgtm label to the PR."
exit 1
fi

echo "Applying auto-merge..."

# Enable auto-merge with error handling
if ! gh pr merge --auto --squash "$PR_URL" 2>&1 | tee merge_output.txt; then
echo "::error:: Failed to enable auto-merge"
ERROR_MSG=$(cat merge_output.txt)
gh issue comment "$PR_URL" --body " **Auto-merge failed**: Could not enable auto-merge on this PR.

**Error details:**
\`\`\`
$ERROR_MSG
\`\`\`

**Common reasons:**
- Branch protection rules not satisfied
- Required status checks not passing
- Merge conflicts present
- Auto-merge not enabled for this repository

Please check the PR status and try again, or merge manually."
exit 1
fi

echo "✅ Auto-merge enabled successfully"
gh issue comment "$PR_URL" --body "✅ **LGTM**: Auto-merge has been enabled. The PR will merge automatically once all checks pass."
45 changes: 45 additions & 0 deletions .github/workflows/lgtm-gatekeeper.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# ============================================================================
# LGTM Gatekeeper - Required Status Check
# ============================================================================
# Rules Enforced:
# 1. PR MUST have "lgtm" label
# 2. PR MUST NOT have blocking labels (hold, wip, do-not-merge)
# ============================================================================

name: LGTM Gatekeeper
on:
pull_request:
# Run on PR open/reopen and label changes
# NOT on synchronize (handled by lgtm-reset.yml)
types: [opened, labeled, unlabeled, reopened]

env:
BLOCKING_LABELS: "hold|wip|do-not-merge"

jobs:
validate-pr:
runs-on: ubuntu-latest
steps:
- name: Enforce LGTM & Blockers
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: ${{ github.repository }}
run: |
# Fetch current labels
LABELS=$(gh pr view $PR_NUMBER --repo "$REPO" --json labels --jq '.labels[].name')

# Check 1: IS IT BLOCKED?
if echo "$LABELS" | grep -Eiq "^($BLOCKING_LABELS)$"; then
echo "::error:: ⛔ FAILED: PR is blocked by a 'hold', 'wip', or 'do-not-merge' label."
exit 1
fi

# Check 2: IS IT APPROVED?
# If Reset workflow removed the label, this check fails immediately.
if ! echo "$LABELS" | grep -Fqx "lgtm"; then
echo "::error:: ⛔ FAILED: PR is missing the 'lgtm' label."
exit 1
fi

echo "✅ PASSED: LGTM present and no blockers."
46 changes: 46 additions & 0 deletions .github/workflows/lgtm-reset.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# ============================================================================
# LGTM Reset - Auto-Remove LGTM on New Commits
# ============================================================================
# Kubernetes Prow behavior: When new commits are pushed, approval is invalidated
#
# What It Does:
# 1. Detects when new commits are pushed to a PR
# 2. Removes the "lgtm" label (if present)
# 3. Disables auto-merge (safety net)
# 4. Posts a comment explaining why
# ============================================================================

name: LGTM Reset
on:
pull_request:
types: [synchronize] # Triggers instantly on new commits

jobs:
reset-lgtm:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: tibdex/github-app-token@v1
id: generate-token
with:
app_id: ${{ secrets.VLLMD_BOT_APP_ID }}
private_key: ${{ secrets.VLLMD_BOT_APP_PRIVATE_KEY }}
repository: ${{ github.repository }}
- name: Invalidate LGTM
env:
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: ${{ github.repository }}
run: |
echo "🚨 New code pushed. Resetting LGTM status..."

# 1. Remove the label (This triggers the Gatekeeper to run again)
gh pr edit $PR_NUMBER --repo "$REPO" --remove-label "lgtm" || true

# 2. Disable Auto-Merge (Safety net)
gh pr merge --disable-auto $PR_NUMBER --repo "$REPO" || true

# 3. Notify user
gh issue comment $PR_NUMBER --repo "$REPO" --body "🔄 **Reset**: New commits pushed. LGTM removed."

Loading
Loading