diff --git a/.buildkite/pipeline-utils/buildkite/emitPipeline.ts b/.buildkite/pipeline-utils/buildkite/emitPipeline.ts new file mode 100644 index 0000000000000..b0f12075eee79 --- /dev/null +++ b/.buildkite/pipeline-utils/buildkite/emitPipeline.ts @@ -0,0 +1,13 @@ +/* + * 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". + */ + +export function emitPipeline(pipelineSteps: string[]) { + const pipelineStr = [...new Set(pipelineSteps)].join('\n'); + console.log(pipelineStr); +} diff --git a/.buildkite/pipeline-utils/buildkite/index.ts b/.buildkite/pipeline-utils/buildkite/index.ts index fbfdea985e92b..3e99ee03f3f2e 100644 --- a/.buildkite/pipeline-utils/buildkite/index.ts +++ b/.buildkite/pipeline-utils/buildkite/index.ts @@ -9,3 +9,4 @@ export * from './client'; export * from './types'; +export * from './emitPipeline'; diff --git a/.buildkite/pipelines/on_merge_unsupported_ftrs.yml b/.buildkite/pipelines/on_merge_unsupported_ftrs.yml index c7ac27e032bd8..6e28eb10356d3 100644 --- a/.buildkite/pipelines/on_merge_unsupported_ftrs.yml +++ b/.buildkite/pipelines/on_merge_unsupported_ftrs.yml @@ -37,6 +37,8 @@ steps: machineType: n2-standard-4 preemptible: true depends_on: build + env: + PING_SLACK_TEAM: "@obs-ux-infra_services-team" timeout_in_minutes: 120 retry: automatic: @@ -54,6 +56,8 @@ steps: machineType: n2-standard-4 preemptible: true depends_on: build + env: + PING_SLACK_TEAM: "@obs-ux-infra_services-team" timeout_in_minutes: 120 retry: automatic: diff --git a/.buildkite/scripts/lifecycle/post_command.sh b/.buildkite/scripts/lifecycle/post_command.sh index f90a4b451be1f..4d8217a4a284a 100755 --- a/.buildkite/scripts/lifecycle/post_command.sh +++ b/.buildkite/scripts/lifecycle/post_command.sh @@ -52,4 +52,12 @@ if [[ "$IS_TEST_EXECUTION_STEP" == "true" ]]; then buildkite-agent artifact upload 'target/test_failures/**/*' ts-node .buildkite/scripts/lifecycle/annotate_test_failures.ts fi + fi + +if [[ $BUILDKITE_COMMAND_EXIT_STATUS -ne 0 ]]; then + # If the slack team environment variable is set, ping the team in slack + if [ -n "${PING_SLACK_TEAM:-}" ]; then + buildkite-agent meta-data set 'slack:ping_team:body' "${PING_SLACK_TEAM}, can you please take a look at the test failures?" + fi +fi \ No newline at end of file diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index 5f4ac3bc8d3bb..43831b3f6f60a 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -7,9 +7,22 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +/* eslint "no-restricted-syntax": [ + "error", + { + "selector": "CallExpression[callee.object.name='console'][callee.property.name!=/^(warn|error)$/]", + "message": "Debug logging to stdout in this file will attempt to upload the log message as yaml to buildkite, which might result in pipeline syntax error. Use emitPipeline() to upload steps, or log to stderr." + } + ] */ + import fs from 'fs'; import prConfigs from '../../../pull_requests.json'; -import { areChangesSkippable, doAnyChangesMatch, getAgentImageConfig } from '#pipeline-utils'; +import { + areChangesSkippable, + doAnyChangesMatch, + getAgentImageConfig, + emitPipeline, +} from '#pipeline-utils'; const prConfig = prConfigs.jobs.find((job) => job.pipelineSlug === 'kibana-pull-request'); const emptyStep = `steps: []`; @@ -35,7 +48,7 @@ const getPipeline = (filename: string, removeSteps = true) => { const skippable = await areChangesSkippable(SKIPPABLE_PR_MATCHERS, REQUIRED_PATHS); if (skippable) { - console.log(emptyStep); + emitPipeline([emptyStep]); return; } @@ -44,8 +57,8 @@ const getPipeline = (filename: string, removeSteps = true) => { const onlyRunQuickChecks = await areChangesSkippable([/^renovate\.json$/], REQUIRED_PATHS); if (onlyRunQuickChecks) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/renovate.yml', false)); - - console.log([...new Set(pipeline)].join('\n')); + console.warn('Isolated changes to renovate.json. Skipping main PR pipeline.'); + emitPipeline(pipeline); return; } @@ -325,8 +338,7 @@ const getPipeline = (filename: string, removeSteps = true) => { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/post_build.yml')); - // remove duplicated steps - console.log([...new Set(pipeline)].join('\n')); + emitPipeline(pipeline); } catch (ex) { console.error('Error while generating the pipeline steps: ' + ex.message, ex); process.exit(1); diff --git a/docs/user/dashboard/create-visualizations.asciidoc b/docs/user/dashboard/create-visualizations.asciidoc index 815f46d5711eb..a1bd7e2db3285 100644 --- a/docs/user/dashboard/create-visualizations.asciidoc +++ b/docs/user/dashboard/create-visualizations.asciidoc @@ -33,6 +33,7 @@ Use one of the editors to create visualizations of your data. Each editor offers | <> | Personalize your dashboard with custom images + | <> | Add links to other dashboards or to external websites @@ -278,7 +279,14 @@ For detailed information about writing on GitHub, click *Help* on the top-right [[add-image]] == Image panels -To personalize your dashboards, add your own logos and graphics with the *Image* panel. You can upload images from your computer, select previously uploaded images, or add images from an external link. +To personalize your dashboards, add your own logos and graphics with the *Image* panel. + +[IMPORTANT] +==== +Image uploads are limited to 10 MiB. +==== + +You can upload images from your computer, select previously uploaded images, or add images from an external link. . From your dashboard, select *Add panel*. @@ -292,7 +300,6 @@ image::images/dashboard_addImageEditor_8.7.0.png[Add image editor] To manage your uploaded image files, go to the *Files* management page using the navigation menu or the <>. - [WARNING] ============================================================================ When you export a dashboard, the uploaded image files are not exported.