<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='com.cloudbees.jenkins.GitHubPushCause'><shortDescription>Started by GitHub push by ti-chi-bot[bot]</shortDescription></cause><cause _class='com.cloudbees.jenkins.GitHubPushCause'><shortDescription>Started by GitHub push by ti-chi-bot[bot]</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>20053</buildableDurationMillis><buildableTimeMillis>20053</buildableTimeMillis><buildingDurationMillis>47247</buildingDurationMillis><executingTimeMillis>47247</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>6505</waitingDurationMillis><waitingTimeMillis>6505</waitingTimeMillis></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><originmain _class='hudson.plugins.git.util.Build'><buildNumber>1818</buildNumber><marked><SHA1>ab63d9ffd61aa215b5bf599c3ede32ddd1ea075f</SHA1><branch><SHA1>ab63d9ffd61aa215b5bf599c3ede32ddd1ea075f</SHA1><name>origin/main</name></branch></marked><revision><SHA1>ab63d9ffd61aa215b5bf599c3ede32ddd1ea075f</SHA1><branch><SHA1>ab63d9ffd61aa215b5bf599c3ede32ddd1ea075f</SHA1><name>origin/main</name></branch></revision></originmain></buildsByBranchName><lastBuiltRevision><SHA1>ab63d9ffd61aa215b5bf599c3ede32ddd1ea075f</SHA1><branch><SHA1>ab63d9ffd61aa215b5bf599c3ede32ddd1ea075f</SHA1><name>origin/main</name></branch></lastBuiltRevision><remoteUrl>https://github.com/PingCAP-QE/ci.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#1818</displayName><duration>47247</duration><estimatedDuration>42534</estimatedDuration><fullDisplayName>seed #1818</fullDisplayName><id>1818</id><inProgress>false</inProgress><keepLog>false</keepLog><number>1818</number><queueId>3694412</queueId><result>SUCCESS</result><timestamp>1782440182795</timestamp><url>https://do.pingcap.net/jenkins/job/seed/1818/</url><builtOn>default-mfg8k</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pipelines/pingcap-qe/tidb-test/latest/pull_tiproxy_mysql_connector_test/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/pull_tiproxy_common_test/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/pull_tiproxy_jdbc_test/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/pull_integration_jdbc_test_next_gen/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/ghpr_integration_mysql_test/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/ghpr_integration_jdbc_test/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/pull_tiproxy_ruby_orm_test/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/ghpr_integration_nodejs_test/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/ghpr_integration_common_test/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/ghpr_mysql_test/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/ghpr_common_test/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/pull_tiproxy_mysql_test/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/pull_mysql_test_next_gen/pipeline.groovy</affectedPath><affectedPath>pipelines/pingcap-qe/tidb-test/latest/ghpr_integration_python_orm_test/pipeline.groovy</affectedPath><commitId>ab63d9ffd61aa215b5bf599c3ede32ddd1ea075f</commitId><timestamp>1782440152000</timestamp><author><absoluteUrl>https://do.pingcap.net/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>fix(pipelines/tidb-test): move unstash outside dir() to fix double-nesting (#4749)

## Problem

Refactored all 15
`pipelines/pingcap-qe/tidb-test/latest/*/pipeline.groovy` files to use
stash/unstash for workspace handoff between the `Checkout &amp; Prepare`
stage and parallel Test stages.

However, the stash is created at the **workspace root** (outside any
`dir()` block), so it contains paths with the `tidb-test/` prefix (e.g.,
`tidb-test/mysql_test/test.sh`). In the Test stage, the `unstash` was
placed **inside** `dir('tidb-test')` or `dir(REFS.repo)`, causing files
to be extracted to a double-nested path like
`tidb-test/tidb-test/mysql_test/test.sh`.

This results in `./test.sh: No such file or directory` (exit code 127)
for all parallel matrix branches.

**Failing job**:
https://prow.tidb.net/jenkins/job/pingcap-qe/job/tidb-test/job/ghpr_mysql_test/12

## Fix

Move `unstash name: WORKSPACE_STASH_NAME` outside the `dir()` wrapper in
the Test stage, so files are extracted at the workspace root where the
stash paths naturally resolve to the correct locations.

## Affected pipelines (14 of 15)

| Pipeline | Pattern |
|---|---|
| `ghpr_mysql_test` | `unstash` out of `dir('tidb-test')` |
| `ghpr_common_test` | same |
| `ghpr_integration_common_test` | same |
| `ghpr_integration_jdbc_test` | same |
| `ghpr_integration_mysql_test` | same (+ merged nested
`dir('mysql_test')`) |
| `ghpr_integration_nodejs_test` | same |
| `ghpr_integration_python_orm_test` | same |
| `pull_tiproxy_common_test` | same |
| `pull_tiproxy_jdbc_test` | same |
| `pull_tiproxy_mysql_connector_test` | same |
| `pull_tiproxy_mysql_test` | same |
| `pull_tiproxy_ruby_orm_test` | same |
| `pull_integration_jdbc_test_next_gen` | `unstash` out of
`dir(REFS.repo)` |
| `pull_mysql_test_next_gen` | same |

`ghpr_build` is not affected (no stash/unstash pattern).
</comment><date>2026-06-26 02:15:52 +0000</date><id>ab63d9ffd61aa215b5bf599c3ede32ddd1ea075f</id><msg>fix(pipelines/tidb-test): move unstash outside dir() to fix</msg><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/ghpr_integration_jdbc_test/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/ghpr_integration_nodejs_test/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/ghpr_integration_mysql_test/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/ghpr_integration_python_orm_test/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/pull_tiproxy_common_test/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/pull_tiproxy_ruby_orm_test/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/ghpr_mysql_test/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/pull_integration_jdbc_test_next_gen/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/pull_tiproxy_mysql_connector_test/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/pull_mysql_test_next_gen/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/ghpr_integration_common_test/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/ghpr_common_test/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/pull_tiproxy_mysql_test/pipeline.groovy</file></path><path><editType>edit</editType><file>pipelines/pingcap-qe/tidb-test/latest/pull_tiproxy_jdbc_test/pipeline.groovy</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://do.pingcap.net/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit></freeStyleBuild>