Skip to content

Commit cd80dfd

Browse files
authored
Merge branch 'main' into slo_alerts_schema_registration
2 parents 5213b0a + 9b64be6 commit cd80dfd

418 files changed

Lines changed: 25749 additions & 5220 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.buildkite/scripts/build_kibana.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ set -euo pipefail
44

55
source .buildkite/scripts/common/util.sh
66

7+
echo "--- Clean up cached images to free up space"
8+
clean_cached_images
9+
710
export KBN_NP_PLUGINS_BUILT=true
811

912
echo "--- Build Kibana Distribution"

.buildkite/scripts/steps/artifacts/docker_context.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ source .buildkite/scripts/steps/artifacts/env.sh
99

1010
KIBANA_DOCKER_CONTEXT="${KIBANA_DOCKER_CONTEXT:="default"}"
1111

12+
echo "--- Clean up cached images to free up space"
13+
clean_cached_images
14+
1215
echo "--- Create contexts"
1316
mkdir -p target
1417
node scripts/build --skip-initialize --skip-generic-folders --skip-platform-folders --skip-archives --skip-cdn-assets --docker-context-use-local-artifact "${BUILD_ARGS[@]}"

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -997,6 +997,7 @@ x-pack/platform/packages/shared/kbn-entities-schema @elastic/core-analysis
997997
x-pack/platform/packages/shared/kbn-es-snapshot-loader @elastic/obs-ai-team
998998
x-pack/platform/packages/shared/kbn-evals @elastic/obs-ai-team @elastic/security-generative-ai
999999
x-pack/platform/packages/shared/kbn-evals-common @elastic/obs-ai-team @elastic/security-generative-ai
1000+
x-pack/platform/packages/shared/kbn-evals-extensions @elastic/obs-ai-team @elastic/security-generative-ai
10001001
x-pack/platform/packages/shared/kbn-evals-phoenix-executor @elastic/obs-ai-team
10011002
x-pack/platform/packages/shared/kbn-evals-suite-streams @elastic/obs-onboarding-team @elastic/obs-sig-events-team
10021003
x-pack/platform/packages/shared/kbn-event-stacktrace @elastic/obs-presentation-team @elastic/obs-exploration-team

docs/reference/cloud/elastic-cloud-kibana-settings.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ If you want to allow anonymous authentication in Kibana, these settings are supp
5050
### Visualizations [ec_visualizations]
5151

5252

53+
#### Version 8.0+ [ec_vis_supported_versions_8_0_0]
54+
55+
`vis_type_timelion.enable`
56+
: For 8.0 version and later, set to `false` to disable Timelion vizualizations. **Default: `true`**
5357

5458
#### Supported versions before 8.0.0 [ec_vis_supported_versions_before_8_0_0]
5559

docs/reference/configuration-reference/general-settings.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,9 @@ $$$settings-telemetry-optIn$$$ `telemetry.optIn`
538538
`vis_type_table.legacyVisEnabled` ![logo cloud](https://doc-icons.s3.us-east-2.amazonaws.com/logo_cloud.svg "Supported on {{ech}}")
539539
: Starting from version 7.11, a new datatable visualization is used. Set to `true` to enable the legacy version. In version 8.0 and later, the old implementation is removed and this setting is no longer supported.
540540

541+
`vis_type_timelion.enable` ![logo cloud](https://doc-icons.s3.us-east-2.amazonaws.com/logo_cloud.svg "Supported on {{ech}}")
542+
: For 8.0 version and later, set to `false` to disable Timelion vizualizations. **Default: `true`**
543+
541544
`vis_type_vega.enable` ![logo cloud](https://doc-icons.s3.us-east-2.amazonaws.com/logo_cloud.svg "Supported on {{ech}}")
542545
: For 7.7 version and later, set to `false` to disable Vega vizualizations. **Default: `true`**
543546

fleet_packages.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
},
3131
{
3232
"name": "elastic_agent",
33-
"version": "2.7.3"
33+
"version": "2.7.4"
3434
},
3535
{
3636
"name": "endpoint",

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1690,6 +1690,7 @@
16901690
"@kbn/eslint-plugin-telemetry": "link:packages/kbn-eslint-plugin-telemetry",
16911691
"@kbn/esql-resource-browser-storybook-config": "link:src/platform/packages/shared/kbn-esql-resource-browser/.storybook",
16921692
"@kbn/evals": "link:x-pack/platform/packages/shared/kbn-evals",
1693+
"@kbn/evals-extensions": "link:x-pack/platform/packages/shared/kbn-evals-extensions",
16931694
"@kbn/evals-phoenix-executor": "link:x-pack/platform/packages/shared/kbn-evals-phoenix-executor",
16941695
"@kbn/evals-suite-agent-builder": "link:x-pack/platform/packages/shared/agent-builder/kbn-evals-suite-agent-builder",
16951696
"@kbn/evals-suite-endpoint": "link:x-pack/solutions/security/packages/kbn-evals-suite-endpoint",

packages/kbn-failed-test-reporter-cli/failed_tests_reporter/report_failure.test.ts

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@
99

1010
import dedent from 'dedent';
1111

12-
import { createFailureIssue, updateFailureIssue } from './report_failure';
12+
import {
13+
createFailureIssue,
14+
redactSensitiveGithubFailureText,
15+
updateFailureIssue,
16+
} from './report_failure';
1317

1418
jest.mock('./github_api');
1519
const { GithubApi } = jest.requireMock('./github_api');
@@ -18,6 +22,48 @@ beforeEach(() => {
1822
jest.clearAllMocks();
1923
});
2024

25+
describe('redactSensitiveGithubFailureText()', () => {
26+
it('redacts @elastic.co emails, qa.elastic.cloud hosts, and console.qa.cld.elstc.co', () => {
27+
const input = dedent`
28+
Error: Failed to parse SAML response value.
29+
Most likely the 'fixture-user+alias@elastic.co' user has no access to the cloud deployment.
30+
Login to console.qa.cld.elstc.co with the user from '.ftr/role_users.json' file and try to load
31+
https://fixture-depl-abc123.kb.eu-west-1.aws.qa.elastic.cloud in the same window.
32+
`;
33+
34+
const out = redactSensitiveGithubFailureText(input);
35+
36+
expect(out).toContain('<redacted>@elastic.co');
37+
expect(out).not.toContain('fixture-user+alias@elastic.co');
38+
expect(out).toContain('Login to <redacted> with');
39+
expect(out).not.toContain('console.qa.cld.elstc.co');
40+
expect(out).toContain('<redacted>.qa.elastic.cloud');
41+
expect(out).not.toContain('fixture-depl-abc123');
42+
});
43+
44+
it('redacts bare *.qa.elastic.cloud hostnames without a URL scheme', () => {
45+
expect(
46+
redactSensitiveGithubFailureText('open fake-sub.kb.eu-west-1.aws.qa.elastic.cloud in browser')
47+
).toBe('open <redacted>.qa.elastic.cloud in browser');
48+
});
49+
50+
it('redacts any *.found.no and *.elastic.co hosts and URLs', () => {
51+
expect(
52+
redactSensitiveGithubFailureText(
53+
'open https://fixture-staging.found.no/ then https://fixture-app.elastic.co/'
54+
)
55+
).toBe('open <redacted>.found.no then <redacted>.elastic.co');
56+
expect(
57+
redactSensitiveGithubFailureText(
58+
'Login at fixture-staging.found.no or fixture-app.elastic.co'
59+
)
60+
).toBe('Login at <redacted>.found.no or <redacted>.elastic.co');
61+
expect(redactSensitiveGithubFailureText('other https://fixture-api.found.no/x')).toBe(
62+
'other <redacted>.found.no'
63+
);
64+
});
65+
});
66+
2167
describe('createFailureIssue()', () => {
2268
it('creates new github issue with failure text, link to issue, and valid metadata', async () => {
2369
const api = new GithubApi();

packages/kbn-failed-test-reporter-cli/failed_tests_reporter/report_failure.ts

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,30 @@ import type { ScoutTestFailureExtended } from './get_scout_failures';
1313
import type { GithubApi } from './github_api';
1414
import { getIssueMetadata, updateIssueMetadata } from './issue_metadata';
1515

16+
function redactHostnameSuffix(text: string, suffix: string): string {
17+
const escaped = suffix.replace(/\./g, '\\.');
18+
return text.replace(
19+
new RegExp(
20+
`(?:https?:\\/\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9.-]*[a-zA-Z0-9])?\\.${escaped}(?:[^\\s]*)?`,
21+
'g'
22+
),
23+
() => `<redacted>.${suffix}`
24+
);
25+
}
26+
27+
const REDACT_HOST_SUFFIXES = ['found.no', 'elastic.co', 'qa.elastic.cloud'] as const;
28+
29+
/**
30+
* Redacts emails and sensitive hostnames (e.g. *.found.no, *.elastic.co, *.qa.elastic.cloud) from text posted to public GitHub issues.
31+
*/
32+
export function redactSensitiveGithubFailureText(text: string): string {
33+
let out = text.replace(/\bconsole\.qa\.cld\.elstc\.co\b/g, '<redacted>');
34+
for (const suffix of REDACT_HOST_SUFFIXES) {
35+
out = redactHostnameSuffix(out, suffix);
36+
}
37+
return out.replace(/\S+@elastic\.co\b/g, '<redacted>@elastic.co');
38+
}
39+
1640
function isScoutFailure(failure: TestFailure): failure is ScoutTestFailureExtended {
1741
return 'id' in failure && 'target' in failure && 'location' in failure;
1842
}
@@ -52,7 +76,7 @@ function createFTRBody(
5276
branch: string,
5377
pipeline: string
5478
): string {
55-
const failureBody = truncateFailureBody(failure.failure);
79+
const failureBody = redactSensitiveGithubFailureText(truncateFailureBody(failure.failure));
5680

5781
const bodyContent = [
5882
'A test failed on a tracked branch',
@@ -89,7 +113,7 @@ function createScoutBody(
89113
branch: string,
90114
pipeline: string
91115
): string {
92-
const failureBody = truncateFailureBody(failure.failure);
116+
const failureBody = redactSensitiveGithubFailureText(truncateFailureBody(failure.failure));
93117

94118
// Create table format for Scout test details
95119
const scoutDetailsTable = [
@@ -236,7 +260,9 @@ function createScoutComment(
236260
* ```
237261
*/
238262

239-
return `${base}\n\nNew error message:\n\`\`\`\n${newErrorMessage}\n\`\`\``;
263+
return `${base}\n\nNew error message:\n\`\`\`\n${redactSensitiveGithubFailureText(
264+
newErrorMessage
265+
)}\n\`\`\``;
240266
}
241267

242268
async function updateFTRFailureIssue(
@@ -278,8 +304,13 @@ async function updateScoutFailureIssue(
278304
let newErrorMessage: string | undefined;
279305
if (failure.errorMessage && previousFailureBody) {
280306
const currentErrorMsg = truncateFailureBody(failure.errorMessage).trim();
281-
if (!previousFailureBody.includes(currentErrorMsg)) {
282-
newErrorMessage = currentErrorMsg;
307+
// Current error.message from CI is raw. The issue's first code block is usually already
308+
// redacted (we redact on create), but older issues may still hold raw text. Redacting
309+
// previous again is idempotent.
310+
const redactedPrevious = redactSensitiveGithubFailureText(previousFailureBody);
311+
const redactedCurrent = redactSensitiveGithubFailureText(currentErrorMsg);
312+
if (!redactedPrevious.includes(redactedCurrent)) {
313+
newErrorMessage = redactedCurrent;
283314
}
284315
}
285316

src/core/packages/http/router-server-internal/src/timing/request_timing.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
import { RequestTimingImpl } from './request_timing';
1111
import type { RequestTimingState } from './types';
1212

13-
describe('RequestTimingImpl', () => {
13+
// Failing: See https://github.com/elastic/kibana/issues/259867
14+
describe.skip('RequestTimingImpl', () => {
1415
let state: RequestTimingState;
1516
let timing: RequestTimingImpl;
1617

0 commit comments

Comments
 (0)