mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
[Ownership] Add code owner to ftr failure report (#203076)
## Summary Resolves: https://github.com/elastic/kibana/issues/202687 ### For Reviewers #### To test locally, make a test fail, something like ``` diff --git a/test/functional/apps/console/_autocomplete.ts b/test/functional/apps/console/_autocomplete.ts index 0e29b29e96e..78976e6d54b 100644 --- a/test/functional/apps/console/_autocomplete.ts +++ b/test/functional/apps/console/_autocomplete.ts @@ -50,14 +50,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.console.setAutocompleteTrace(false); }); - it('should provide basic auto-complete functionality', async () => { + it.only('should provide basic auto-complete functionality', async () => { await PageObjects.console.enterText(`GET _search\n`); await PageObjects.console.pressEnter(); await PageObjects.console.enterText(`{\n\t"query": {`); await PageObjects.console.pressEnter(); await PageObjects.console.sleepForDebouncePeriod(); await PageObjects.console.promptAutocomplete(); - expect(PageObjects.console.isAutocompleteVisible()).to.be.eql(true); + expect(false).to.be.eql(true); }); it('should not show duplicate suggestions', async () => { ``` #### Then run the tests: `TEST_BROWSER_HEADLESS=1 CI=1 node scripts/functional_tests --config=test/functional/apps/console/config.ts --bail` #### Then run the reporter to see the html file `JOB_NAME=elastic+kibana+7.x node scripts/report_failed_tests --build-url="${BUILDKITE_BUILD_URL}#${BUILDKITE_JOB_ID}" 'target/junit/**/*.xml' --no-github-update --no-index-errors` #### Lastly, inspect the HTML File `grep elastic target/test_failures/*.html -B 2` ``` <div> <strong>Owners</strong>: <pre>elastic/kibana-management</pre> -- </div> <div> <a href="https://github.com/elastic/kibana/issues/156926">https://github.com/elastic/kibana/issues/156926</a> -- <h5>Stdout</h5> <pre>Failed Tests Reporter: - Test has failed 1 times on tracked branches: https://github.com/elastic/kibana/issues/156926 Failed Tests Reporter: - Test has failed 1 times on tracked branches: https://github.com/elastic/kibana/issues/156926 Failed Tests Reporter: - Test has failed 1 times on tracked branches: https://github.com/elastic/kibana/issues/156926 ``` Notice the `<pre>elastic/kibana-management</pre>` in the output of grep Also, you can continue verification of the ownership value, via: `node scripts/get_owners_for_file.js --file test/functional/apps/console/_autocomplete.ts` ``` succ Found matching entry in .github/CODEOWNERS: test/functional/apps/console/*.ts elastic/kibana-management ``` --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
This commit is contained in:
parent
e7dabbffa7
commit
82f0e2cd54
6 changed files with 27 additions and 9 deletions
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<testsuites name="ftr" timestamp="2019-06-05T23:37:10" time="903.670" tests="129" failures="5" skipped="71" command-line="node scripts/functional_tests --config=x-pack/test/api_integration/apis/status/config.ts">
|
||||
<testsuite timestamp="2019-06-05T23:37:10" time="903.670" tests="129" failures="5" skipped="71" command-line="node scripts/functional_tests --config=x-pack/test/api_integration/apis/status/config.ts">
|
||||
<testcase name="maps app maps loaded from sample data ecommerce "before all" hook" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/maps/sample_data·js" time="154.378">
|
||||
<testcase name="maps app maps loaded from sample data ecommerce "before all" hook" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/maps/sample_data·js" time="154.378" owners="elastic/kibana-presentation">
|
||||
<system-out>
|
||||
<![CDATA[[00:00:00] │
|
||||
[00:07:04] └-: maps app
|
||||
|
@ -18,7 +18,7 @@ Wait timed out after 10055ms
|
|||
at onFailure (/var/lib/jenkins/workspace/elastic+kibana+master/JOB/x-pack-ciGroup7/node/immutable/kibana/test/common/services/retry/retry_for_success.ts:68:13)]]>
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="maps app "after all" hook" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/maps" time="0.179" metadata-json="{"messages":["foo"],"screenshots":[{"name":"failure[dashboard app using current data dashboard snapshots compare TSVB snapshot]","url":"https://storage.googleapis.com/kibana-ci-artifacts/jobs/elastic+kibana+7.x/1632/kibana-oss-tests/test/functional/screenshots/failure/dashboard%20app%20using%20current%20data%20dashboard%20snapshots%20compare%20TSVB%20snapshot.png"}]}">
|
||||
<testcase name="maps app "after all" hook" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/maps" time="0.179" metadata-json="{"messages":["foo"],"screenshots":[{"name":"failure[dashboard app using current data dashboard snapshots compare TSVB snapshot]","url":"https://storage.googleapis.com/kibana-ci-artifacts/jobs/elastic+kibana+7.x/1632/kibana-oss-tests/test/functional/screenshots/failure/dashboard%20app%20using%20current%20data%20dashboard%20snapshots%20compare%20TSVB%20snapshot.png"}]}" owners="elastic/kibana-presentation">
|
||||
<system-out>
|
||||
<![CDATA[[00:00:00] │
|
||||
[00:07:04] └-: maps app
|
||||
|
@ -32,7 +32,7 @@ Wait timed out after 10055ms
|
|||
at process._tickCallback (internal/process/next_tick.js:68:7) name: 'NoSuchSessionError', remoteStacktrace: '' }]]>
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="InfraOps app feature controls infrastructure security global infrastructure all privileges shows infrastructure navlink" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/infra/feature_controls/infrastructure_security·ts">
|
||||
<testcase name="InfraOps app feature controls infrastructure security global infrastructure all privileges shows infrastructure navlink" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/infra/feature_controls/infrastructure_security·ts" owners="elastic/kibana-presentation">
|
||||
<system-out>
|
||||
<![CDATA[[00:00:00] │
|
||||
[00:05:13] └-: InfraOps app
|
||||
|
@ -41,7 +41,7 @@ Wait timed out after 10055ms
|
|||
</system-out>
|
||||
<skipped/>
|
||||
</testcase>
|
||||
<testcase name="machine learning anomaly detection saved search with lucene query job creation opens the advanced section" classname="Firefox XPack UI Functional Tests.x-pack/test/functional/apps/machine_learning/anomaly_detection/saved_search_job·ts" time="6.040">
|
||||
<testcase name="machine learning anomaly detection saved search with lucene query job creation opens the advanced section" classname="Firefox XPack UI Functional Tests.x-pack/test/functional/apps/machine_learning/anomaly_detection/saved_search_job·ts" time="6.040" owners="elastic/ml-ui">
|
||||
<system-out><![CDATA[[00:21:57] └-: machine learning...]]></system-out>
|
||||
<failure><![CDATA[{ NoSuchSessionError: Tried to run command without establishing a connection
|
||||
at Object.throwDecodedError (/dev/shm/workspace/kibana/node_modules/selenium-webdriver/lib/error.js:550:15)
|
||||
|
|
|
@ -63,7 +63,7 @@ it('rewrites ftr reports with minimal changes', async () => {
|
|||
‹?xml version="1.0" encoding="utf-8"?›
|
||||
‹testsuites name="ftr" timestamp="2019-06-05T23:37:10" time="903.670" tests="129" failures="5" skipped="71" command-line="node scripts/functional_tests --config=x-pack/test/api_integration/apis/status/config.ts"›
|
||||
‹testsuite timestamp="2019-06-05T23:37:10" time="903.670" tests="129" failures="5" skipped="71" command-line="node scripts/functional_tests --config=x-pack/test/api_integration/apis/status/config.ts"›
|
||||
‹testcase name="maps app maps loaded from sample data ecommerce "before all" hook" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/maps/sample_data·js" time="154.378"›
|
||||
‹testcase name="maps app maps loaded from sample data ecommerce "before all" hook" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/maps/sample_data·js" time="154.378" owners="elastic/kibana-presentation"›
|
||||
- ‹system-out›
|
||||
- ‹![CDATA[[00:00:00] │
|
||||
+ ‹system-out›Failed Tests Reporter:
|
||||
|
@ -88,7 +88,7 @@ it('rewrites ftr reports with minimal changes', async () => {
|
|||
+ at onFailure (/var/lib/jenkins/workspace/elastic+kibana+master/JOB/x-pack-ciGroup7/node/immutable/kibana/test/common/services/retry/retry_for_success.ts:68:13)
|
||||
‹/failure›
|
||||
‹/testcase›
|
||||
‹testcase name="maps app "after all" hook" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/maps" time="0.179" metadata-json="{"messages":["foo"],"screenshots":[{"name":"failure[dashboard app using current data dashboard snapshots compare TSVB snapshot]","url":"https://storage.googleapis.com/kibana-ci-artifacts/jobs/elastic+kibana+7.x/1632/kibana-oss-tests/test/functional/screenshots/failure/dashboard%20app%20using%20current%20data%20dashboard%20snapshots%20compare%20TSVB%20snapshot.png"}]}"›
|
||||
‹testcase name="maps app "after all" hook" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/maps" time="0.179" metadata-json="{"messages":["foo"],"screenshots":[{"name":"failure[dashboard app using current data dashboard snapshots compare TSVB snapshot]","url":"https://storage.googleapis.com/kibana-ci-artifacts/jobs/elastic+kibana+7.x/1632/kibana-oss-tests/test/functional/screenshots/failure/dashboard%20app%20using%20current%20data%20dashboard%20snapshots%20compare%20TSVB%20snapshot.png"}]}" owners="elastic/kibana-presentation"›
|
||||
‹system-out›
|
||||
- ‹![CDATA[[00:00:00] │
|
||||
+ [00:00:00] │
|
||||
|
@ -106,7 +106,7 @@ it('rewrites ftr reports with minimal changes', async () => {
|
|||
+ at process._tickCallback (internal/process/next_tick.js:68:7) name: 'NoSuchSessionError', remoteStacktrace: '' }
|
||||
‹/failure›
|
||||
‹/testcase›
|
||||
‹testcase name="InfraOps app feature controls infrastructure security global infrastructure all privileges shows infrastructure navlink" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/infra/feature_controls/infrastructure_security·ts"›
|
||||
‹testcase name="InfraOps app feature controls infrastructure security global infrastructure all privileges shows infrastructure navlink" classname="Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/infra/feature_controls/infrastructure_security·ts" owners="elastic/kibana-presentation"›
|
||||
‹system-out›
|
||||
- ‹![CDATA[[00:00:00] │
|
||||
+ [00:00:00] │
|
||||
|
@ -117,7 +117,7 @@ it('rewrites ftr reports with minimal changes', async () => {
|
|||
‹/system-out›
|
||||
‹skipped/›
|
||||
‹/testcase›
|
||||
‹testcase name="machine learning anomaly detection saved search with lucene query job creation opens the advanced section" classname="Firefox XPack UI Functional Tests.x-pack/test/functional/apps/machine_learning/anomaly_detection/saved_search_job·ts" time="6.040"›
|
||||
‹testcase name="machine learning anomaly detection saved search with lucene query job creation opens the advanced section" classname="Firefox XPack UI Functional Tests.x-pack/test/functional/apps/machine_learning/anomaly_detection/saved_search_job·ts" time="6.040" owners="elastic/ml-ui"›
|
||||
- ‹system-out›‹![CDATA[[00:21:57] └-: machine learning...]]›‹/system-out›
|
||||
- ‹failure›‹![CDATA[{ NoSuchSessionError: Tried to run command without establishing a connection
|
||||
+ ‹system-out›[00:21:57] └-: machine learning...‹/system-out›
|
||||
|
|
|
@ -28,6 +28,7 @@ it('discovers failures in ftr report', async () => {
|
|||
",
|
||||
"likelyIrrelevant": false,
|
||||
"name": "maps app maps loaded from sample data ecommerce \\"before all\\" hook",
|
||||
"owners": "elastic/kibana-presentation",
|
||||
"system-out": "
|
||||
[00:00:00] │
|
||||
[00:07:04] └-: maps app
|
||||
|
@ -49,6 +50,7 @@ it('discovers failures in ftr report', async () => {
|
|||
"likelyIrrelevant": true,
|
||||
"metadata-json": "{\\"messages\\":[\\"foo\\"],\\"screenshots\\":[{\\"name\\":\\"failure[dashboard app using current data dashboard snapshots compare TSVB snapshot]\\",\\"url\\":\\"https://storage.googleapis.com/kibana-ci-artifacts/jobs/elastic+kibana+7.x/1632/kibana-oss-tests/test/functional/screenshots/failure/dashboard%20app%20using%20current%20data%20dashboard%20snapshots%20compare%20TSVB%20snapshot.png\\"}]}",
|
||||
"name": "maps app \\"after all\\" hook",
|
||||
"owners": "elastic/kibana-presentation",
|
||||
"system-out": "
|
||||
[00:00:00] │
|
||||
[00:07:04] └-: maps app
|
||||
|
@ -67,6 +69,7 @@ it('discovers failures in ftr report', async () => {
|
|||
at process._tickCallback (internal/process/next_tick.js:68:7) name: 'NoSuchSessionError', remoteStacktrace: '' }",
|
||||
"likelyIrrelevant": true,
|
||||
"name": "machine learning anomaly detection saved search with lucene query job creation opens the advanced section",
|
||||
"owners": "elastic/ml-ui",
|
||||
"system-out": "[00:21:57] └-: machine learning...",
|
||||
"time": "6.040",
|
||||
},
|
||||
|
@ -87,6 +90,7 @@ it('discovers failures in jest report', async () => {
|
|||
",
|
||||
"likelyIrrelevant": false,
|
||||
"name": "launcher can reconnect if process died",
|
||||
"owners": undefined,
|
||||
"system-out": "",
|
||||
"time": "7.060",
|
||||
},
|
||||
|
@ -116,6 +120,7 @@ it('discovers failures in mocha report', async () => {
|
|||
",
|
||||
"likelyIrrelevant": true,
|
||||
"name": "code in multiple nodes \\"before all\\" hook",
|
||||
"owners": undefined,
|
||||
"system-out": "
|
||||
|
||||
",
|
||||
|
@ -131,6 +136,7 @@ it('discovers failures in mocha report', async () => {
|
|||
",
|
||||
"likelyIrrelevant": true,
|
||||
"name": "code in multiple nodes \\"after all\\" hook",
|
||||
"owners": undefined,
|
||||
"system-out": "
|
||||
|
||||
",
|
||||
|
|
|
@ -18,6 +18,7 @@ export type TestFailure = FailedTestCase['$'] & {
|
|||
githubIssue?: string;
|
||||
failureCount?: number;
|
||||
commandLine?: string;
|
||||
owners?: any;
|
||||
};
|
||||
|
||||
const getText = (node?: Array<string | { _: string }>) => {
|
||||
|
@ -78,6 +79,7 @@ export function getFailures(report: TestReport) {
|
|||
for (const testCase of makeFailedTestCaseIter(report)) {
|
||||
const failure = getText(testCase.failure);
|
||||
const likelyIrrelevant = isLikelyIrrelevant(testCase.$.name, failure);
|
||||
const owners = testCase.$.owners;
|
||||
|
||||
const failureObj = {
|
||||
// unwrap xml weirdness
|
||||
|
@ -87,6 +89,7 @@ export function getFailures(report: TestReport) {
|
|||
likelyIrrelevant,
|
||||
'system-out': getText(testCase['system-out']),
|
||||
commandLine,
|
||||
owners,
|
||||
};
|
||||
|
||||
// cleaning up duplicates
|
||||
|
|
|
@ -179,6 +179,12 @@ export async function reportFailuresToFile(
|
|||
</div>`
|
||||
: ''
|
||||
}
|
||||
<div>
|
||||
<strong>Owners</strong>:
|
||||
<pre>${escape(
|
||||
failure?.owners ? (failure?.owners as string) : 'Unable to determine code owners'
|
||||
)}</pre>
|
||||
</div>
|
||||
<div>
|
||||
<strong>Failures in tracked branches</strong>:
|
||||
<span class="badge rounded-pill bg-danger">${failure.failureCount || 0}</span>
|
||||
|
|
|
@ -11,7 +11,6 @@ import Fs from 'fs';
|
|||
import { promisify } from 'util';
|
||||
|
||||
import xml2js from 'xml2js';
|
||||
|
||||
const readAsync = promisify(Fs.readFile);
|
||||
|
||||
export type TestReport =
|
||||
|
@ -40,6 +39,8 @@ export interface TestSuite {
|
|||
'metadata-json'?: string;
|
||||
/* the command that ran this suite */
|
||||
'command-line'?: string;
|
||||
/* the codeowners of the file */
|
||||
owners?: string;
|
||||
};
|
||||
testcase?: TestCase[];
|
||||
}
|
||||
|
@ -56,6 +57,8 @@ export interface TestCase {
|
|||
'metadata-json'?: string;
|
||||
/* the command that ran this suite */
|
||||
'command-line'?: string;
|
||||
/* the codeowners of the file */
|
||||
owners?: string;
|
||||
};
|
||||
/* contents of system-out elements */
|
||||
'system-out'?: Array<string | { _: string }>;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue