-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[scout] add ci pipeline #202707
[scout] add ci pipeline #202707
Changes from all commits
b06b1e3
2196b50
3bf06d8
15db0aa
11648e6
21828c6
d82f4cd
ffa7a7b
2774f7b
9fe0a76
b1feb44
3a966c4
7277a38
ea67b2d
a250a59
040f224
7fb9639
2b49bff
ffae7d3
a514f73
302ad67
1a06832
868095c
ca92b74
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
steps: | ||
- command: .buildkite/scripts/steps/functional/scout_ui_tests.sh | ||
label: 'Scout UI Tests' | ||
agents: | ||
machineType: n2-standard-4 | ||
preemptible: true | ||
depends_on: | ||
- build | ||
- quick_checks | ||
- checks | ||
- linting | ||
- linting_with_types | ||
- check_types | ||
timeout_in_minutes: 30 | ||
retry: | ||
automatic: | ||
- exit_status: '-1' | ||
limit: 2 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -euo pipefail | ||
|
||
source .buildkite/scripts/steps/functional/common.sh | ||
|
||
export JOB=kibana-scout-ui-tests | ||
|
||
TEST_CONFIG="x-pack/plugins/discover_enhanced/ui_tests/playwright.config.ts" | ||
KIBANA_DIR="$KIBANA_BUILD_LOCATION" | ||
|
||
declare -A TESTS=( | ||
["Stateful"]="--stateful" | ||
["Serverless Elasticsearch"]="--serverless=es" | ||
["Serverless Observability"]="--serverless=oblt" | ||
["Serverless Security"]="--serverless=security" | ||
) | ||
|
||
ORDER=("Stateful" "Serverless Elasticsearch" "Serverless Observability" "Serverless Security") | ||
|
||
EXIT_CODE=0 | ||
|
||
for TEST_NAME in "${ORDER[@]}"; do | ||
RUN_MODE="${TESTS[$TEST_NAME]}" | ||
echo "--- $TEST_NAME: 'discover_enhanced' plugin UI Tests" | ||
if ! node scripts/scout run-tests "$RUN_MODE" --config "$TEST_CONFIG" --kibana-install-dir "$KIBANA_DIR"; then | ||
echo "$TEST_NAME: failed" | ||
EXIT_CODE=1 | ||
else | ||
echo "$TEST_NAME: passed" | ||
fi | ||
done | ||
|
||
exit $EXIT_CODE |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -80,6 +80,11 @@ export const defaultConfig: ScoutLoaderConfig = { | |
'xpack.security.authc.realms.jwt.jwt1.order=-98', | ||
`xpack.security.authc.realms.jwt.jwt1.pkc_jwkset_path=${getDockerFileMountPath(JWKS_PATH)}`, | ||
`xpack.security.authc.realms.jwt.jwt1.token_type=access_token`, | ||
'serverless.indices.validate_dot_prefixes=true', | ||
// controller cluster-settings | ||
`cluster.service.slow_task_logging_threshold=15s`, | ||
`cluster.service.slow_task_thread_dump_timeout=5s`, | ||
`serverless.search.enable_replicas_for_instant_failover=true`, | ||
], | ||
ssl: true, // SSL is required for SAML realm | ||
}, | ||
|
@@ -136,7 +141,15 @@ export const defaultConfig: ScoutLoaderConfig = { | |
// This ensures that we register the Security SAML API endpoints. | ||
// In the real world the SAML config is injected by control plane. | ||
`--plugin-path=${SAML_IDP_PLUGIN_PATH}`, | ||
'--xpack.cloud.base_url=https://fake-cloud.elastic.co', | ||
'--xpack.cloud.billing_url=/billing/overview/', | ||
'--xpack.cloud.deployments_url=/deployments', | ||
'--xpack.cloud.id=ftr_fake_cloud_id', | ||
'--xpack.cloud.organization_url=/account/', | ||
'--xpack.cloud.profile_url=/user/settings/', | ||
'--xpack.cloud.projects_url=/projects/', | ||
'--xpack.cloud.serverless.project_id=fakeprojectid', | ||
'--xpack.cloud.users_and_roles_url=/account/members/', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I copied missing arguments from FTR svl config |
||
// Ensure that SAML is used as the default authentication method whenever a user navigates to Kibana. In other | ||
// words, Kibana should attempt to authenticate the user using the provider with the lowest order if the Login | ||
// Selector is disabled (which is how Serverless Kibana is configured). By declaring `cloud-basic` with a higher | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the "Elastic License | ||
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side | ||
* Public License v 1"; you may not use this file except in compliance with, at | ||
* your election, the "Elastic License 2.0", the "GNU Affero General Public | ||
* License v3.0 only", or the "Server Side Public License, v 1". | ||
*/ | ||
|
||
import { test as base } from '@playwright/test'; | ||
import { tags } from '../../tags'; | ||
|
||
const supportedTags = tags.DEPLOYMENT_AGNOSTIC; | ||
|
||
export const validateTagsFixture = base.extend<{ validateTags: void }>({ | ||
validateTags: [ | ||
async ({}, use, testInfo) => { | ||
if (testInfo.tags.length === 0) { | ||
throw new Error(`At least one tag is required: ${supportedTags.join(', ')}`); | ||
} | ||
|
||
const invalidTags = testInfo.tags.filter((tag: string) => !supportedTags.includes(tag)); | ||
if (invalidTags.length > 0) { | ||
throw new Error( | ||
`Unsupported tag(s) found in test suite "${testInfo.title}": ${invalidTags.join( | ||
', ' | ||
)}. ` + `Supported tags are: ${supportedTags.join(', ')}.` | ||
); | ||
} | ||
|
||
await use(); | ||
}, | ||
{ auto: true }, | ||
], | ||
}); | ||
Comment on lines
+15
to
+35
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The goal: notify test author about requirement of tags definition and validating its correctness. I also introduces aliases through Note: it only work when you run tests in IDE; when you run tests via That said, for CI we will need to come up with some script to validate tags being defined. But I still believe there is a benefit of raising error during test development process There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -18,12 +18,14 @@ import { loadServersConfig } from '../../config'; | |
import { silence } from '../../common'; | ||
import { RunTestsOptions } from './flags'; | ||
import { getExtraKbnOpts } from '../../servers/run_kibana_server'; | ||
import { getPlaywrightGrepTag } from '../utils'; | ||
|
||
export async function runTests(log: ToolingLog, options: RunTestsOptions) { | ||
const runStartTime = Date.now(); | ||
const reportTime = getTimeReporter(log, 'scripts/scout_test'); | ||
const reportTime = getTimeReporter(log, 'scripts/scout run-tests'); | ||
|
||
const config = await loadServersConfig(options.mode, log); | ||
const playwrightGrepTag = getPlaywrightGrepTag(config); | ||
const playwrightConfigPath = options.configPath; | ||
|
||
await withProcRunner(log, async (procs) => { | ||
|
@@ -59,7 +61,12 @@ export async function runTests(log: ToolingLog, options: RunTestsOptions) { | |
// Running 'npx playwright test --config=${playwrightConfigPath}' | ||
await procs.run(`playwright`, { | ||
cmd: resolve(REPO_ROOT, './node_modules/.bin/playwright'), | ||
args: ['test', `--config=${playwrightConfigPath}`, ...(options.headed ? ['--headed'] : [])], | ||
args: [ | ||
'test', | ||
`--config=${playwrightConfigPath}`, | ||
`--grep=${playwrightGrepTag}`, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Passing one of |
||
...(options.headed ? ['--headed'] : []), | ||
], | ||
cwd: resolve(REPO_ROOT), | ||
env: { | ||
...process.env, | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the "Elastic License | ||
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side | ||
* Public License v 1"; you may not use this file except in compliance with, at | ||
* your election, the "Elastic License 2.0", the "GNU Affero General Public | ||
* License v3.0 only", or the "Server Side Public License, v 1". | ||
*/ | ||
|
||
const SERVERLESS_ONLY = ['@svlSecurity', '@svlOblt', '@svlSearch']; | ||
const ESS_ONLY = ['@ess']; | ||
const DEPLOYMENT_AGNOSTIC = SERVERLESS_ONLY.concat(ESS_ONLY); | ||
|
||
export const tags = { | ||
ESS_ONLY, | ||
SERVERLESS_ONLY, | ||
DEPLOYMENT_AGNOSTIC, | ||
}; | ||
|
||
export const tagsByMode = { | ||
stateful: '@ess', | ||
serverless: { | ||
es: '@svlSearch', | ||
oblt: '@svlOblt', | ||
security: '@svlSecurity', | ||
}, | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,10 +5,10 @@ | |
* 2.0. | ||
*/ | ||
|
||
import { expect } from '@kbn/scout'; | ||
import { expect, tags } from '@kbn/scout'; | ||
import { test, testData } from '../fixtures'; | ||
|
||
test.describe('Discover app - errors', { tag: ['@ess'] }, () => { | ||
test.describe('Discover app - errors', { tag: tags.ESS_ONLY }, () => { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. alias to simplify the process and avoid spelling/incorrect tagging issues |
||
test.beforeAll(async ({ esArchiver, kbnClient, uiSettings }) => { | ||
await kbnClient.savedObjects.clean({ types: ['search', 'index-pattern'] }); | ||
await esArchiver.loadIfNeeded(testData.ES_ARCHIVES.LOGSTASH); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ci:scout-ui-tests
, later we can addci:scout-api-tests
, wdyt?