From 5eb72ea60b4a2b5b758a78f81be45f3555c6e9dc Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 24 May 2021 17:23:37 -0400 Subject: [PATCH 01/19] [CI] Buildkite support with Baseline pipeline --- .buildkite/agents.json | 76 +++++++++++++++++++ .buildkite/baseline.yml | 29 +++++++ .buildkite/hooks/post-command | 7 ++ .buildkite/hooks/pre-command | 56 ++++++++++++++ .buildkite/scripts/bootstrap.sh | 24 ++++++ .buildkite/scripts/build_kibana.sh | 16 ++++ .buildkite/scripts/build_kibana_plugins.sh | 32 ++++++++ .../scripts/download_build_artifacts.sh | 19 +++++ .buildkite/scripts/env.sh | 76 +++++++++++++++++++ .buildkite/scripts/jobs/baseline.sh | 11 +++ .../scripts/jobs/baseline_public_api_docs.sh | 8 ++ .buildkite/scripts/jobs/baseline_ts_refs.sh | 10 +++ .buildkite/scripts/packer_cache.sh | 8 ++ .buildkite/scripts/post_build_kibana.sh | 18 +++++ .../scripts/saved_object_field_metrics.sh | 13 ++++ .buildkite/scripts/setup.sh | 27 +++++++ .buildkite/scripts/setup_node.sh | 48 ++++++++++++ .buildkite/scripts/util.sh | 49 ++++++++++++ .buildkite/setup/ci_stats.js | 59 ++++++++++++++ .buildkite/setup/ci_stats_complete.js | 17 +++++ .buildkite/setup/commit_status_end.sh | 14 ++++ .buildkite/setup/commit_status_start.sh | 9 +++ .buildkite/setup/post_build.sh | 10 +++ .buildkite/setup/pre_build.sh | 10 +++ .buildkite/setup/setup_ci_stats.js | 30 ++++++++ .../kbn-optimizer/src/optimizer/cache_keys.ts | 4 + .../src/optimizer/get_changes.test.ts | 3 + .../src/optimizer/get_changes.ts | 8 +- .../functional_test_runner.ts | 3 + .../kbn-test/src/functional_tests/tasks.js | 2 + packages/kbn-test/src/report_path.ts | 8 +- src/dev/build/lib/version_info.ts | 5 +- x-pack/tasks/helpers/git_info.ts | 9 +++ 33 files changed, 715 insertions(+), 3 deletions(-) create mode 100644 .buildkite/agents.json create mode 100644 .buildkite/baseline.yml create mode 100644 .buildkite/hooks/post-command create mode 100644 .buildkite/hooks/pre-command create mode 100755 .buildkite/scripts/bootstrap.sh create mode 100755 .buildkite/scripts/build_kibana.sh create mode 100644 .buildkite/scripts/build_kibana_plugins.sh create mode 100755 .buildkite/scripts/download_build_artifacts.sh create mode 100755 .buildkite/scripts/env.sh create mode 100755 .buildkite/scripts/jobs/baseline.sh create mode 100755 .buildkite/scripts/jobs/baseline_public_api_docs.sh create mode 100755 .buildkite/scripts/jobs/baseline_ts_refs.sh create mode 100755 .buildkite/scripts/packer_cache.sh create mode 100755 .buildkite/scripts/post_build_kibana.sh create mode 100755 .buildkite/scripts/saved_object_field_metrics.sh create mode 100755 .buildkite/scripts/setup.sh create mode 100755 .buildkite/scripts/setup_node.sh create mode 100755 .buildkite/scripts/util.sh create mode 100644 .buildkite/setup/ci_stats.js create mode 100644 .buildkite/setup/ci_stats_complete.js create mode 100755 .buildkite/setup/commit_status_end.sh create mode 100755 .buildkite/setup/commit_status_start.sh create mode 100755 .buildkite/setup/post_build.sh create mode 100755 .buildkite/setup/pre_build.sh create mode 100644 .buildkite/setup/setup_ci_stats.js diff --git a/.buildkite/agents.json b/.buildkite/agents.json new file mode 100644 index 00000000000000..d5db77016cdeff --- /dev/null +++ b/.buildkite/agents.json @@ -0,0 +1,76 @@ +{ + "gcp": { + "project": "elastic-kibana-ci", + "zones": ["us-central1-a", "us-central1-b", "us-central1-c", "us-central1-f"], + "serviceAccount": "elastic-buildkite-agent@elastic-kibana-ci.iam.gserviceaccount.com", + "imageFamily": "kb-ubuntu", + "diskType": "pd-ssd", + "diskSizeGb": 75, + "overprovision": 0, + "minimumAgents": 0, + "maximumAgents": 50, + "gracefulStopAfterMins": 360, + "hardStopAfterMins": 540, + "idleTimeoutMins": 10, + "exitAfterOneJob": false, + + "agents": [ + { + "queue": "default", + "name": "kb-default", + "minimumAgents": 1, + "maximumAgents": 100, + "idleTimeoutMins": 60, + "machineType": "e2-small" + }, + { + "queue": "baseline", + "name": "kb-baseline", + "machineType": "c2-standard-8", + "diskSizeGb": 128 + }, + { + "queue": "baseline-small", + "name": "kb-baseline-small", + "machineType": "c2-standard-4" + }, + { + "queue": "jest", + "name": "kb-jest", + "machineType": "n2-standard-2", + "diskSizeGb": 128 + }, + { + "queue": "ci-group", + "name": "kb-cigroup", + "machineType": "n2-standard-8", + "diskSizeGb": 256 + }, + { + "queue": "ci-group-4", + "name": "kb-cigroup-4", + "machineType": "n2-standard-4", + "diskSizeGb": 128 + }, + { + "queue": "ci-group-4d", + "name": "kb-cigroup-4d", + "machineType": "n2d-standard-4", + "diskSizeGb": 128 + }, + { + "queue": "ci-group-6", + "name": "kb-cigroup-6", + "machineType": "n2-custom-6-16384", + "diskSizeGb": 128 + }, + { + "queue": "packer", + "name": "kb-packer", + "serviceAccount": "buildkite-packer-agent@elastic-kibana-184716.iam.gserviceaccount.com", + "maximumAgents": 10, + "machineType": "e2-small" + } + ] + } +} diff --git a/.buildkite/baseline.yml b/.buildkite/baseline.yml new file mode 100644 index 00000000000000..4cb4e1b522c347 --- /dev/null +++ b/.buildkite/baseline.yml @@ -0,0 +1,29 @@ +env: + GITHUB_COMMIT_STATUS_ENABLED: 'true' + GITHUB_COMMIT_STATUS_CONTEXT: 'buildkite/kibana-ci-baseline' +steps: + - command: .buildkite/setup/pre_build.sh + label: Pre-Build + + - wait + + - command: .buildkite/scripts/jobs/baseline.sh + label: Default Build and Metrics + agents: + queue: baseline + + - command: .buildkite/scripts/jobs/baseline_ts_refs.sh + label: Build TS Refs + agents: + queue: baseline-small + + - command: .buildkite/scripts/jobs/baseline_public_api_docs.sh + label: Check Public API Docs + agents: + queue: baseline-small + + - wait: ~ + continue_on_failure: true + + - command: .buildkite/setup/post_build.sh + label: Post-Build diff --git a/.buildkite/hooks/post-command b/.buildkite/hooks/post-command new file mode 100644 index 00000000000000..89630a874bbd71 --- /dev/null +++ b/.buildkite/hooks/post-command @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if [[ "$BUILDKITE_COMMAND_EXIT_STATUS" != "0" ]]; then + buildkite-agent meta-data set build_failed true +fi diff --git a/.buildkite/hooks/pre-command b/.buildkite/hooks/pre-command new file mode 100644 index 00000000000000..c4234209fd8522 --- /dev/null +++ b/.buildkite/hooks/pre-command @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +set -euo pipefail + +CI_STATS_BUILD_ID="$(buildkite-agent meta-data get ci_stats_build_id --default '')" +export CI_STATS_BUILD_ID + +if [[ "${ES_SNAPSHOT_MANIFEST:-}" ]]; then +cat << EOF | buildkite-agent annotate --style "info" --context es-snapshot-manifest + This build is running using a custom Elasticsearch snapshot. + + ES Snapshot Manifest: $ES_SNAPSHOT_MANIFEST + + To use this locally, simply prefix your commands with: + + \`\`\` + ES_SNAPSHOT_MANIFEST="$ES_SNAPSHOT_MANIFEST" + \`\`\` + + e.g. + + \`\`\` + ES_SNAPSHOT_MANIFEST="$ES_SNAPSHOT_MANIFEST" node scripts/functional_tests_server.js + \`\`\` +EOF +fi + +ES_SNAPSHOT_MANIFEST=${ES_SNAPSHOT_MANIFEST:-$(buildkite-agent meta-data get ES_SNAPSHOT_MANIFEST --default '')} +export ES_SNAPSHOT_MANIFEST + +if [[ "$CI_STATS_BUILD_ID" ]]; then + echo "CI Stats Build ID: $CI_STATS_BUILD_ID" + + CI_STATS_TOKEN="$(vault read -field=api_token secret/kibana-issues/dev/kibana_ci_stats)" + export CI_STATS_TOKEN + + CI_STATS_HOST="$(vault read -field=api_host secret/kibana-issues/dev/kibana_ci_stats)" + export CI_STATS_HOST + + KIBANA_CI_STATS_CONFIG=$(jq -n \ + --arg buildId "$CI_STATS_BUILD_ID" \ + --arg apiUrl "https://$CI_STATS_HOST" \ + --arg apiToken "$CI_STATS_TOKEN" \ + '{buildId: $buildId, apiUrl: $apiUrl, apiToken: $apiToken}' \ + ) + export KIBANA_CI_STATS_CONFIG +fi + +GITHUB_TOKEN=$(vault read -field=github_token secret/kibana-issues/dev/kibanamachine) +export GITHUB_TOKEN + +if [[ "${SKIP_CI_SETUP:-}" != "true" ]]; then + if [[ -d .buildkite/scripts && "${BUILDKITE_COMMAND:-}" != "buildkite-agent pipeline upload"* ]]; then + source .buildkite/scripts/setup.sh + fi +fi diff --git a/.buildkite/scripts/bootstrap.sh b/.buildkite/scripts/bootstrap.sh new file mode 100755 index 00000000000000..26a9fc2cde1f3c --- /dev/null +++ b/.buildkite/scripts/bootstrap.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source "$(dirname "${0}")/util.sh" + +if [[ ! -f "target/.bootstrap-cache" ]]; then + echo "--- yarn install and bootstrap" + yarn kbn bootstrap --verbose + + ### + ### upload ts-refs-cache artifacts as quickly as possible so they are available for download + ### + if [[ "${BUILD_TS_REFS_CACHE_CAPTURE:-}" == "true" ]]; then + echo "--- Upload ts-refs-cache" + cd "$KIBANA_DIR/target/ts_refs_cache" + gsutil cp "*.zip" 'gs://kibana-ci-ts-refs-cache/' + cd "$KIBANA_DIR" + fi + + if [[ "$DISABLE_BOOTSTRAP_VALIDATION" != "true" ]]; then + verify_no_git_changes 'yarn kbn bootstrap' + fi +fi diff --git a/.buildkite/scripts/build_kibana.sh b/.buildkite/scripts/build_kibana.sh new file mode 100755 index 00000000000000..19dbbcb025fb97 --- /dev/null +++ b/.buildkite/scripts/build_kibana.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -euo pipefail + +export KBN_NP_PLUGINS_BUILT=true + +echo "--- Build Kibana Distribution" +node scripts/build --debug --no-oss + +echo "--- Archive Kibana Distribution" +linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')" +installDir="$KIBANA_DIR/install/kibana" +mkdir -p "$installDir" +tar -xzf "$linuxBuild" -C "$installDir" --strip=1 +mkdir -p "$KIBANA_BUILD_LOCATION" +cp -pR install/kibana/. "$KIBANA_BUILD_LOCATION/" diff --git a/.buildkite/scripts/build_kibana_plugins.sh b/.buildkite/scripts/build_kibana_plugins.sh new file mode 100644 index 00000000000000..f4d82699ef92d1 --- /dev/null +++ b/.buildkite/scripts/build_kibana_plugins.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +set -euo pipefail + +echo "--- Build Platform Plugins" +node scripts/build_kibana_platform_plugins \ + --scan-dir "$KIBANA_DIR/test/plugin_functional/plugins" \ + --scan-dir "$KIBANA_DIR/test/interpreter_functional/plugins" \ + --scan-dir "$KIBANA_DIR/test/common/fixtures/plugins" \ + --scan-dir "$KIBANA_DIR/examples" \ + --scan-dir "$KIBANA_DIR/test/plugin_functional/plugins" \ + --scan-dir "$KIBANA_DIR/test/common/fixtures/plugins" \ + --scan-dir "$XPACK_DIR/test/plugin_functional/plugins" \ + --scan-dir "$XPACK_DIR/test/functional_with_es_ssl/fixtures/plugins" \ + --scan-dir "$XPACK_DIR/test/alerting_api_integration/plugins" \ + --scan-dir "$XPACK_DIR/test/plugin_api_integration/plugins" \ + --scan-dir "$XPACK_DIR/test/plugin_api_perf/plugins" \ + --scan-dir "$XPACK_DIR/test/licensing_plugin/plugins" \ + --scan-dir "$XPACK_DIR/test/usage_collection/plugins" \ + --scan-dir "$XPACK_DIR/test/security_functional/fixtures/common" \ + --scan-dir "$XPACK_DIR/examples" \ + --verbose + +echo "--- Archive built plugins" +shopt -s globstar +tar -zcf \ + target/kibana-default-plugins.tar.gz \ + x-pack/plugins/**/target/public \ + x-pack/test/**/target/public \ + examples/**/target/public \ + x-pack/examples/**/target/public \ + test/**/target/public diff --git a/.buildkite/scripts/download_build_artifacts.sh b/.buildkite/scripts/download_build_artifacts.sh new file mode 100755 index 00000000000000..6a6b7246753f66 --- /dev/null +++ b/.buildkite/scripts/download_build_artifacts.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if [[ ! -d "$KIBANA_BUILD_LOCATION/bin" ]]; then + echo '--- Downloading Distribution and Plugin artifacts' + + cd "$WORKSPACE" + + buildkite-agent artifact download kibana-default.tar.gz . + buildkite-agent artifact download kibana-default-plugins.tar.gz . + + mkdir -p "$KIBANA_BUILD_LOCATION" + tar -xzf kibana-default.tar.gz -C "$KIBANA_BUILD_LOCATION" --strip=1 + + cd "$KIBANA_DIR" + + tar -xzf ../kibana-default-plugins.tar.gz +fi diff --git a/.buildkite/scripts/env.sh b/.buildkite/scripts/env.sh new file mode 100755 index 00000000000000..f750ec49df3dca --- /dev/null +++ b/.buildkite/scripts/env.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source .buildkite/scripts/util.sh + +export CI=true + +KIBANA_DIR=$(pwd) +export KIBANA_DIR +export XPACK_DIR="$KIBANA_DIR/x-pack" + +export CACHE_DIR="$HOME/.kibana" +PARENT_DIR="$(cd "$KIBANA_DIR/.."; pwd)" +export PARENT_DIR +export WORKSPACE="${WORKSPACE:-$PARENT_DIR}" + +KIBANA_PKG_BRANCH="$(jq -r .branch "$KIBANA_DIR/package.json")" +export KIBANA_PKG_BRANCH +export KIBANA_BASE_BRANCH="$KIBANA_PKG_BRANCH" + +export GECKODRIVER_CDNURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" +export CHROMEDRIVER_CDNURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" +export RE2_DOWNLOAD_MIRROR="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" +export CYPRESS_DOWNLOAD_MIRROR="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/cypress" + +export NODE_OPTIONS="--max-old-space-size=4096" + +export FORCE_COLOR=1 +export TEST_BROWSER_HEADLESS=1 + +export ELASTIC_APM_ENVIRONMENT=ci +export ELASTIC_APM_TRANSACTION_SAMPLE_RATE=0.1 + +CI_REPORTING_ENABLED=false # TODO enable when ready, only controls checks reporter and APM + +if is_pr; then + export ELASTIC_APM_ACTIVE=false + export CHECKS_REPORTER_ACTIVE="${CI_REPORTING_ENABLED-}" + + # These can be removed once we're not supporting Jenkins and Buildkite at the same time + # These are primarily used by github checks reporter and can be configured via /github_checks_api.json + export ghprbGhRepository="elastic/kibana" + export ghprbActualCommit="$BUILDKITE_COMMIT" + export BUILD_URL="$BUILDKITE_BUILD_URL" + + # set_git_merge_base # TODO for PRs +else + export ELASTIC_APM_ACTIVE="${CI_REPORTING_ENABLED-}" + export CHECKS_REPORTER_ACTIVE=false +fi + +export FLEET_PACKAGE_REGISTRY_PORT=6104 +export TEST_CORS_SERVER_PORT=6105 + +export DETECT_CHROMEDRIVER_VERSION=true +export CHROMEDRIVER_FORCE_DOWNLOAD=true + +export GCS_UPLOAD_PREFIX=FAKE_UPLOAD_PREFIX # TODO remove the need for this + +export KIBANA_BUILD_LOCATION="$WORKSPACE/kibana-build-xpack" + +if [[ "${BUILD_TS_REFS_CACHE_ENABLE:-}" != "true" ]]; then + export BUILD_TS_REFS_CACHE_ENABLE=false +fi + +export BUILD_TS_REFS_DISABLE=true +export DISABLE_BOOTSTRAP_VALIDATION=true + +export TEST_KIBANA_HOST=localhost +export TEST_KIBANA_PORT=6101 +export TEST_KIBANA_URL="http://elastic:changeme@localhost:6101" +export TEST_ES_URL="http://elastic:changeme@localhost:6102" +export TEST_ES_TRANSPORT_PORT=6103 +export TEST_CORS_SERVER_PORT=6106 +export ALERTING_PROXY_PORT=6105 diff --git a/.buildkite/scripts/jobs/baseline.sh b/.buildkite/scripts/jobs/baseline.sh new file mode 100755 index 00000000000000..fdf06981ab568e --- /dev/null +++ b/.buildkite/scripts/jobs/baseline.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -euo pipefail + +export DISABLE_BOOTSTRAP_VALIDATION=true +export BUILD_TS_REFS_DISABLE=true + +.buildkite/scripts/bootstrap.sh +.buildkite/scripts/build_kibana.sh +.buildkite/scripts/post_build_kibana.sh +.buildkite/scripts/saved_object_field_metrics.sh diff --git a/.buildkite/scripts/jobs/baseline_public_api_docs.sh b/.buildkite/scripts/jobs/baseline_public_api_docs.sh new file mode 100755 index 00000000000000..e6c6d532670da0 --- /dev/null +++ b/.buildkite/scripts/jobs/baseline_public_api_docs.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -euo pipefail + +.buildkite/scripts/bootstrap.sh + +echo "--- Build API Docs" +node scripts/build_api_docs diff --git a/.buildkite/scripts/jobs/baseline_ts_refs.sh b/.buildkite/scripts/jobs/baseline_ts_refs.sh new file mode 100755 index 00000000000000..9db72abe4b3682 --- /dev/null +++ b/.buildkite/scripts/jobs/baseline_ts_refs.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -euo pipefail + +export BUILD_TS_REFS_CACHE_ENABLE=true +export BUILD_TS_REFS_CACHE_CAPTURE=true +export DISABLE_BOOTSTRAP_VALIDATION=true +export BUILD_TS_REFS_DISABLE=false + +.buildkite/scripts/bootstrap.sh diff --git a/.buildkite/scripts/packer_cache.sh b/.buildkite/scripts/packer_cache.sh new file mode 100755 index 00000000000000..73ee1b90af9cf4 --- /dev/null +++ b/.buildkite/scripts/packer_cache.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source .buildkite/scripts/env.sh +source .buildkite/scripts/setup_node.sh + +yarn install diff --git a/.buildkite/scripts/post_build_kibana.sh b/.buildkite/scripts/post_build_kibana.sh new file mode 100755 index 00000000000000..a4f8d71b77105b --- /dev/null +++ b/.buildkite/scripts/post_build_kibana.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if [[ ! "${DISABLE_CI_STATS_SHIPPING:-}" ]]; then + echo "--- Ship Kibana Distribution Metrics to CI Stats" + node scripts/ship_ci_stats \ + --metrics target/optimizer_bundle_metrics.json \ + --metrics packages/kbn-ui-shared-deps/target/metrics.json +fi + +echo "--- Upload Build Artifacts" +# Moving to `target/` first will keep `buildkite-agent` from including directories in the artifact name +cd "$KIBANA_DIR/target" +mv kibana-*-linux-x86_64.tar.gz kibana-default.tar.gz +buildkite-agent artifact upload kibana-default.tar.gz +buildkite-agent artifact upload kibana-default-plugins.tar.gz +cd - diff --git a/.buildkite/scripts/saved_object_field_metrics.sh b/.buildkite/scripts/saved_object_field_metrics.sh new file mode 100755 index 00000000000000..8757988c7ce986 --- /dev/null +++ b/.buildkite/scripts/saved_object_field_metrics.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source "$(dirname "${0}")/util.sh" + +echo '--- Default Saved Object Field Metrics' +cd "$XPACK_DIR" +checks-reporter-with-killswitch "Capture Kibana Saved Objects field count metrics" \ + node scripts/functional_tests \ + --debug --bail \ + --kibana-install-dir "$KIBANA_BUILD_LOCATION" \ + --config test/saved_objects_field_count/config.ts diff --git a/.buildkite/scripts/setup.sh b/.buildkite/scripts/setup.sh new file mode 100755 index 00000000000000..1a1190c8a52b0f --- /dev/null +++ b/.buildkite/scripts/setup.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source .buildkite/scripts/env.sh +source .buildkite/scripts/setup_node.sh + +KIBANA_BUILDBUDDY_CI_API_KEY=$(vault read -field=value secret/kibana-issues/dev/kibana-buildbuddy-ci-api-key) +export KIBANA_BUILDBUDDY_CI_API_KEY + +cp "$KIBANA_DIR/src/dev/ci_setup/.bazelrc-ci" "$HOME/.bazelrc" + +### +### append auth token to buildbuddy into "$HOME/.bazelrc"; +### +echo "# Appended by .buildkite/scripts/setup.sh" >> "$HOME/.bazelrc" +echo "build --remote_header=x-buildbuddy-api-key=$KIBANA_BUILDBUDDY_CI_API_KEY" >> "$HOME/.bazelrc" + +### +### remove write permissions on buildbuddy remote cache for prs +### +if [[ "${BUILDKITE_PULL_REQUEST:-}" && "$BUILDKITE_PULL_REQUEST" != "false" ]] ; then + { + echo "# Uploads logs & artifacts without writing to cache" + echo "build --noremote_upload_local_results" + } >> "$HOME/.bazelrc" +fi diff --git a/.buildkite/scripts/setup_node.sh b/.buildkite/scripts/setup_node.sh new file mode 100755 index 00000000000000..b9cc161274dd7a --- /dev/null +++ b/.buildkite/scripts/setup_node.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +set -euo pipefail + +echo "--- Setup Node" + +NODE_VERSION="$(cat "$KIBANA_DIR/.node-version")" +export NODE_VERSION +export NODE_DIR="$CACHE_DIR/node/$NODE_VERSION" +export NODE_BIN_DIR="$NODE_DIR/bin" +export YARN_OFFLINE_CACHE="$CACHE_DIR/yarn-offline-cache" + +if [[ ! -d "$NODE_DIR" ]]; then + hostArch="$(command uname -m)" + case "${hostArch}" in + x86_64 | amd64) nodeArch="x64" ;; + aarch64) nodeArch="arm64" ;; + *) nodeArch="${hostArch}" ;; + esac + + nodeUrl="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$nodeArch.tar.gz" + + echo "node.js v$NODE_VERSION not found at $NODE_DIR, downloading from $nodeUrl" + + mkdir -p "$NODE_DIR" + curl --silent -L "$nodeUrl" | tar -xz -C "$NODE_DIR" --strip-components=1 +else + echo "node.js v$NODE_VERSION already installed to $NODE_DIR, re-using" + ls -alh "$NODE_BIN_DIR" +fi + +export PATH="$NODE_BIN_DIR:$PATH" + + +echo "--- Setup Yarn" + +YARN_VERSION=$(node -e "console.log(String(require('./package.json').engines.yarn || '').replace(/^[^\d]+/,''))") +export YARN_VERSION + +if [[ ! $(which yarn) || $(yarn --version) != "$YARN_VERSION" ]]; then + npm install -g "yarn@^${YARN_VERSION}" +fi + +yarn config set yarn-offline-mirror "$YARN_OFFLINE_CACHE" + +YARN_GLOBAL_BIN=$(yarn global bin) +export YARN_GLOBAL_BIN +export PATH="$PATH:$YARN_GLOBAL_BIN" diff --git a/.buildkite/scripts/util.sh b/.buildkite/scripts/util.sh new file mode 100755 index 00000000000000..f695f1d8ba3fec --- /dev/null +++ b/.buildkite/scripts/util.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +checks-reporter-with-killswitch() { + if [ "$CHECKS_REPORTER_ACTIVE" == "true" ] ; then + yarn run github-checks-reporter "$@" + else + arguments=("$@"); + "${arguments[@]:1}"; + fi +} + +is_pr() { + [[ "${GITHUB_PR_NUMBER-}" ]] && return + false +} + +verify_no_git_changes() { + RED='\033[0;31m' + C_RESET='\033[0m' # Reset color + + GIT_CHANGES="$(git ls-files --modified)" + if [ "$GIT_CHANGES" ]; then + echo -e "\n${RED}ERROR: '$1' caused changes to the following files:${C_RESET}\n" + echo -e "$GIT_CHANGES\n" + exit 1 + fi +} + +docker_run() { + args=() + + if [[ -n "${BUILDKITE_ENV_FILE:-}" ]] ; then + # Read in the env file and convert to --env params for docker + # This is because --env-file doesn't support newlines or quotes per https://docs.docker.com/compose/env-file/#syntax-rules + while read -r var; do + args+=( --env "${var%%=*}" ) + done < "$BUILDKITE_ENV_FILE" + fi + + BUILDKITE_AGENT_BINARY_PATH=$(command -v buildkite-agent) + args+=( + "--env" "BUILDKITE_JOB_ID" + "--env" "BUILDKITE_BUILD_ID" + "--env" "BUILDKITE_AGENT_ACCESS_TOKEN" + "--volume" "$BUILDKITE_AGENT_BINARY_PATH:/usr/bin/buildkite-agent" + ) + + docker run "${args[@]}" "$@" +} diff --git a/.buildkite/setup/ci_stats.js b/.buildkite/setup/ci_stats.js new file mode 100644 index 00000000000000..1e7aec3079ee30 --- /dev/null +++ b/.buildkite/setup/ci_stats.js @@ -0,0 +1,59 @@ +const https = require('https'); +const token = process.env.CI_STATS_TOKEN; +const host = process.env.CI_STATS_HOST; + +const request = (url, options, data = null) => { + const httpOptions = { + ...options, + headers: { + ...(options.headers || {}), + Authorization: `token ${token}`, + }, + }; + + return new Promise((resolve, reject) => { + console.log(`Calling https://${host}${url}`); + + const req = https.request(`https://${host}${url}`, httpOptions, (res) => { + if (res.statusCode < 200 || res.statusCode >= 300) { + return reject(new Error(`Status Code: ${res.statusCode}`)); + } + + const data = []; + res.on('data', (d) => { + data.push(d); + }); + + res.on('end', () => { + try { + let resp = Buffer.concat(data).toString(); + + try { + if (resp.trim()) { + resp = JSON.parse(resp); + } + } catch (ex) { + console.error(ex); + } + + resolve(resp); + } catch (ex) { + reject(ex); + } + }); + }); + + req.on('error', reject); + + if (data) { + req.write(JSON.stringify(data)); + } + + req.end(); + }); +}; + +module.exports = { + get: (url) => request(url, { method: 'GET' }), + post: (url, data) => request(url, { method: 'POST' }, data), +}; diff --git a/.buildkite/setup/ci_stats_complete.js b/.buildkite/setup/ci_stats_complete.js new file mode 100644 index 00000000000000..46aa72aed20243 --- /dev/null +++ b/.buildkite/setup/ci_stats_complete.js @@ -0,0 +1,17 @@ +const ciStats = require('./ci_stats'); + +// TODO - this is okay for now but should really be replaced with an API call, especially once retries are enabled +const BUILD_STATUS = process.env.BUILD_FAILED === 'true' ? 'FAILURE' : 'SUCCESS'; + +(async () => { + try { + if (process.env.CI_STATS_BUILD_ID) { + await ciStats.post(`/v1/build/_complete?id=${process.env.CI_STATS_BUILD_ID}`, { + result: BUILD_STATUS, + }); + } + } catch (ex) { + console.error(ex); + process.exit(1); + } +})(); diff --git a/.buildkite/setup/commit_status_end.sh b/.buildkite/setup/commit_status_end.sh new file mode 100755 index 00000000000000..1766404719632d --- /dev/null +++ b/.buildkite/setup/commit_status_end.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if [[ "${GITHUB_COMMIT_STATUS_ENABLED:-}" == "true" ]]; then + COMMIT_STATUS=success + if [[ "${BUILD_FAILED:-}" == "true" ]]; then + COMMIT_STATUS=failure + fi + + GITHUB_COMMIT_STATUS_CONTEXT=${GITHUB_COMMIT_STATUS_CONTEXT:-"buildkite/$BUILDKITE_PIPELINE_NAME"} + + gh api "repos/elastic/kibana/statuses/$BUILDKITE_COMMIT" -f state="$COMMIT_STATUS" -f target_url="$BUILDKITE_BUILD_URL" -f context="$GITHUB_COMMIT_STATUS_CONTEXT" --silent +fi diff --git a/.buildkite/setup/commit_status_start.sh b/.buildkite/setup/commit_status_start.sh new file mode 100755 index 00000000000000..d7e91dd7e0de5b --- /dev/null +++ b/.buildkite/setup/commit_status_start.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if [[ "${GITHUB_COMMIT_STATUS_ENABLED:-}" == "true" ]]; then + GITHUB_COMMIT_STATUS_CONTEXT=${GITHUB_COMMIT_STATUS_CONTEXT:-"buildkite/$BUILDKITE_PIPELINE_NAME"} + + gh api "repos/elastic/kibana/statuses/$BUILDKITE_COMMIT" -f state=pending -f target_url="$BUILDKITE_BUILD_URL" -f context="$GITHUB_COMMIT_STATUS_CONTEXT" --silent +fi diff --git a/.buildkite/setup/post_build.sh b/.buildkite/setup/post_build.sh new file mode 100755 index 00000000000000..7acc8380d75e0d --- /dev/null +++ b/.buildkite/setup/post_build.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -euo pipefail + +BUILD_FAILED=$(buildkite-agent meta-data get build_failed --default "false") +export BUILD_FAILED + +"$(dirname "${0}")/commit_status_end.sh" + +node "$(dirname "${0}")/ci_stats_complete.js" diff --git a/.buildkite/setup/pre_build.sh b/.buildkite/setup/pre_build.sh new file mode 100755 index 00000000000000..5c3b985e494f25 --- /dev/null +++ b/.buildkite/setup/pre_build.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -euo pipefail + +"$(dirname "${0}")/commit_status_start.sh" + +export CI_STATS_TOKEN="$(vault read -field=api_token secret/kibana-issues/dev/kibana_ci_stats)" +export CI_STATS_HOST="$(vault read -field=api_host secret/kibana-issues/dev/kibana_ci_stats)" + +node "$(dirname "${0}")/setup_ci_stats.js" diff --git a/.buildkite/setup/setup_ci_stats.js b/.buildkite/setup/setup_ci_stats.js new file mode 100644 index 00000000000000..35a1e7030af5f9 --- /dev/null +++ b/.buildkite/setup/setup_ci_stats.js @@ -0,0 +1,30 @@ +const { execSync } = require('child_process'); +const ciStats = require('./ci_stats'); + +(async () => { + try { + const build = await ciStats.post('/v1/build', { + jenkinsJobName: process.env.BUILDKITE_PIPELINE_NAME, + jenkinsJobId: process.env.BUILDKITE_BUILD_ID, + jenkinsUrl: process.env.BUILDKITE_BUILD_URL, + prId: process.env.GITHUB_PR_NUMBER || null, + }); + + execSync(`buildkite-agent meta-data set ci_stats_build_id "${build.id}"`); + + // TODO Will need to set MERGE_BASE for PRs + + await ciStats.post(`/v1/git_info?buildId=${build.id}`, { + branch: process.env.BUILDKITE_BRANCH.replace(/^(refs\/heads\/|origin\/)/, ''), + commit: process.env.BUILDKITE_COMMIT, + targetBranch: + process.env.GITHUB_PR_TARGET_BRANCH || + process.env.BUILDKITE_PULL_REQUEST_BASE_BRANCH || + null, + mergeBase: process.env.GITHUB_PR_MERGE_BASE || null, // TODO confirm GITHUB_PR_MERGE_BASE or switch to final var + }); + } catch (ex) { + console.error(ex); + process.exit(1); + } +})(); diff --git a/packages/kbn-optimizer/src/optimizer/cache_keys.ts b/packages/kbn-optimizer/src/optimizer/cache_keys.ts index 9275cab1fdff0c..e622b3b8f593e3 100644 --- a/packages/kbn-optimizer/src/optimizer/cache_keys.ts +++ b/packages/kbn-optimizer/src/optimizer/cache_keys.ts @@ -121,6 +121,10 @@ export interface OptimizerCacheKey { } async function getLastCommit() { + if (!Fs.existsSync(Path.join(REPO_ROOT, '.git'))) { + return undefined; + } + const { stdout } = await execa( 'git', ['log', '-n', '1', '--pretty=format:%H', '--', RELATIVE_DIR], diff --git a/packages/kbn-optimizer/src/optimizer/get_changes.test.ts b/packages/kbn-optimizer/src/optimizer/get_changes.test.ts index 4d4a902bb186a6..d8be1917c101bd 100644 --- a/packages/kbn-optimizer/src/optimizer/get_changes.test.ts +++ b/packages/kbn-optimizer/src/optimizer/get_changes.test.ts @@ -7,6 +7,7 @@ */ jest.mock('execa'); +jest.mock('fs'); import { getChanges } from './get_changes'; @@ -15,6 +16,8 @@ const execa: jest.Mock = jest.requireMock('execa'); it('parses git ls-files output', async () => { expect.assertions(4); + jest.requireMock('fs').existsSync.mockImplementation(() => true); + execa.mockImplementation((cmd, args, options) => { expect(cmd).toBe('git'); expect(args).toEqual(['ls-files', '-dmt', '--', '/foo/bar/x']); diff --git a/packages/kbn-optimizer/src/optimizer/get_changes.ts b/packages/kbn-optimizer/src/optimizer/get_changes.ts index e5574d9b1a2e47..73fa5e9d931e7b 100644 --- a/packages/kbn-optimizer/src/optimizer/get_changes.ts +++ b/packages/kbn-optimizer/src/optimizer/get_changes.ts @@ -9,6 +9,7 @@ import Path from 'path'; import execa from 'execa'; +import fs from 'fs'; export type Changes = Map; @@ -16,11 +17,16 @@ export type Changes = Map; * get the changes in all the context directories (plugin public paths) */ export async function getChanges(dir: string) { + const changes: Changes = new Map(); + + if (!fs.existsSync(Path.join(dir, '.git'))) { + return changes; + } + const { stdout } = await execa('git', ['ls-files', '-dmt', '--', dir], { cwd: dir, }); - const changes: Changes = new Map(); const output = stdout.trim(); if (output) { diff --git a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts index b5d379d3426e72..a6044cdb5de271 100644 --- a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts +++ b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts @@ -120,6 +120,9 @@ export class FunctionalTestRunner { throw new Error('No tests defined.'); } + // eslint-disable-next-line + console.log(`--- Running ${this.configFile.replace(process.cwd() + '/', '')}`); + const dockerServers = new DockerServersService( config.get('dockerServers'), this.log, diff --git a/packages/kbn-test/src/functional_tests/tasks.js b/packages/kbn-test/src/functional_tests/tasks.js index 02c55b6af91dcc..0741eb8afae616 100644 --- a/packages/kbn-test/src/functional_tests/tasks.js +++ b/packages/kbn-test/src/functional_tests/tasks.js @@ -88,6 +88,8 @@ export async function runTests(options) { continue; } + console.log(`--- Running ${configPath.replace(process.cwd(), '')}`); + await withProcRunner(log, async (procs) => { const config = await readConfigFile(log, configPath); diff --git a/packages/kbn-test/src/report_path.ts b/packages/kbn-test/src/report_path.ts index 9f41fdd41c0616..dcda0f5eb2d3cf 100644 --- a/packages/kbn-test/src/report_path.ts +++ b/packages/kbn-test/src/report_path.ts @@ -16,11 +16,17 @@ export function getUniqueJunitReportPath( reportName: string, counter?: number ): string { + const BUILDKITE_ID_SUFFIX = process.env.BUILDKITE_JOB_ID + ? `-${process.env.BUILDKITE_JOB_ID}` + : ''; + const path = Path.resolve( rootDirectory, 'target/junit', process.env.JOB || '.', - `TEST-${CI_PARALLEL_PROCESS_PREFIX}${reportName}${counter ? `-${counter}` : ''}.xml` + `TEST-${CI_PARALLEL_PROCESS_PREFIX}${reportName}${ + counter ? `-${counter}` : '' + }${BUILDKITE_ID_SUFFIX}.xml` ); return Fs.existsSync(path) diff --git a/src/dev/build/lib/version_info.ts b/src/dev/build/lib/version_info.ts index 01066cdeffc4cf..6be34a54e24f8c 100644 --- a/src/dev/build/lib/version_info.ts +++ b/src/dev/build/lib/version_info.ts @@ -28,7 +28,10 @@ export async function getVersionInfo({ isRelease, versionQualifier, pkg }: Optio ); return { - buildSha: (await execa('git', ['rev-parse', 'HEAD'])).stdout, + buildSha: + process.env.GIT_COMMIT || + process.env.BUILDKITE_COMMIT || + (await execa('git', ['rev-parse', 'HEAD'])).stdout, buildVersion, buildNumber: await getBuildNumber(), }; diff --git a/x-pack/tasks/helpers/git_info.ts b/x-pack/tasks/helpers/git_info.ts index 03d509e71b0d47..17d2b022864199 100644 --- a/x-pack/tasks/helpers/git_info.ts +++ b/x-pack/tasks/helpers/git_info.ts @@ -5,6 +5,7 @@ * 2.0. */ +import fs from 'fs'; import path from 'path'; // @ts-ignore barely used, untyped module import simpleGit from 'simple-git'; @@ -12,6 +13,14 @@ import simpleGit from 'simple-git'; const gitDir = path.resolve(__dirname, '..', '..'); export async function gitInfo() { + if (!fs.existsSync(path.join(gitDir, '.git'))) { + // This info is only used for debugging purposes in the log + // So if .git is not available for some reason, it's fine to output this + return { + number: 1, + sha: process.env.GIT_COMMIT || process.env.BUILDKITE_COMMIT || 'none', + }; + } const git = simpleGit(gitDir); return new Promise<{ number: number; sha: string }>((resolve, reject) => { From d967b5d2ae0774b2cd07c2eee252154607f2f55c Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 25 May 2021 11:15:03 -0400 Subject: [PATCH 02/19] Fix agent configs --- .buildkite/agents.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.buildkite/agents.json b/.buildkite/agents.json index d5db77016cdeff..87469839f27fdf 100644 --- a/.buildkite/agents.json +++ b/.buildkite/agents.json @@ -4,6 +4,8 @@ "zones": ["us-central1-a", "us-central1-b", "us-central1-c", "us-central1-f"], "serviceAccount": "elastic-buildkite-agent@elastic-kibana-ci.iam.gserviceaccount.com", "imageFamily": "kb-ubuntu", + "subnetwork": "buildkite", + "disableExternalIp": true, "diskType": "pd-ssd", "diskSizeGb": 75, "overprovision": 0, @@ -27,12 +29,13 @@ "queue": "baseline", "name": "kb-baseline", "machineType": "c2-standard-8", - "diskSizeGb": 128 + "localSsds": 1 }, { "queue": "baseline-small", "name": "kb-baseline-small", - "machineType": "c2-standard-4" + "machineType": "c2-standard-4", + "localSsds": 1 }, { "queue": "jest", @@ -67,7 +70,7 @@ { "queue": "packer", "name": "kb-packer", - "serviceAccount": "buildkite-packer-agent@elastic-kibana-184716.iam.gserviceaccount.com", + "serviceAccount": "buildkite-packer-agent@elastic-kibana-ci.iam.gserviceaccount.com", "maximumAgents": 10, "machineType": "e2-small" } From 492ff4173030ca3418bd125a82dc1bb335ee5e0a Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 25 May 2021 16:15:34 -0400 Subject: [PATCH 03/19] packer_cache should do bootstrap --- .buildkite/scripts/packer_cache.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/scripts/packer_cache.sh b/.buildkite/scripts/packer_cache.sh index 73ee1b90af9cf4..341a82d55bd5ff 100755 --- a/.buildkite/scripts/packer_cache.sh +++ b/.buildkite/scripts/packer_cache.sh @@ -5,4 +5,4 @@ set -euo pipefail source .buildkite/scripts/env.sh source .buildkite/scripts/setup_node.sh -yarn install +yarn kbn bootstrap From f1d2c708c9751e1b1b063a3dde43dd8b810dec98 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 25 May 2021 16:45:52 -0400 Subject: [PATCH 04/19] WIP re-organize the buildkite scripts --- .buildkite/baseline.yml | 6 +- .buildkite/hooks/pre-command | 55 +++++++++++-------- .buildkite/scripts/bootstrap.sh | 2 - .buildkite/scripts/{ => common}/env.sh | 2 - .../{setup.sh => common/setup_bazel.sh} | 7 +-- .buildkite/scripts/{ => common}/setup_node.sh | 2 - .buildkite/scripts/{ => common}/util.sh | 0 .buildkite/scripts/packer_cache.sh | 4 +- .../scripts/saved_object_field_metrics.sh | 2 - .../scripts/{jobs => steps}/baseline.sh | 0 .../baseline_public_api_docs.sh | 0 .../{jobs => steps}/baseline_ts_refs.sh | 0 12 files changed, 39 insertions(+), 41 deletions(-) rename .buildkite/scripts/{ => common}/env.sh (98%) rename .buildkite/scripts/{setup.sh => common/setup_bazel.sh} (81%) mode change 100755 => 100644 rename .buildkite/scripts/{ => common}/setup_node.sh (98%) rename .buildkite/scripts/{ => common}/util.sh (100%) rename .buildkite/scripts/{jobs => steps}/baseline.sh (100%) rename .buildkite/scripts/{jobs => steps}/baseline_public_api_docs.sh (100%) rename .buildkite/scripts/{jobs => steps}/baseline_ts_refs.sh (100%) diff --git a/.buildkite/baseline.yml b/.buildkite/baseline.yml index 4cb4e1b522c347..691fc61ab83847 100644 --- a/.buildkite/baseline.yml +++ b/.buildkite/baseline.yml @@ -7,17 +7,17 @@ steps: - wait - - command: .buildkite/scripts/jobs/baseline.sh + - command: .buildkite/scripts/steps/baseline.sh label: Default Build and Metrics agents: queue: baseline - - command: .buildkite/scripts/jobs/baseline_ts_refs.sh + - command: .buildkite/scripts/steps/baseline_ts_refs.sh label: Build TS Refs agents: queue: baseline-small - - command: .buildkite/scripts/jobs/baseline_public_api_docs.sh + - command: .buildkite/scripts/steps/baseline_public_api_docs.sh label: Check Public API Docs agents: queue: baseline-small diff --git a/.buildkite/hooks/pre-command b/.buildkite/hooks/pre-command index c4234209fd8522..d9e79d2d3252b5 100644 --- a/.buildkite/hooks/pre-command +++ b/.buildkite/hooks/pre-command @@ -2,11 +2,13 @@ set -euo pipefail -CI_STATS_BUILD_ID="$(buildkite-agent meta-data get ci_stats_build_id --default '')" -export CI_STATS_BUILD_ID +# Set up a custom ES Snapshot Manifest if one has been specified for this build +{ + ES_SNAPSHOT_MANIFEST=${ES_SNAPSHOT_MANIFEST:-$(buildkite-agent meta-data get ES_SNAPSHOT_MANIFEST --default '')} + export ES_SNAPSHOT_MANIFEST -if [[ "${ES_SNAPSHOT_MANIFEST:-}" ]]; then -cat << EOF | buildkite-agent annotate --style "info" --context es-snapshot-manifest + if [[ "${ES_SNAPSHOT_MANIFEST:-}" ]]; then + cat << EOF | buildkite-agent annotate --style "info" --context es-snapshot-manifest This build is running using a custom Elasticsearch snapshot. ES Snapshot Manifest: $ES_SNAPSHOT_MANIFEST @@ -23,34 +25,43 @@ cat << EOF | buildkite-agent annotate --style "info" --context es-snapshot-manif ES_SNAPSHOT_MANIFEST="$ES_SNAPSHOT_MANIFEST" node scripts/functional_tests_server.js \`\`\` EOF -fi + fi +} -ES_SNAPSHOT_MANIFEST=${ES_SNAPSHOT_MANIFEST:-$(buildkite-agent meta-data get ES_SNAPSHOT_MANIFEST --default '')} -export ES_SNAPSHOT_MANIFEST +# Setup CI Stats +{ + CI_STATS_BUILD_ID="$(buildkite-agent meta-data get ci_stats_build_id --default '')" + export CI_STATS_BUILD_ID -if [[ "$CI_STATS_BUILD_ID" ]]; then - echo "CI Stats Build ID: $CI_STATS_BUILD_ID" + if [[ "$CI_STATS_BUILD_ID" ]]; then + echo "CI Stats Build ID: $CI_STATS_BUILD_ID" - CI_STATS_TOKEN="$(vault read -field=api_token secret/kibana-issues/dev/kibana_ci_stats)" - export CI_STATS_TOKEN + CI_STATS_TOKEN="$(vault read -field=api_token secret/kibana-issues/dev/kibana_ci_stats)" + export CI_STATS_TOKEN - CI_STATS_HOST="$(vault read -field=api_host secret/kibana-issues/dev/kibana_ci_stats)" - export CI_STATS_HOST + CI_STATS_HOST="$(vault read -field=api_host secret/kibana-issues/dev/kibana_ci_stats)" + export CI_STATS_HOST - KIBANA_CI_STATS_CONFIG=$(jq -n \ - --arg buildId "$CI_STATS_BUILD_ID" \ - --arg apiUrl "https://$CI_STATS_HOST" \ - --arg apiToken "$CI_STATS_TOKEN" \ - '{buildId: $buildId, apiUrl: $apiUrl, apiToken: $apiToken}' \ - ) - export KIBANA_CI_STATS_CONFIG -fi + KIBANA_CI_STATS_CONFIG=$(jq -n \ + --arg buildId "$CI_STATS_BUILD_ID" \ + --arg apiUrl "https://$CI_STATS_HOST" \ + --arg apiToken "$CI_STATS_TOKEN" \ + '{buildId: $buildId, apiUrl: $apiUrl, apiToken: $apiToken}' \ + ) + export KIBANA_CI_STATS_CONFIG + fi +} GITHUB_TOKEN=$(vault read -field=github_token secret/kibana-issues/dev/kibanamachine) export GITHUB_TOKEN +# By default, all steps should set up these things to get a full environment before running +# It can be skipped for pipeline upload steps though, to make job start time a little faster if [[ "${SKIP_CI_SETUP:-}" != "true" ]]; then if [[ -d .buildkite/scripts && "${BUILDKITE_COMMAND:-}" != "buildkite-agent pipeline upload"* ]]; then - source .buildkite/scripts/setup.sh + source .buildkite/scripts/common/util.sh + source .buildkite/scripts/common/env.sh + source .buildkite/scripts/common/setup_node.sh + source .buildkite/scripts/common/setup_bazel.sh fi fi diff --git a/.buildkite/scripts/bootstrap.sh b/.buildkite/scripts/bootstrap.sh index 26a9fc2cde1f3c..ccf39bd5476107 100755 --- a/.buildkite/scripts/bootstrap.sh +++ b/.buildkite/scripts/bootstrap.sh @@ -2,8 +2,6 @@ set -euo pipefail -source "$(dirname "${0}")/util.sh" - if [[ ! -f "target/.bootstrap-cache" ]]; then echo "--- yarn install and bootstrap" yarn kbn bootstrap --verbose diff --git a/.buildkite/scripts/env.sh b/.buildkite/scripts/common/env.sh similarity index 98% rename from .buildkite/scripts/env.sh rename to .buildkite/scripts/common/env.sh index f750ec49df3dca..b5cf42dd04da85 100755 --- a/.buildkite/scripts/env.sh +++ b/.buildkite/scripts/common/env.sh @@ -2,8 +2,6 @@ set -euo pipefail -source .buildkite/scripts/util.sh - export CI=true KIBANA_DIR=$(pwd) diff --git a/.buildkite/scripts/setup.sh b/.buildkite/scripts/common/setup_bazel.sh old mode 100755 new mode 100644 similarity index 81% rename from .buildkite/scripts/setup.sh rename to .buildkite/scripts/common/setup_bazel.sh index 1a1190c8a52b0f..16ea9a39003535 --- a/.buildkite/scripts/setup.sh +++ b/.buildkite/scripts/common/setup_bazel.sh @@ -1,10 +1,5 @@ #!/usr/bin/env bash -set -euo pipefail - -source .buildkite/scripts/env.sh -source .buildkite/scripts/setup_node.sh - KIBANA_BUILDBUDDY_CI_API_KEY=$(vault read -field=value secret/kibana-issues/dev/kibana-buildbuddy-ci-api-key) export KIBANA_BUILDBUDDY_CI_API_KEY @@ -13,7 +8,7 @@ cp "$KIBANA_DIR/src/dev/ci_setup/.bazelrc-ci" "$HOME/.bazelrc" ### ### append auth token to buildbuddy into "$HOME/.bazelrc"; ### -echo "# Appended by .buildkite/scripts/setup.sh" >> "$HOME/.bazelrc" +echo "# Appended by .buildkite/scripts/setup_bazel.sh" >> "$HOME/.bazelrc" echo "build --remote_header=x-buildbuddy-api-key=$KIBANA_BUILDBUDDY_CI_API_KEY" >> "$HOME/.bazelrc" ### diff --git a/.buildkite/scripts/setup_node.sh b/.buildkite/scripts/common/setup_node.sh similarity index 98% rename from .buildkite/scripts/setup_node.sh rename to .buildkite/scripts/common/setup_node.sh index b9cc161274dd7a..6a81862f2b097d 100755 --- a/.buildkite/scripts/setup_node.sh +++ b/.buildkite/scripts/common/setup_node.sh @@ -1,7 +1,5 @@ #!/usr/bin/env bash -set -euo pipefail - echo "--- Setup Node" NODE_VERSION="$(cat "$KIBANA_DIR/.node-version")" diff --git a/.buildkite/scripts/util.sh b/.buildkite/scripts/common/util.sh similarity index 100% rename from .buildkite/scripts/util.sh rename to .buildkite/scripts/common/util.sh diff --git a/.buildkite/scripts/packer_cache.sh b/.buildkite/scripts/packer_cache.sh index 341a82d55bd5ff..45d3dc439ff4d0 100755 --- a/.buildkite/scripts/packer_cache.sh +++ b/.buildkite/scripts/packer_cache.sh @@ -2,7 +2,7 @@ set -euo pipefail -source .buildkite/scripts/env.sh -source .buildkite/scripts/setup_node.sh +source .buildkite/scripts/common/env.sh +source .buildkite/scripts/common/setup_node.sh yarn kbn bootstrap diff --git a/.buildkite/scripts/saved_object_field_metrics.sh b/.buildkite/scripts/saved_object_field_metrics.sh index 8757988c7ce986..94443556accf7e 100755 --- a/.buildkite/scripts/saved_object_field_metrics.sh +++ b/.buildkite/scripts/saved_object_field_metrics.sh @@ -2,8 +2,6 @@ set -euo pipefail -source "$(dirname "${0}")/util.sh" - echo '--- Default Saved Object Field Metrics' cd "$XPACK_DIR" checks-reporter-with-killswitch "Capture Kibana Saved Objects field count metrics" \ diff --git a/.buildkite/scripts/jobs/baseline.sh b/.buildkite/scripts/steps/baseline.sh similarity index 100% rename from .buildkite/scripts/jobs/baseline.sh rename to .buildkite/scripts/steps/baseline.sh diff --git a/.buildkite/scripts/jobs/baseline_public_api_docs.sh b/.buildkite/scripts/steps/baseline_public_api_docs.sh similarity index 100% rename from .buildkite/scripts/jobs/baseline_public_api_docs.sh rename to .buildkite/scripts/steps/baseline_public_api_docs.sh diff --git a/.buildkite/scripts/jobs/baseline_ts_refs.sh b/.buildkite/scripts/steps/baseline_ts_refs.sh similarity index 100% rename from .buildkite/scripts/jobs/baseline_ts_refs.sh rename to .buildkite/scripts/steps/baseline_ts_refs.sh From 43398d892f99a57a32ded3d74ede28745d2ba93b Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 25 May 2021 17:11:51 -0400 Subject: [PATCH 05/19] setup -> lifecycle --- .buildkite/baseline.yml | 4 ++-- .buildkite/{setup => scripts/lifecycle}/ci_stats.js | 0 .buildkite/{setup => scripts/lifecycle}/ci_stats_complete.js | 0 .buildkite/{setup => scripts/lifecycle}/commit_status_end.sh | 0 .../{setup => scripts/lifecycle}/commit_status_start.sh | 0 .buildkite/{setup => scripts/lifecycle}/post_build.sh | 0 .buildkite/{setup => scripts/lifecycle}/pre_build.sh | 0 .buildkite/{setup => scripts/lifecycle}/setup_ci_stats.js | 0 8 files changed, 2 insertions(+), 2 deletions(-) rename .buildkite/{setup => scripts/lifecycle}/ci_stats.js (100%) rename .buildkite/{setup => scripts/lifecycle}/ci_stats_complete.js (100%) rename .buildkite/{setup => scripts/lifecycle}/commit_status_end.sh (100%) rename .buildkite/{setup => scripts/lifecycle}/commit_status_start.sh (100%) rename .buildkite/{setup => scripts/lifecycle}/post_build.sh (100%) rename .buildkite/{setup => scripts/lifecycle}/pre_build.sh (100%) rename .buildkite/{setup => scripts/lifecycle}/setup_ci_stats.js (100%) diff --git a/.buildkite/baseline.yml b/.buildkite/baseline.yml index 691fc61ab83847..1c09b0d05afdae 100644 --- a/.buildkite/baseline.yml +++ b/.buildkite/baseline.yml @@ -2,7 +2,7 @@ env: GITHUB_COMMIT_STATUS_ENABLED: 'true' GITHUB_COMMIT_STATUS_CONTEXT: 'buildkite/kibana-ci-baseline' steps: - - command: .buildkite/setup/pre_build.sh + - command: .buildkite/scripts/lifecycle/pre_build.sh label: Pre-Build - wait @@ -25,5 +25,5 @@ steps: - wait: ~ continue_on_failure: true - - command: .buildkite/setup/post_build.sh + - command: .buildkite/scripts/lifecycle/post_build.sh label: Post-Build diff --git a/.buildkite/setup/ci_stats.js b/.buildkite/scripts/lifecycle/ci_stats.js similarity index 100% rename from .buildkite/setup/ci_stats.js rename to .buildkite/scripts/lifecycle/ci_stats.js diff --git a/.buildkite/setup/ci_stats_complete.js b/.buildkite/scripts/lifecycle/ci_stats_complete.js similarity index 100% rename from .buildkite/setup/ci_stats_complete.js rename to .buildkite/scripts/lifecycle/ci_stats_complete.js diff --git a/.buildkite/setup/commit_status_end.sh b/.buildkite/scripts/lifecycle/commit_status_end.sh similarity index 100% rename from .buildkite/setup/commit_status_end.sh rename to .buildkite/scripts/lifecycle/commit_status_end.sh diff --git a/.buildkite/setup/commit_status_start.sh b/.buildkite/scripts/lifecycle/commit_status_start.sh similarity index 100% rename from .buildkite/setup/commit_status_start.sh rename to .buildkite/scripts/lifecycle/commit_status_start.sh diff --git a/.buildkite/setup/post_build.sh b/.buildkite/scripts/lifecycle/post_build.sh similarity index 100% rename from .buildkite/setup/post_build.sh rename to .buildkite/scripts/lifecycle/post_build.sh diff --git a/.buildkite/setup/pre_build.sh b/.buildkite/scripts/lifecycle/pre_build.sh similarity index 100% rename from .buildkite/setup/pre_build.sh rename to .buildkite/scripts/lifecycle/pre_build.sh diff --git a/.buildkite/setup/setup_ci_stats.js b/.buildkite/scripts/lifecycle/setup_ci_stats.js similarity index 100% rename from .buildkite/setup/setup_ci_stats.js rename to .buildkite/scripts/lifecycle/setup_ci_stats.js From 3bf2ca054e329aaf578f50967f70e4524a7b70a5 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 25 May 2021 17:12:45 -0400 Subject: [PATCH 06/19] Remove set command --- .buildkite/scripts/common/env.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/.buildkite/scripts/common/env.sh b/.buildkite/scripts/common/env.sh index b5cf42dd04da85..ff09126f60b089 100755 --- a/.buildkite/scripts/common/env.sh +++ b/.buildkite/scripts/common/env.sh @@ -1,7 +1,5 @@ #!/usr/bin/env bash -set -euo pipefail - export CI=true KIBANA_DIR=$(pwd) From 57413fcfc7c7cbfe639eafd60d29e1b8b4c837be Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 25 May 2021 17:14:56 -0400 Subject: [PATCH 07/19] Add buildkite to casing check config --- src/dev/precommit_hook/casing_check_config.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/dev/precommit_hook/casing_check_config.js b/src/dev/precommit_hook/casing_check_config.js index 3aed49b5015bb6..79db49a1ca2701 100644 --- a/src/dev/precommit_hook/casing_check_config.js +++ b/src/dev/precommit_hook/casing_check_config.js @@ -66,6 +66,9 @@ export const IGNORE_FILE_GLOBS = [ // Bazel default files '**/WORKSPACE.bazel', '**/BUILD.bazel', + + // Buildkite + '.buildkite/hooks/*', ]; /** From 3f5ae5006b7e93904ebdf0e97976374fd787eedf Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 25 May 2021 17:29:09 -0400 Subject: [PATCH 08/19] Move buildkite hook script content to separate files --- .buildkite/hooks/post-command | 6 +- .buildkite/hooks/pre-command | 66 +------------------ .buildkite/scripts/lifecycle/post_command.sh | 7 ++ .buildkite/scripts/lifecycle/pre_command.sh | 67 ++++++++++++++++++++ 4 files changed, 76 insertions(+), 70 deletions(-) create mode 100755 .buildkite/scripts/lifecycle/post_command.sh create mode 100755 .buildkite/scripts/lifecycle/pre_command.sh diff --git a/.buildkite/hooks/post-command b/.buildkite/hooks/post-command index 89630a874bbd71..d9a8ad668da0b5 100644 --- a/.buildkite/hooks/post-command +++ b/.buildkite/hooks/post-command @@ -1,7 +1,3 @@ #!/usr/bin/env bash -set -euo pipefail - -if [[ "$BUILDKITE_COMMAND_EXIT_STATUS" != "0" ]]; then - buildkite-agent meta-data set build_failed true -fi +.buildkite/scripts/lifecycle/post_command.sh diff --git a/.buildkite/hooks/pre-command b/.buildkite/hooks/pre-command index d9e79d2d3252b5..ec5927cab9ceeb 100644 --- a/.buildkite/hooks/pre-command +++ b/.buildkite/hooks/pre-command @@ -1,67 +1,3 @@ #!/usr/bin/env bash -set -euo pipefail - -# Set up a custom ES Snapshot Manifest if one has been specified for this build -{ - ES_SNAPSHOT_MANIFEST=${ES_SNAPSHOT_MANIFEST:-$(buildkite-agent meta-data get ES_SNAPSHOT_MANIFEST --default '')} - export ES_SNAPSHOT_MANIFEST - - if [[ "${ES_SNAPSHOT_MANIFEST:-}" ]]; then - cat << EOF | buildkite-agent annotate --style "info" --context es-snapshot-manifest - This build is running using a custom Elasticsearch snapshot. - - ES Snapshot Manifest: $ES_SNAPSHOT_MANIFEST - - To use this locally, simply prefix your commands with: - - \`\`\` - ES_SNAPSHOT_MANIFEST="$ES_SNAPSHOT_MANIFEST" - \`\`\` - - e.g. - - \`\`\` - ES_SNAPSHOT_MANIFEST="$ES_SNAPSHOT_MANIFEST" node scripts/functional_tests_server.js - \`\`\` -EOF - fi -} - -# Setup CI Stats -{ - CI_STATS_BUILD_ID="$(buildkite-agent meta-data get ci_stats_build_id --default '')" - export CI_STATS_BUILD_ID - - if [[ "$CI_STATS_BUILD_ID" ]]; then - echo "CI Stats Build ID: $CI_STATS_BUILD_ID" - - CI_STATS_TOKEN="$(vault read -field=api_token secret/kibana-issues/dev/kibana_ci_stats)" - export CI_STATS_TOKEN - - CI_STATS_HOST="$(vault read -field=api_host secret/kibana-issues/dev/kibana_ci_stats)" - export CI_STATS_HOST - - KIBANA_CI_STATS_CONFIG=$(jq -n \ - --arg buildId "$CI_STATS_BUILD_ID" \ - --arg apiUrl "https://$CI_STATS_HOST" \ - --arg apiToken "$CI_STATS_TOKEN" \ - '{buildId: $buildId, apiUrl: $apiUrl, apiToken: $apiToken}' \ - ) - export KIBANA_CI_STATS_CONFIG - fi -} - -GITHUB_TOKEN=$(vault read -field=github_token secret/kibana-issues/dev/kibanamachine) -export GITHUB_TOKEN - -# By default, all steps should set up these things to get a full environment before running -# It can be skipped for pipeline upload steps though, to make job start time a little faster -if [[ "${SKIP_CI_SETUP:-}" != "true" ]]; then - if [[ -d .buildkite/scripts && "${BUILDKITE_COMMAND:-}" != "buildkite-agent pipeline upload"* ]]; then - source .buildkite/scripts/common/util.sh - source .buildkite/scripts/common/env.sh - source .buildkite/scripts/common/setup_node.sh - source .buildkite/scripts/common/setup_bazel.sh - fi -fi +.buildkite/scripts/lifecycle/pre_command.sh diff --git a/.buildkite/scripts/lifecycle/post_command.sh b/.buildkite/scripts/lifecycle/post_command.sh new file mode 100755 index 00000000000000..89630a874bbd71 --- /dev/null +++ b/.buildkite/scripts/lifecycle/post_command.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if [[ "$BUILDKITE_COMMAND_EXIT_STATUS" != "0" ]]; then + buildkite-agent meta-data set build_failed true +fi diff --git a/.buildkite/scripts/lifecycle/pre_command.sh b/.buildkite/scripts/lifecycle/pre_command.sh new file mode 100755 index 00000000000000..d9e79d2d3252b5 --- /dev/null +++ b/.buildkite/scripts/lifecycle/pre_command.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# Set up a custom ES Snapshot Manifest if one has been specified for this build +{ + ES_SNAPSHOT_MANIFEST=${ES_SNAPSHOT_MANIFEST:-$(buildkite-agent meta-data get ES_SNAPSHOT_MANIFEST --default '')} + export ES_SNAPSHOT_MANIFEST + + if [[ "${ES_SNAPSHOT_MANIFEST:-}" ]]; then + cat << EOF | buildkite-agent annotate --style "info" --context es-snapshot-manifest + This build is running using a custom Elasticsearch snapshot. + + ES Snapshot Manifest: $ES_SNAPSHOT_MANIFEST + + To use this locally, simply prefix your commands with: + + \`\`\` + ES_SNAPSHOT_MANIFEST="$ES_SNAPSHOT_MANIFEST" + \`\`\` + + e.g. + + \`\`\` + ES_SNAPSHOT_MANIFEST="$ES_SNAPSHOT_MANIFEST" node scripts/functional_tests_server.js + \`\`\` +EOF + fi +} + +# Setup CI Stats +{ + CI_STATS_BUILD_ID="$(buildkite-agent meta-data get ci_stats_build_id --default '')" + export CI_STATS_BUILD_ID + + if [[ "$CI_STATS_BUILD_ID" ]]; then + echo "CI Stats Build ID: $CI_STATS_BUILD_ID" + + CI_STATS_TOKEN="$(vault read -field=api_token secret/kibana-issues/dev/kibana_ci_stats)" + export CI_STATS_TOKEN + + CI_STATS_HOST="$(vault read -field=api_host secret/kibana-issues/dev/kibana_ci_stats)" + export CI_STATS_HOST + + KIBANA_CI_STATS_CONFIG=$(jq -n \ + --arg buildId "$CI_STATS_BUILD_ID" \ + --arg apiUrl "https://$CI_STATS_HOST" \ + --arg apiToken "$CI_STATS_TOKEN" \ + '{buildId: $buildId, apiUrl: $apiUrl, apiToken: $apiToken}' \ + ) + export KIBANA_CI_STATS_CONFIG + fi +} + +GITHUB_TOKEN=$(vault read -field=github_token secret/kibana-issues/dev/kibanamachine) +export GITHUB_TOKEN + +# By default, all steps should set up these things to get a full environment before running +# It can be skipped for pipeline upload steps though, to make job start time a little faster +if [[ "${SKIP_CI_SETUP:-}" != "true" ]]; then + if [[ -d .buildkite/scripts && "${BUILDKITE_COMMAND:-}" != "buildkite-agent pipeline upload"* ]]; then + source .buildkite/scripts/common/util.sh + source .buildkite/scripts/common/env.sh + source .buildkite/scripts/common/setup_node.sh + source .buildkite/scripts/common/setup_bazel.sh + fi +fi From a87d02282f90bd23656aa2f19908a1d1b30685d4 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 25 May 2021 17:31:59 -0400 Subject: [PATCH 09/19] Source the pre-/post- command scripts --- .buildkite/hooks/post-command | 2 +- .buildkite/hooks/pre-command | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/hooks/post-command b/.buildkite/hooks/post-command index d9a8ad668da0b5..21a4326498fc9d 100644 --- a/.buildkite/hooks/post-command +++ b/.buildkite/hooks/post-command @@ -1,3 +1,3 @@ #!/usr/bin/env bash -.buildkite/scripts/lifecycle/post_command.sh +source .buildkite/scripts/lifecycle/post_command.sh diff --git a/.buildkite/hooks/pre-command b/.buildkite/hooks/pre-command index ec5927cab9ceeb..58a2c5f0b499d4 100644 --- a/.buildkite/hooks/pre-command +++ b/.buildkite/hooks/pre-command @@ -1,3 +1,3 @@ #!/usr/bin/env bash -.buildkite/scripts/lifecycle/pre_command.sh +source .buildkite/scripts/lifecycle/pre_command.sh From 8d469806754527ed06d71a9a3f0f70d08a9c737d Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 25 May 2021 17:39:36 -0400 Subject: [PATCH 10/19] More consistent names --- .../scripts/lifecycle/{setup_ci_stats.js => ci_stats_start.js} | 0 .../{commit_status_end.sh => commit_status_complete.sh} | 0 .buildkite/scripts/lifecycle/post_build.sh | 2 +- .buildkite/scripts/lifecycle/pre_build.sh | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) rename .buildkite/scripts/lifecycle/{setup_ci_stats.js => ci_stats_start.js} (100%) rename .buildkite/scripts/lifecycle/{commit_status_end.sh => commit_status_complete.sh} (100%) diff --git a/.buildkite/scripts/lifecycle/setup_ci_stats.js b/.buildkite/scripts/lifecycle/ci_stats_start.js similarity index 100% rename from .buildkite/scripts/lifecycle/setup_ci_stats.js rename to .buildkite/scripts/lifecycle/ci_stats_start.js diff --git a/.buildkite/scripts/lifecycle/commit_status_end.sh b/.buildkite/scripts/lifecycle/commit_status_complete.sh similarity index 100% rename from .buildkite/scripts/lifecycle/commit_status_end.sh rename to .buildkite/scripts/lifecycle/commit_status_complete.sh diff --git a/.buildkite/scripts/lifecycle/post_build.sh b/.buildkite/scripts/lifecycle/post_build.sh index 7acc8380d75e0d..06b51d78a836a9 100755 --- a/.buildkite/scripts/lifecycle/post_build.sh +++ b/.buildkite/scripts/lifecycle/post_build.sh @@ -5,6 +5,6 @@ set -euo pipefail BUILD_FAILED=$(buildkite-agent meta-data get build_failed --default "false") export BUILD_FAILED -"$(dirname "${0}")/commit_status_end.sh" +"$(dirname "${0}")/commit_status_complete.sh" node "$(dirname "${0}")/ci_stats_complete.js" diff --git a/.buildkite/scripts/lifecycle/pre_build.sh b/.buildkite/scripts/lifecycle/pre_build.sh index 5c3b985e494f25..2ddf9a73d0622e 100755 --- a/.buildkite/scripts/lifecycle/pre_build.sh +++ b/.buildkite/scripts/lifecycle/pre_build.sh @@ -7,4 +7,4 @@ set -euo pipefail export CI_STATS_TOKEN="$(vault read -field=api_token secret/kibana-issues/dev/kibana_ci_stats)" export CI_STATS_HOST="$(vault read -field=api_host secret/kibana-issues/dev/kibana_ci_stats)" -node "$(dirname "${0}")/setup_ci_stats.js" +node "$(dirname "${0}")/ci_stats_start.js" From 3f95e874cc3d6b8c4cb5371558bad81c01340e7a Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Thu, 27 May 2021 10:45:11 -0400 Subject: [PATCH 11/19] API docs needs to run after TS refs are built --- .buildkite/baseline.yml | 9 ++------- .buildkite/scripts/steps/baseline_public_api_docs.sh | 8 -------- ...{baseline_ts_refs.sh => baseline_ts_refs_api_docs.sh} | 3 +++ 3 files changed, 5 insertions(+), 15 deletions(-) delete mode 100755 .buildkite/scripts/steps/baseline_public_api_docs.sh rename .buildkite/scripts/steps/{baseline_ts_refs.sh => baseline_ts_refs_api_docs.sh} (80%) diff --git a/.buildkite/baseline.yml b/.buildkite/baseline.yml index 1c09b0d05afdae..01485f549c2fb5 100644 --- a/.buildkite/baseline.yml +++ b/.buildkite/baseline.yml @@ -12,13 +12,8 @@ steps: agents: queue: baseline - - command: .buildkite/scripts/steps/baseline_ts_refs.sh - label: Build TS Refs - agents: - queue: baseline-small - - - command: .buildkite/scripts/steps/baseline_public_api_docs.sh - label: Check Public API Docs + - command: .buildkite/scripts/steps/baseline_ts_refs_api_docs.sh + label: Build TS Refs and Check Public API Docs agents: queue: baseline-small diff --git a/.buildkite/scripts/steps/baseline_public_api_docs.sh b/.buildkite/scripts/steps/baseline_public_api_docs.sh deleted file mode 100755 index e6c6d532670da0..00000000000000 --- a/.buildkite/scripts/steps/baseline_public_api_docs.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -.buildkite/scripts/bootstrap.sh - -echo "--- Build API Docs" -node scripts/build_api_docs diff --git a/.buildkite/scripts/steps/baseline_ts_refs.sh b/.buildkite/scripts/steps/baseline_ts_refs_api_docs.sh similarity index 80% rename from .buildkite/scripts/steps/baseline_ts_refs.sh rename to .buildkite/scripts/steps/baseline_ts_refs_api_docs.sh index 9db72abe4b3682..35bc137ee4a02f 100755 --- a/.buildkite/scripts/steps/baseline_ts_refs.sh +++ b/.buildkite/scripts/steps/baseline_ts_refs_api_docs.sh @@ -8,3 +8,6 @@ export DISABLE_BOOTSTRAP_VALIDATION=true export BUILD_TS_REFS_DISABLE=false .buildkite/scripts/bootstrap.sh + +echo "--- Build API Docs" +node scripts/build_api_docs From b63d962fcf297090ae23cc0d22c3aa2d879945c8 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Thu, 27 May 2021 10:51:13 -0400 Subject: [PATCH 12/19] Add util --- .buildkite/scripts/bootstrap.sh | 2 ++ .buildkite/scripts/saved_object_field_metrics.sh | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.buildkite/scripts/bootstrap.sh b/.buildkite/scripts/bootstrap.sh index ccf39bd5476107..375440ac6a69b4 100755 --- a/.buildkite/scripts/bootstrap.sh +++ b/.buildkite/scripts/bootstrap.sh @@ -2,6 +2,8 @@ set -euo pipefail +source .buildkite/scripts/common/util.sh + if [[ ! -f "target/.bootstrap-cache" ]]; then echo "--- yarn install and bootstrap" yarn kbn bootstrap --verbose diff --git a/.buildkite/scripts/saved_object_field_metrics.sh b/.buildkite/scripts/saved_object_field_metrics.sh index 94443556accf7e..3b6c63eeff3b0c 100755 --- a/.buildkite/scripts/saved_object_field_metrics.sh +++ b/.buildkite/scripts/saved_object_field_metrics.sh @@ -2,6 +2,8 @@ set -euo pipefail +source .buildkite/scripts/common/util.sh + echo '--- Default Saved Object Field Metrics' cd "$XPACK_DIR" checks-reporter-with-killswitch "Capture Kibana Saved Objects field count metrics" \ From a70ad2d54b55c0d92364b60a690ba48789bd8cd5 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Thu, 27 May 2021 11:18:22 -0400 Subject: [PATCH 13/19] Baseline -> On Merge --- .buildkite/agents.json | 8 ++++---- .buildkite/{baseline.yml => on_merge.yml} | 10 +++++----- .../{baseline.sh => on_merge_build_and_metrics.sh} | 0 ...s_refs_api_docs.sh => on_merge_ts_refs_api_docs.sh} | 0 4 files changed, 9 insertions(+), 9 deletions(-) rename .buildkite/{baseline.yml => on_merge.yml} (62%) rename .buildkite/scripts/steps/{baseline.sh => on_merge_build_and_metrics.sh} (100%) rename .buildkite/scripts/steps/{baseline_ts_refs_api_docs.sh => on_merge_ts_refs_api_docs.sh} (100%) diff --git a/.buildkite/agents.json b/.buildkite/agents.json index 87469839f27fdf..797b7e71f2be68 100644 --- a/.buildkite/agents.json +++ b/.buildkite/agents.json @@ -26,14 +26,14 @@ "machineType": "e2-small" }, { - "queue": "baseline", - "name": "kb-baseline", + "queue": "c2-8", + "name": "kb-c2-8", "machineType": "c2-standard-8", "localSsds": 1 }, { - "queue": "baseline-small", - "name": "kb-baseline-small", + "queue": "c2-4", + "name": "kb-c2-4", "machineType": "c2-standard-4", "localSsds": 1 }, diff --git a/.buildkite/baseline.yml b/.buildkite/on_merge.yml similarity index 62% rename from .buildkite/baseline.yml rename to .buildkite/on_merge.yml index 01485f549c2fb5..bceb1796479a2d 100644 --- a/.buildkite/baseline.yml +++ b/.buildkite/on_merge.yml @@ -1,21 +1,21 @@ env: GITHUB_COMMIT_STATUS_ENABLED: 'true' - GITHUB_COMMIT_STATUS_CONTEXT: 'buildkite/kibana-ci-baseline' + GITHUB_COMMIT_STATUS_CONTEXT: 'buildkite/on-merge' steps: - command: .buildkite/scripts/lifecycle/pre_build.sh label: Pre-Build - wait - - command: .buildkite/scripts/steps/baseline.sh + - command: .buildkite/scripts/steps/on_merge_build_and_metrics.sh label: Default Build and Metrics agents: - queue: baseline + queue: c2-8 - - command: .buildkite/scripts/steps/baseline_ts_refs_api_docs.sh + - command: .buildkite/scripts/steps/on_merge_ts_refs_api_docs.sh label: Build TS Refs and Check Public API Docs agents: - queue: baseline-small + queue: c2-4 - wait: ~ continue_on_failure: true diff --git a/.buildkite/scripts/steps/baseline.sh b/.buildkite/scripts/steps/on_merge_build_and_metrics.sh similarity index 100% rename from .buildkite/scripts/steps/baseline.sh rename to .buildkite/scripts/steps/on_merge_build_and_metrics.sh diff --git a/.buildkite/scripts/steps/baseline_ts_refs_api_docs.sh b/.buildkite/scripts/steps/on_merge_ts_refs_api_docs.sh similarity index 100% rename from .buildkite/scripts/steps/baseline_ts_refs_api_docs.sh rename to .buildkite/scripts/steps/on_merge_ts_refs_api_docs.sh From bd6b0826e5955ffd8476b4b1143453a9f9dbabc6 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Thu, 27 May 2021 11:50:17 -0400 Subject: [PATCH 14/19] Remove if for bootstrap --- .buildkite/scripts/bootstrap.sh | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/.buildkite/scripts/bootstrap.sh b/.buildkite/scripts/bootstrap.sh index 375440ac6a69b4..7ae925b262b9f4 100755 --- a/.buildkite/scripts/bootstrap.sh +++ b/.buildkite/scripts/bootstrap.sh @@ -4,21 +4,19 @@ set -euo pipefail source .buildkite/scripts/common/util.sh -if [[ ! -f "target/.bootstrap-cache" ]]; then - echo "--- yarn install and bootstrap" - yarn kbn bootstrap --verbose +echo "--- yarn install and bootstrap" +yarn kbn bootstrap --verbose - ### - ### upload ts-refs-cache artifacts as quickly as possible so they are available for download - ### - if [[ "${BUILD_TS_REFS_CACHE_CAPTURE:-}" == "true" ]]; then - echo "--- Upload ts-refs-cache" - cd "$KIBANA_DIR/target/ts_refs_cache" - gsutil cp "*.zip" 'gs://kibana-ci-ts-refs-cache/' - cd "$KIBANA_DIR" - fi +### +### upload ts-refs-cache artifacts as quickly as possible so they are available for download +### +if [[ "${BUILD_TS_REFS_CACHE_CAPTURE:-}" == "true" ]]; then + echo "--- Upload ts-refs-cache" + cd "$KIBANA_DIR/target/ts_refs_cache" + gsutil cp "*.zip" 'gs://kibana-ci-ts-refs-cache/' + cd "$KIBANA_DIR" +fi - if [[ "$DISABLE_BOOTSTRAP_VALIDATION" != "true" ]]; then - verify_no_git_changes 'yarn kbn bootstrap' - fi +if [[ "$DISABLE_BOOTSTRAP_VALIDATION" != "true" ]]; then + verify_no_git_changes 'yarn kbn bootstrap' fi From e5b9c3512a0c571ba7b5854d002aa50c4bbf16a7 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Thu, 27 May 2021 12:14:32 -0400 Subject: [PATCH 15/19] Documentation, and create pipelines directory --- .buildkite/README.md | 10 ++++++++++ .buildkite/{ => pipelines}/on_merge.yml | 0 .buildkite/scripts/common/util.sh | 2 ++ 3 files changed, 12 insertions(+) create mode 100644 .buildkite/README.md rename .buildkite/{ => pipelines}/on_merge.yml (100%) diff --git a/.buildkite/README.md b/.buildkite/README.md new file mode 100644 index 00000000000000..6b9be00898d249 --- /dev/null +++ b/.buildkite/README.md @@ -0,0 +1,10 @@ +# Kibana / Buildkite + +## Directory Structure + +- `hooks` - special directory used by Buildkite agents for [hooks](https://buildkite.com/docs/agent/v3/hooks) +- `pipelines` - contains pipeline definitions +- `scripts/common` - scripts that get `source`d by other scripts to set environment variables or import shared functions +- `scripts/lifecycle` - general scripts for tasks that run before or after individual steps or the entire build +- `scripts/steps` - scripts that define something that will run for a step defined in a pipeline +- `scripts/*` - all other scripts are building blocks that make up the tasks in pipelines. They may be run by other scripts, but should not be `source`d diff --git a/.buildkite/on_merge.yml b/.buildkite/pipelines/on_merge.yml similarity index 100% rename from .buildkite/on_merge.yml rename to .buildkite/pipelines/on_merge.yml diff --git a/.buildkite/scripts/common/util.sh b/.buildkite/scripts/common/util.sh index f695f1d8ba3fec..653b0c4e9cdbb7 100755 --- a/.buildkite/scripts/common/util.sh +++ b/.buildkite/scripts/common/util.sh @@ -26,6 +26,8 @@ verify_no_git_changes() { fi } +# docker_run can be used in place of `docker run` +# it automatically passes along all of Buildkite's tracked environment variables, and mounts the buildkite-agent in the running container docker_run() { args=() From e6ab26205c9d81cee75fa206f332cae37b464d4f Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Thu, 27 May 2021 16:22:34 -0400 Subject: [PATCH 16/19] Add operations as codeowner for .buildkite --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index df7dc1040907cc..c2372a88a4a2aa 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -173,6 +173,7 @@ /.bazelversion @elastic/kibana-operations /WORKSPACE.bazel @elastic/kibana-operations #CC# /packages/kbn-expect/ @elastic/kibana-operations +/.buildkite/ @elastic/kibana-operations # Quality Assurance /src/dev/code_coverage @elastic/kibana-qa From b102e10452f4c0a463b474d1ecba84f454383899 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Fri, 28 May 2021 20:54:51 -0400 Subject: [PATCH 17/19] Apply suggestions from code review Co-authored-by: Spencer --- .../src/functional_test_runner/functional_test_runner.ts | 2 +- packages/kbn-test/src/functional_tests/tasks.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts index a6044cdb5de271..cbf191271cba46 100644 --- a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts +++ b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts @@ -121,7 +121,7 @@ export class FunctionalTestRunner { } // eslint-disable-next-line - console.log(`--- Running ${this.configFile.replace(process.cwd() + '/', '')}`); + console.log(`--- Running ${Path.relative(process.cwd(), this.configFile)}`); const dockerServers = new DockerServersService( config.get('dockerServers'), diff --git a/packages/kbn-test/src/functional_tests/tasks.js b/packages/kbn-test/src/functional_tests/tasks.js index 0741eb8afae616..801c465ec229c5 100644 --- a/packages/kbn-test/src/functional_tests/tasks.js +++ b/packages/kbn-test/src/functional_tests/tasks.js @@ -88,7 +88,7 @@ export async function runTests(options) { continue; } - console.log(`--- Running ${configPath.replace(process.cwd(), '')}`); + console.log(`--- Running ${Path.relative(process.cwd(), configPath}`); await withProcRunner(log, async (procs) => { const config = await readConfigFile(log, configPath); From 713a267721bb820935f03e0f9bb06c12d5241425 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 1 Jun 2021 11:11:58 -0400 Subject: [PATCH 18/19] Fix syntax error from suggestion --- packages/kbn-test/src/functional_tests/tasks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kbn-test/src/functional_tests/tasks.js b/packages/kbn-test/src/functional_tests/tasks.js index 801c465ec229c5..2cf0730c5f9432 100644 --- a/packages/kbn-test/src/functional_tests/tasks.js +++ b/packages/kbn-test/src/functional_tests/tasks.js @@ -88,7 +88,7 @@ export async function runTests(options) { continue; } - console.log(`--- Running ${Path.relative(process.cwd(), configPath}`); + console.log(`--- Running ${Path.relative(process.cwd(), configPath)}`); await withProcRunner(log, async (procs) => { const config = await readConfigFile(log, configPath); From dde2d1d2810d6bf9d06e22decc7eed57b15aaea6 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 1 Jun 2021 11:23:42 -0400 Subject: [PATCH 19/19] Fix imports --- .../src/functional_test_runner/functional_test_runner.ts | 3 ++- packages/kbn-test/src/functional_tests/tasks.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts index cbf191271cba46..0a2dba60742adf 100644 --- a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts +++ b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts @@ -5,6 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ +import { relative } from 'path'; import { ToolingLog } from '@kbn/dev-utils'; @@ -121,7 +122,7 @@ export class FunctionalTestRunner { } // eslint-disable-next-line - console.log(`--- Running ${Path.relative(process.cwd(), this.configFile)}`); + console.log(`--- Running ${relative(process.cwd(), this.configFile)}`); const dockerServers = new DockerServersService( config.get('dockerServers'), diff --git a/packages/kbn-test/src/functional_tests/tasks.js b/packages/kbn-test/src/functional_tests/tasks.js index 2cf0730c5f9432..122a5a23842d6f 100644 --- a/packages/kbn-test/src/functional_tests/tasks.js +++ b/packages/kbn-test/src/functional_tests/tasks.js @@ -88,7 +88,7 @@ export async function runTests(options) { continue; } - console.log(`--- Running ${Path.relative(process.cwd(), configPath)}`); + console.log(`--- Running ${relative(process.cwd(), configPath)}`); await withProcRunner(log, async (procs) => { const config = await readConfigFile(log, configPath);