From 01384a4d4c7ce70a34749f0cab0a4a9b4d8227be Mon Sep 17 00:00:00 2001 From: EmmaQiaoCh Date: Tue, 3 Nov 2026 10:33:42 +0900 Subject: [PATCH 1/3] [None][infra] Rename Check Test List stage to Check-Test-List and mark it skipped when not run Signed-off-by: EmmaQiaoCh --- jenkins/L0_MergeRequest.groovy | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/jenkins/L0_MergeRequest.groovy b/jenkins/L0_MergeRequest.groovy index 398466596268..fa5b2f95a751 100644 --- a/jenkins/L0_MergeRequest.groovy +++ b/jenkins/L0_MergeRequest.groovy @@ -933,7 +933,7 @@ def launchReleaseCheck(pipeline, globalVars) def launchTestListCheck(pipeline, globalVars) { - def key = "Check Test List" + def key = "Check-Test-List" def image = globalVars["LLM_DOCKER_IMAGE"] trtllm_utils.launchKubernetesPod(pipeline, createKubernetesPodConfig(image, "package"), "trt-llm", { stage("[${key}] Run") { @@ -2557,22 +2557,27 @@ def launchStages(pipeline, reuseBuild, testFilter, enableFailFast, globalVars) launchReleaseCheck(this, globalVars) } }, - "Check Test List": { + "Check-Test-List": { script { if (testFilter[INFRA_DRY_RUN]) { echo "Skipping Check Test List for the infrastructure dry run." + jUtils.markStageSkippedForConditional(STAGE_NAME) return } else if (GEN_POST_MERGE_BUILDS_ONLY) { echo "Skipping Check Test List (GenPostMergeBuilds mode: builds only)" + jUtils.markStageSkippedForConditional(STAGE_NAME) return } else if (runMode == "nightly_release") { echo "Skipping Check Test List for nightly_release." + jUtils.markStageSkippedForConditional(STAGE_NAME) return } else if (testFilter[(ONLY_ONE_GROUP_CHANGED)] == "Docs") { echo "Skipping Check Test List for Docs-only changes." + jUtils.markStageSkippedForConditional(STAGE_NAME) return } else if (env.JOB_NAME ==~ /.*BuildDockerImageSanityTest.*/) { echo "Skipping Check Test List for BuildDockerImageSanityTest." + jUtils.markStageSkippedForConditional(STAGE_NAME) return } launchTestListCheck(this, globalVars) @@ -3235,7 +3240,7 @@ def launchStages(pipeline, reuseBuild, testFilter, enableFailFast, globalVars) stages += dockerBuildJob } - def alwaysFailFastStages = ["Release-Check", "Check Test List"] as Set + def alwaysFailFastStages = ["Release-Check", "Check-Test-List"] as Set parallelJobs = stages.collectEntries{key, value -> [key, { script { stage(key) { @@ -3342,16 +3347,20 @@ pipeline { } } }, - "Check Test List": { - stage("Check Test List") { + "Check-Test-List": { + stage("Check-Test-List") { if (testFilter[INFRA_DRY_RUN]) { echo "Skipping Check Test List for the infrastructure dry run." + jUtils.markStageSkippedForConditional(STAGE_NAME) } else if (runMode == "nightly_release") { echo "Skipping Check Test List for nightly_release." + jUtils.markStageSkippedForConditional(STAGE_NAME) } else if (testFilter[(ONLY_ONE_GROUP_CHANGED)] == "Docs") { echo "Skipping Check Test List for Docs-only changes." + jUtils.markStageSkippedForConditional(STAGE_NAME) } else if (env.JOB_NAME ==~ /.*BuildDockerImageSanityTest.*/) { echo "Skipping Check Test List for BuildDockerImageSanityTest." + jUtils.markStageSkippedForConditional(STAGE_NAME) } else { launchTestListCheck(this, globalVars) } From 378ae88fbcab90f9977354b5f28ef2f397c607e1 Mon Sep 17 00:00:00 2001 From: EmmaQiaoCh Date: Tue, 3 Nov 2026 16:35:19 +0900 Subject: [PATCH 2/3] [None][infra] Mark Check-Test-List skip on a nested Run stage so Blue Ocean shows it as skipped Signed-off-by: EmmaQiaoCh --- jenkins/L0_MergeRequest.groovy | 37 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/jenkins/L0_MergeRequest.groovy b/jenkins/L0_MergeRequest.groovy index fa5b2f95a751..91c42002c054 100644 --- a/jenkins/L0_MergeRequest.groovy +++ b/jenkins/L0_MergeRequest.groovy @@ -931,6 +931,16 @@ def launchReleaseCheck(pipeline, globalVars) }) } +def skipTestListCheck(String message) +{ + // Mark a nested stage so Blue Ocean renders the skip; a mark on the parallel branch's own stage shows as NOT_BUILT. + def runStage = "[Check-Test-List] Run" + stage(runStage) { + echo message + jUtils.markStageSkippedForConditional(runStage) + } +} + def launchTestListCheck(pipeline, globalVars) { def key = "Check-Test-List" @@ -2560,24 +2570,19 @@ def launchStages(pipeline, reuseBuild, testFilter, enableFailFast, globalVars) "Check-Test-List": { script { if (testFilter[INFRA_DRY_RUN]) { - echo "Skipping Check Test List for the infrastructure dry run." - jUtils.markStageSkippedForConditional(STAGE_NAME) + skipTestListCheck("Skipping Check Test List for the infrastructure dry run.") return } else if (GEN_POST_MERGE_BUILDS_ONLY) { - echo "Skipping Check Test List (GenPostMergeBuilds mode: builds only)" - jUtils.markStageSkippedForConditional(STAGE_NAME) + skipTestListCheck("Skipping Check Test List (GenPostMergeBuilds mode: builds only)") return } else if (runMode == "nightly_release") { - echo "Skipping Check Test List for nightly_release." - jUtils.markStageSkippedForConditional(STAGE_NAME) + skipTestListCheck("Skipping Check Test List for nightly_release.") return } else if (testFilter[(ONLY_ONE_GROUP_CHANGED)] == "Docs") { - echo "Skipping Check Test List for Docs-only changes." - jUtils.markStageSkippedForConditional(STAGE_NAME) + skipTestListCheck("Skipping Check Test List for Docs-only changes.") return } else if (env.JOB_NAME ==~ /.*BuildDockerImageSanityTest.*/) { - echo "Skipping Check Test List for BuildDockerImageSanityTest." - jUtils.markStageSkippedForConditional(STAGE_NAME) + skipTestListCheck("Skipping Check Test List for BuildDockerImageSanityTest.") return } launchTestListCheck(this, globalVars) @@ -3350,17 +3355,13 @@ pipeline { "Check-Test-List": { stage("Check-Test-List") { if (testFilter[INFRA_DRY_RUN]) { - echo "Skipping Check Test List for the infrastructure dry run." - jUtils.markStageSkippedForConditional(STAGE_NAME) + skipTestListCheck("Skipping Check Test List for the infrastructure dry run.") } else if (runMode == "nightly_release") { - echo "Skipping Check Test List for nightly_release." - jUtils.markStageSkippedForConditional(STAGE_NAME) + skipTestListCheck("Skipping Check Test List for nightly_release.") } else if (testFilter[(ONLY_ONE_GROUP_CHANGED)] == "Docs") { - echo "Skipping Check Test List for Docs-only changes." - jUtils.markStageSkippedForConditional(STAGE_NAME) + skipTestListCheck("Skipping Check Test List for Docs-only changes.") } else if (env.JOB_NAME ==~ /.*BuildDockerImageSanityTest.*/) { - echo "Skipping Check Test List for BuildDockerImageSanityTest." - jUtils.markStageSkippedForConditional(STAGE_NAME) + skipTestListCheck("Skipping Check Test List for BuildDockerImageSanityTest.") } else { launchTestListCheck(this, globalVars) } From ea196ec98a7dce666bfe6d3ccebf9f851881ad51 Mon Sep 17 00:00:00 2001 From: EmmaQiaoCh Date: Thu, 5 Nov 2026 11:15:22 +0900 Subject: [PATCH 3/3] [None][infra] Generalize the stage-skip helper and drop unreachable release_check conditions skipTestListCheck becomes skipStage(stageName, message). In release_check mode runMode is always release_check and BuildDockerImageSanityTest never reaches that path, so only the dry-run and Docs-only skips remain there. Signed-off-by: EmmaQiaoCh --- jenkins/L0_MergeRequest.groovy | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/jenkins/L0_MergeRequest.groovy b/jenkins/L0_MergeRequest.groovy index 91c42002c054..07d8e0c5c0d8 100644 --- a/jenkins/L0_MergeRequest.groovy +++ b/jenkins/L0_MergeRequest.groovy @@ -931,13 +931,12 @@ def launchReleaseCheck(pipeline, globalVars) }) } -def skipTestListCheck(String message) +// Inside a parallel branch, pass a nested stage name: Blue Ocean shows a skip marked on the branch's own stage as NOT_BUILT. +def skipStage(String stageName, String message) { - // Mark a nested stage so Blue Ocean renders the skip; a mark on the parallel branch's own stage shows as NOT_BUILT. - def runStage = "[Check-Test-List] Run" - stage(runStage) { + stage(stageName) { echo message - jUtils.markStageSkippedForConditional(runStage) + jUtils.markStageSkippedForConditional(stageName) } } @@ -2570,19 +2569,19 @@ def launchStages(pipeline, reuseBuild, testFilter, enableFailFast, globalVars) "Check-Test-List": { script { if (testFilter[INFRA_DRY_RUN]) { - skipTestListCheck("Skipping Check Test List for the infrastructure dry run.") + skipStage("[Check-Test-List] Run", "Skipping Check Test List for the infrastructure dry run.") return } else if (GEN_POST_MERGE_BUILDS_ONLY) { - skipTestListCheck("Skipping Check Test List (GenPostMergeBuilds mode: builds only)") + skipStage("[Check-Test-List] Run", "Skipping Check Test List (GenPostMergeBuilds mode: builds only)") return } else if (runMode == "nightly_release") { - skipTestListCheck("Skipping Check Test List for nightly_release.") + skipStage("[Check-Test-List] Run", "Skipping Check Test List for nightly_release.") return } else if (testFilter[(ONLY_ONE_GROUP_CHANGED)] == "Docs") { - skipTestListCheck("Skipping Check Test List for Docs-only changes.") + skipStage("[Check-Test-List] Run", "Skipping Check Test List for Docs-only changes.") return } else if (env.JOB_NAME ==~ /.*BuildDockerImageSanityTest.*/) { - skipTestListCheck("Skipping Check Test List for BuildDockerImageSanityTest.") + skipStage("[Check-Test-List] Run", "Skipping Check Test List for BuildDockerImageSanityTest.") return } launchTestListCheck(this, globalVars) @@ -3355,13 +3354,9 @@ pipeline { "Check-Test-List": { stage("Check-Test-List") { if (testFilter[INFRA_DRY_RUN]) { - skipTestListCheck("Skipping Check Test List for the infrastructure dry run.") - } else if (runMode == "nightly_release") { - skipTestListCheck("Skipping Check Test List for nightly_release.") + skipStage("[Check-Test-List] Run", "Skipping Check Test List for the infrastructure dry run.") } else if (testFilter[(ONLY_ONE_GROUP_CHANGED)] == "Docs") { - skipTestListCheck("Skipping Check Test List for Docs-only changes.") - } else if (env.JOB_NAME ==~ /.*BuildDockerImageSanityTest.*/) { - skipTestListCheck("Skipping Check Test List for BuildDockerImageSanityTest.") + skipStage("[Check-Test-List] Run", "Skipping Check Test List for Docs-only changes.") } else { launchTestListCheck(this, globalVars) }