[CI] support nightly ci for per pr by labels (#6483)

### What this PR does / why we need it?

This PR refactors the nightly CI workflows (A2 and A3) to support
running tests against a specific PR's code, in addition to the existing
scheduled/dispatch runs using pre-built images.

#### Motivation:
Previously, nightly tests could only be triggered by schedule or
workflow_dispatch, always using the pre-built nightly image. This change
allows developers to trigger nightly tests against their own PR's source
code, enabling early validation without waiting for a nightly build.

#### Changes
Trigger logic (parse-trigger job)

A new parse-trigger job is introduced in both
schedule_nightly_test_a2.yaml and schedule_nightly_test_a3.yaml to
centralize trigger evaluation:

`schedule / workflow_dispatch`: runs all tests with the pre-built image
(existing behavior preserved)
`pull_request (labeled + synchronize)`: runs only when:The PR has the
nightly-test label, and /nightly [test-names] comment exists (latest one
wins)

1. /nightly or /nightly all — runs all tests
2. /nightly test1 test2 — runs only named tests (comma-wrapped for exact
matching)

#### How to trigger
1. Add the nightly-test label to your PR
2. Comment /nightly (all tests) or /nightly test1 test2 (specific tests)
4. Re-triggering: add another /nightly comment and push a new commit
(synchronize event)

### Does this PR introduce _any_ user-facing change?
None

### How was this patch tested?

- vLLM version: v0.14.1
- vLLM main:
dc917cceb8

---------

Signed-off-by: hfadzxy <starmoon_zhang@163.com>
This commit is contained in:
zhangxinyuehfad
2026-03-05 16:46:37 +08:00
committed by GitHub
parent a6745b8577
commit 1e4017e3fa
8 changed files with 490 additions and 32 deletions

View File

@@ -45,6 +45,12 @@ on:
default: main
type: string
description: used for pr level tests
is_pr_test:
required: true
type: boolean
is_run:
required: true
type: boolean
secrets:
KUBECONFIG_B64:
required: true
@@ -68,6 +74,7 @@ jobs:
name: ${{ inputs.config_file_path }}
# This is the runner with no NPU for k8s controller
runs-on: ${{ inputs.runner }}
if: ${{ inputs.is_run }}
container:
image: swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/vllm-ascend:nightly-cpu
env:
@@ -78,8 +85,19 @@ jobs:
- name: Decode kubeconfig from secrets
run: |
# Decode and save kubeconfig
echo "${{ secrets.KUBECONFIG_B64 }}" | base64 -d > "$KUBECONFIG"
if [ "${{ inputs.is_pr_test }}" = "true" ]; then
echo "PR test mode"
if [ "${{ inputs.soc_version }}" = "a3" ]; then
echo "Using A3 cached kubeconfig"
cp /root/.cache/.kube/kubeconfig.yaml "$KUBECONFIG"
else
echo "Using A2 cached kubeconfig"
cp /root/.cache/.kube/hk_001_kb.yaml "$KUBECONFIG"
fi
else
echo "Decoding kubeconfig from secrets"
echo "${{ secrets.KUBECONFIG_B64 }}" | base64 -d > "$KUBECONFIG"
fi
- name: Checkout code
uses: actions/checkout@v6
@@ -133,9 +151,13 @@ jobs:
image="${{ inputs.image }}"
config_file_path="${{ inputs.config_file_path }}"
fail_tag=FAIL_TAG_"${{ inputs.config_file_path }}"
echo "FAIL_TAG=${fail_tag}" >> "$GITHUB_ENV"
is_pr_test="${{ inputs.is_pr_test }}"
vllm_version="${{ inputs.vllm_version }}"
vllm_ascend_ref="${{ inputs.vllm_ascend_ref }}"
vllm_ascend_remote_url="${{ inputs.vllm_ascend_remote_url }}"
echo "FAIL_TAG=${fail_tag}" >> $GITHUB_ENV
required_params=("size" "replicas" "image" "config_file_path")
required_params=("size" "replicas" "image" "config_file_path" "is_pr_test" "vllm_version" "vllm_ascend_ref" "vllm_ascend_remote_url")
for param in "${required_params[@]}"; do
if [ -z "${!param}" ]; then
echo "Error: Parameter '$param' is required but empty"
@@ -158,6 +180,10 @@ jobs:
-D config_file_path="$config_file_path" \
-D npu_per_node="$npu_per_node" \
-D fail_tag="$fail_tag" \
-D is_pr_test="$is_pr_test" \
-D vllm_version="$vllm_version" \
-D vllm_ascend_ref="$vllm_ascend_ref" \
-D vllm_ascend_remote_url="$vllm_ascend_remote_url" \
--outfile lws.yaml
kubectl apply -f ./lws.yaml