<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>23377</buildableDurationMillis><buildableTimeMillis>23377</buildableTimeMillis><buildingDurationMillis>105556</buildingDurationMillis><executingTimeMillis>105556</executingTimeMillis><executorUtilization>1.0</executorUtilization><queuingDurationMillis>28890</queuingDurationMillis><queuingTimeMillis>28890</queuingTimeMillis><subTaskCount>0</subTaskCount><totalDurationMillis>134446</totalDurationMillis><waitingDurationMillis>5500</waitingDurationMillis><waitingTimeMillis>5500</waitingTimeMillis></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><originmain _class='hudson.plugins.git.util.Build'><buildNumber>1025</buildNumber><marked><SHA1>5bd7e6d0af50fdafd0e6f477ec0faa7695beb741</SHA1><branch><SHA1>5bd7e6d0af50fdafd0e6f477ec0faa7695beb741</SHA1><name>origin/main</name></branch></marked><revision><SHA1>5bd7e6d0af50fdafd0e6f477ec0faa7695beb741</SHA1><branch><SHA1>5bd7e6d0af50fdafd0e6f477ec0faa7695beb741</SHA1><name>origin/main</name></branch></revision></originmain></buildsByBranchName><lastBuiltRevision><SHA1>5bd7e6d0af50fdafd0e6f477ec0faa7695beb741</SHA1><branch><SHA1>5bd7e6d0af50fdafd0e6f477ec0faa7695beb741</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/1025/artifacts</artifactsUrl><changesUrl>https://do.pingcap.net/jenkins/blue/organizations/jenkins/seed/detail/seed/1025/changes</changesUrl><displayUrl>https://do.pingcap.net/jenkins/blue/organizations/jenkins/seed/detail/seed/1025/</displayUrl><testsUrl>https://do.pingcap.net/jenkins/blue/organizations/jenkins/seed/detail/seed/1025/tests</testsUrl></action><building>false</building><displayName>#1025</displayName><duration>105556</duration><estimatedDuration>83303</estimatedDuration><fullDisplayName>seed #1025</fullDisplayName><id>1025</id><inProgress>false</inProgress><keepLog>false</keepLog><number>1025</number><queueId>2008967</queueId><result>SUCCESS</result><timestamp>1758543015860</timestamp><url>https://do.pingcap.net/jenkins/view/all/job/seed/1025/</url><builtOn>default-4k09n</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tools/reporters/ci/flaky-tests/core/ConfigLoader.ts</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/docs/owner-map.example.yaml</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/core/Database.ts</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/main.ts</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/core/OwnerResolver.ts</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/render/HtmlRenderer.ts</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/docs/README.md</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/core/OwnerResolver.test.ts</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/utils/db.ts</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/deno.json</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/deno.lock</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/core/types.ts</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/core/FlakyReporter.ts</affectedPath><affectedPath>tools/reporters/ci/flaky-tests/utils/EmailClient.ts</affectedPath><commitId>5bd7e6d0af50fdafd0e6f477ec0faa7695beb741</commitId><timestamp>1758542983000</timestamp><author><absoluteUrl>https://do.pingcap.net/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>feat(tools): add reporter tool for flaky test analysis and reporting (#3750)

This pull request introduces three new core modules to the Flaky
Reporter tool: `ConfigLoader`, `Database`, and `FlakyReporter`. These
modules provide a clear separation of responsibilities for configuration
parsing, database interaction, and flaky test aggregation, making the
codebase easier to maintain and extend. Each module is well-documented
and designed for composability, with improved error handling and type
safety.

**Core module additions and responsibilities:**

* **Configuration management**
- Added `ConfigLoader` class for parsing CLI arguments and environment
variables, resolving time windows, database and SMTP configurations, and
loading owner maps from YAML/JSON files. This centralizes configuration
logic and improves error handling.

* **Database abstraction**
- Added `Database` class to manage MySQL connections, provide typed
accessors for querying `problem_case_runs` and owner-mapping tables, and
ensure safe connection lifecycle management. Includes methods for
fetching runs, querying owners, and quoting table names securely.

* **Flaky test aggregation**
- Added `FlakyReporter` class to aggregate test runs by case, suite, and
team, and to compute top flaky cases. Integrates with `OwnerResolver`
for ownership resolution and provides verbose logging for debugging.

---------

Co-authored-by: pre-commit-ci[bot] &lt;66853113+pre-commit-ci[bot]@users.noreply.github.com&gt;
Co-authored-by: gemini-code-assist[bot] &lt;176961590+gemini-code-assist[bot]@users.noreply.github.com&gt;
</comment><date>2025-09-22 12:09:43 +0000</date><id>5bd7e6d0af50fdafd0e6f477ec0faa7695beb741</id><msg>feat(tools): add reporter tool for flaky test analysis and reporting</msg><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/main.ts</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/core/OwnerResolver.ts</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/deno.json</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/utils/db.ts</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/deno.lock</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/render/HtmlRenderer.ts</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/core/Database.ts</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/core/OwnerResolver.test.ts</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/core/FlakyReporter.ts</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/utils/EmailClient.ts</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/core/ConfigLoader.ts</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/core/types.ts</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/docs/README.md</file></path><path><editType>add</editType><file>tools/reporters/ci/flaky-tests/docs/owner-map.example.yaml</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>