<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>15916</buildableDurationMillis><buildableTimeMillis>15916</buildableTimeMillis><buildingDurationMillis>44016</buildingDurationMillis><executingTimeMillis>44016</executingTimeMillis><executorUtilization>1.0</executorUtilization><queuingDurationMillis>22338</queuingDurationMillis><queuingTimeMillis>22338</queuingTimeMillis><subTaskCount>0</subTaskCount><totalDurationMillis>66354</totalDurationMillis><waitingDurationMillis>6420</waitingDurationMillis><waitingTimeMillis>6420</waitingTimeMillis></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><originmain _class='hudson.plugins.git.util.Build'><buildNumber>1663</buildNumber><marked><SHA1>83691152ea8fa148a7c0a037fdb2d89e217edbc2</SHA1><branch><SHA1>83691152ea8fa148a7c0a037fdb2d89e217edbc2</SHA1><name>origin/main</name></branch></marked><revision><SHA1>83691152ea8fa148a7c0a037fdb2d89e217edbc2</SHA1><branch><SHA1>83691152ea8fa148a7c0a037fdb2d89e217edbc2</SHA1><name>origin/main</name></branch></revision></originmain></buildsByBranchName><lastBuiltRevision><SHA1>83691152ea8fa148a7c0a037fdb2d89e217edbc2</SHA1><branch><SHA1>83691152ea8fa148a7c0a037fdb2d89e217edbc2</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'><artifactsUrl>https://do.pingcap.net/jenkins/blue/organizations/jenkins/seed/detail/seed/1663/artifacts</artifactsUrl><changesUrl>https://do.pingcap.net/jenkins/blue/organizations/jenkins/seed/detail/seed/1663/changes</changesUrl><displayUrl>https://do.pingcap.net/jenkins/blue/organizations/jenkins/seed/detail/seed/1663/</displayUrl><testsUrl>https://do.pingcap.net/jenkins/blue/organizations/jenkins/seed/detail/seed/1663/tests</testsUrl></action><building>false</building><displayName>#1663</displayName><duration>44016</duration><estimatedDuration>47130</estimatedDuration><fullDisplayName>seed #1663</fullDisplayName><id>1663</id><inProgress>false</inProgress><keepLog>false</keepLog><number>1663</number><queueId>3676838</queueId><result>SUCCESS</result><timestamp>1777543476054</timestamp><url>https://do.pingcap.net/jenkins/job/seed/1663/</url><builtOn>default-41jzv</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tools/reporters/ci/flaky-tests/core/GithubIssueManager.ts</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/render/HtmlRenderer.ts</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/deno.lock</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/core/GithubIssueManager.test.ts</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/deno.json</affectedPath><commitId>83691152ea8fa148a7c0a037fdb2d89e217edbc2</commitId><timestamp>1777543449000</timestamp><author><absoluteUrl>https://do.pingcap.net/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>refactor(flaky-tests): simplify GitHub types and API usage, remove custom wrappers (#4567)

## Summary

Simplify GitHub-related code in `flaky-tests`: remove custom wrapper
layer and use Octokit types/APIs directly.

### Changes

1. **Remove custom `GitHubClient` wrapper class** (~120 lines)  
`GitHubClient` wrapped 5 Octokit API methods (`searchIssues`,
`createIssue`, `reopenIssue`, `addLabels`, `addComment`), each manually
mapping response fields to a custom `GitHubIssueApi` interface. Now
calls Octokit's native REST APIs directly.

2. **Remove `GitHubIssueApi` and `OctokitLike` interfaces**  
No more custom interfaces — use `Octokit` type directly from
`@octokit/rest`.

3. **Flatten helper functions**  
Extract Octokit calls into module-level standalone functions
(`searchIssues`, `createIssue`, etc.) instead of class instance methods.

4. **Test at Octokit mock level**  
Tests no longer mock `GitHubClient`. Instead, inject a mock Octokit
instance via the `octokit` constructor option.

5. **Fix GitHub API deprecation warning**  
Add `X-GitHub-Api-Version: 2026-03-10` header to use the latest API
version.

### Files Changed

- `tools/reporters/ci/flaky-tests/core/GithubIssueManager.ts` — major
simplification
- `tools/reporters/ci/flaky-tests/core/GithubIssueManager.test.ts` —
updated mocking strategy
- `tools/reporters/ci/flaky-tests/deno.json` / `deno.lock` — dependency
updates
- `tools/reporters/ci/flaky-tests/render/HtmlRenderer.ts` — label text
optimization

---------

Co-authored-by: Ti Chi Robot &lt;ti-community-prow-bot@tidb.io&gt;
Co-authored-by: gemini-code-assist[bot] &lt;176961590+gemini-code-assist[bot]@users.noreply.github.com&gt;
</comment><date>2026-04-30 10:04:09 +0000</date><id>83691152ea8fa148a7c0a037fdb2d89e217edbc2</id><msg>refactor(flaky-tests): simplify GitHub types and API usage, remove</msg><path><editType>edit</editType><file>tools/reporters/ci/flaky-tests/core/GithubIssueManager.ts</file></path><path><editType>edit</editType><file>tools/reporters/ci/flaky-tests/render/HtmlRenderer.ts</file></path><path><editType>edit</editType><file>tools/reporters/ci/flaky-tests/deno.lock</file></path><path><editType>edit</editType><file>tools/reporters/ci/flaky-tests/core/GithubIssueManager.test.ts</file></path><path><editType>edit</editType><file>tools/reporters/ci/flaky-tests/deno.json</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://do.pingcap.net/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName><id>noreply</id></culprit></freeStyleBuild>