From becb74c354fc4f4583f9a5952f1828343e4703d6 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 4 Feb 2021 20:05:02 +0000 Subject: [PATCH 01/13] chore(NA): build bazel projects all at once in the distributable build process --- packages/kbn-pm/dist/index.js | 31 ++++++++++--------- .../build_bazel_production_projects.ts | 7 +++-- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js index 4d065411f91b61..e4ea1217ee2dd7 100644 --- a/packages/kbn-pm/dist/index.js +++ b/packages/kbn-pm/dist/index.js @@ -59771,10 +59771,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _build_non_bazel_production_projects__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(745); -/* harmony import */ var _utils_fs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(131); -/* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(246); -/* harmony import */ var _utils_package_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(251); -/* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(248); +/* harmony import */ var _utils_bazel_run__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(374); +/* harmony import */ var _utils_fs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(131); +/* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(246); +/* harmony import */ var _utils_package_json__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(251); +/* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(248); /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License @@ -59790,17 +59791,19 @@ __webpack_require__.r(__webpack_exports__); + async function buildBazelProductionProjects({ kibanaRoot, buildRoot, onlyOSS }) { - const projects = await Object(_utils_projects__WEBPACK_IMPORTED_MODULE_7__["getBazelProjectsOnly"])(await Object(_build_non_bazel_production_projects__WEBPACK_IMPORTED_MODULE_3__["getProductionProjects"])(kibanaRoot, onlyOSS)); + const projects = await Object(_utils_projects__WEBPACK_IMPORTED_MODULE_8__["getBazelProjectsOnly"])(await Object(_build_non_bazel_production_projects__WEBPACK_IMPORTED_MODULE_3__["getProductionProjects"])(kibanaRoot, onlyOSS)); const projectNames = [...projects.values()].map(project => project.name); - _utils_log__WEBPACK_IMPORTED_MODULE_5__["log"].info(`Preparing Bazel projects production build for [${projectNames.join(', ')}]`); + _utils_log__WEBPACK_IMPORTED_MODULE_6__["log"].info(`Preparing Bazel projects production build for [${projectNames.join(', ')}]`); + await Object(_utils_bazel_run__WEBPACK_IMPORTED_MODULE_4__["runBazel"])(['build', '//packages:build']); + _utils_log__WEBPACK_IMPORTED_MODULE_6__["log"].info(`All Bazel projects production builds for [${projectNames.join(', ')}] are complete}]`); for (const project of projects.values()) { - await Object(_build_non_bazel_production_projects__WEBPACK_IMPORTED_MODULE_3__["buildProject"])(project); await copyToBuild(project, kibanaRoot, buildRoot); await applyCorrectPermissions(project, kibanaRoot, buildRoot); } @@ -59835,9 +59838,9 @@ async function copyToBuild(project, kibanaRoot, buildRoot) { // the intermediate build, we fall back to using the project's already defined // `package.json`. - const packageJson = (await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_4__["isFile"])(Object(path__WEBPACK_IMPORTED_MODULE_2__["join"])(buildProjectPath, 'package.json'))) ? await Object(_utils_package_json__WEBPACK_IMPORTED_MODULE_6__["readPackageJson"])(buildProjectPath) : project.json; - const preparedPackageJson = Object(_utils_package_json__WEBPACK_IMPORTED_MODULE_6__["createProductionPackageJson"])(packageJson); - await Object(_utils_package_json__WEBPACK_IMPORTED_MODULE_6__["writePackageJson"])(buildProjectPath, preparedPackageJson); + const packageJson = (await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_5__["isFile"])(Object(path__WEBPACK_IMPORTED_MODULE_2__["join"])(buildProjectPath, 'package.json'))) ? await Object(_utils_package_json__WEBPACK_IMPORTED_MODULE_7__["readPackageJson"])(buildProjectPath) : project.json; + const preparedPackageJson = Object(_utils_package_json__WEBPACK_IMPORTED_MODULE_7__["createProductionPackageJson"])(packageJson); + await Object(_utils_package_json__WEBPACK_IMPORTED_MODULE_7__["writePackageJson"])(buildProjectPath, preparedPackageJson); } async function applyCorrectPermissions(project, kibanaRoot, buildRoot) { @@ -59852,12 +59855,12 @@ async function applyCorrectPermissions(project, kibanaRoot, buildRoot) { for (const pluginPath of allPluginPaths) { const resolvedPluginPath = Object(path__WEBPACK_IMPORTED_MODULE_2__["resolve"])(buildRoot, pluginPath); - if (await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_4__["isFile"])(resolvedPluginPath)) { - await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_4__["chmod"])(resolvedPluginPath, 0o644); + if (await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_5__["isFile"])(resolvedPluginPath)) { + await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_5__["chmod"])(resolvedPluginPath, 0o644); } - if (await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_4__["isDirectory"])(resolvedPluginPath)) { - await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_4__["chmod"])(resolvedPluginPath, 0o755); + if (await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_5__["isDirectory"])(resolvedPluginPath)) { + await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_5__["chmod"])(resolvedPluginPath, 0o755); } } } diff --git a/packages/kbn-pm/src/production/build_bazel_production_projects.ts b/packages/kbn-pm/src/production/build_bazel_production_projects.ts index cd40653a6b54c2..a54d6c753d8d77 100644 --- a/packages/kbn-pm/src/production/build_bazel_production_projects.ts +++ b/packages/kbn-pm/src/production/build_bazel_production_projects.ts @@ -10,7 +10,8 @@ import copy from 'cpy'; import globby from 'globby'; import { basename, join, relative, resolve } from 'path'; -import { buildProject, getProductionProjects } from './build_non_bazel_production_projects'; +import { getProductionProjects } from './build_non_bazel_production_projects'; +import { runBazel } from '../utils/bazel/run'; import { chmod, isFile, isDirectory } from '../utils/fs'; import { log } from '../utils/log'; import { @@ -35,8 +36,10 @@ export async function buildBazelProductionProjects({ const projectNames = [...projects.values()].map((project) => project.name); log.info(`Preparing Bazel projects production build for [${projectNames.join(', ')}]`); + await runBazel(['build', '//packages:build']); + log.info(`All Bazel projects production builds for [${projectNames.join(', ')}] are complete}]`); + for (const project of projects.values()) { - await buildProject(project); await copyToBuild(project, kibanaRoot, buildRoot); await applyCorrectPermissions(project, kibanaRoot, buildRoot); } From ab7b5f32bd4f04ba1940ee867b7e401b3aef3df0 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 4 Feb 2021 20:56:51 +0000 Subject: [PATCH 02/13] chore(NA): make sure bazelisk is installed --- src/dev/ci_setup/setup.sh | 5 ----- src/dev/ci_setup/setup_env.sh | 12 ++++++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/dev/ci_setup/setup.sh b/src/dev/ci_setup/setup.sh index e5e21e312b0ddb..61f578ba339715 100755 --- a/src/dev/ci_setup/setup.sh +++ b/src/dev/ci_setup/setup.sh @@ -65,8 +65,3 @@ if [ "$GIT_CHANGES" ]; then echo -e "$GIT_CHANGES\n" exit 1 fi - -### -### copy .bazelrc-ci into $HOME/.bazelrc -### -cp "src/dev/ci_setup/.bazelrc-ci" "$HOME/.bazelrc"; diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index 5dac270239c4af..a4cc1b22e2bb56 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -175,4 +175,16 @@ if [[ -d "$ES_DIR" && -f "$ES_JAVA_PROP_PATH" ]]; then export JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA fi +### +### copy .bazelrc-ci into $HOME/.bazelrc +### +cp -f "$KIBANA_DIR/src/dev/ci_setup/.bazelrc-ci" "$HOME/.bazelrc"; + + +### +### make sure bazelisk is installed on CI +### +bazeliskVersion=$(head -n 1 "$KIBANA_DIR/.bazeliskversion") +yarn global add "@bazel/bazelisk@${bazeliskVersion}" + export CI_ENV_SETUP=true From 5d9a92b66e271011f0331d7202bdceee63f401c3 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 4 Feb 2021 21:55:40 +0000 Subject: [PATCH 03/13] chore(NA): install bazelisk using npm --- src/dev/ci_setup/setup_env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index a4cc1b22e2bb56..4f6016bce6556c 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -185,6 +185,6 @@ cp -f "$KIBANA_DIR/src/dev/ci_setup/.bazelrc-ci" "$HOME/.bazelrc"; ### make sure bazelisk is installed on CI ### bazeliskVersion=$(head -n 1 "$KIBANA_DIR/.bazeliskversion") -yarn global add "@bazel/bazelisk@${bazeliskVersion}" +npm install -g "@bazel/bazelisk@${bazeliskVersion}" export CI_ENV_SETUP=true From 2eb3adf866ce99d93bba4ffa4e468c936fced966 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 4 Feb 2021 21:56:07 +0000 Subject: [PATCH 04/13] chore(NA): remove extra spac --- src/dev/ci_setup/setup_env.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index 4f6016bce6556c..4785cf0cf1d371 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -180,7 +180,6 @@ fi ### cp -f "$KIBANA_DIR/src/dev/ci_setup/.bazelrc-ci" "$HOME/.bazelrc"; - ### ### make sure bazelisk is installed on CI ### From c4f3794c00e94a606a00be4cdb40ffccc85d6d65 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 4 Feb 2021 22:43:46 +0000 Subject: [PATCH 05/13] chore(NA): test yarn path exports --- src/dev/ci_setup/setup_env.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index 4785cf0cf1d371..bee614e1ece84d 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -180,10 +180,20 @@ fi ### cp -f "$KIBANA_DIR/src/dev/ci_setup/.bazelrc-ci" "$HOME/.bazelrc"; +### +### append auth token to buildbuddy into "$HOME/.bazelrc"; +### +echo "# Appended by $KIBANA_DIR/src/dev/ci_setup/setup.sh" >> "$HOME/.bazelrc" +echo "build --remote_header=x-buildbuddy-api-key=$KIBANA_BUILDBUDDY_CI_API_KEY" >> "$HOME/.bazelrc" + +export PATH="$PATH:$HOME/.yarn/bin" +ls $(yarn global dir) +ls $(yarn global bin) +ls "$HOME/.yarn/bin" ### ### make sure bazelisk is installed on CI ### bazeliskVersion=$(head -n 1 "$KIBANA_DIR/.bazeliskversion") -npm install -g "@bazel/bazelisk@${bazeliskVersion}" +yarn global add "@bazel/bazelisk@${bazeliskVersion}" export CI_ENV_SETUP=true From be7c40b6fc52c5f4d62a16b3bdb98e341f6c9025 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 4 Feb 2021 22:53:21 +0000 Subject: [PATCH 06/13] chore(NA): add direct global dir --- src/dev/ci_setup/setup_env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index bee614e1ece84d..49ab1564247c7e 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -187,7 +187,7 @@ echo "# Appended by $KIBANA_DIR/src/dev/ci_setup/setup.sh" >> "$HOME/.bazelrc" echo "build --remote_header=x-buildbuddy-api-key=$KIBANA_BUILDBUDDY_CI_API_KEY" >> "$HOME/.bazelrc" export PATH="$PATH:$HOME/.yarn/bin" -ls $(yarn global dir) +ls /var/lib/jenkins/.config/yarn/global ls $(yarn global bin) ls "$HOME/.yarn/bin" ### From 1d97022506dfeb592a2acff02271f7d5ca985b51 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 4 Feb 2021 22:54:53 +0000 Subject: [PATCH 07/13] chore(NA): some more debug steps --- src/dev/ci_setup/setup_env.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index 49ab1564247c7e..1b0feeac88234e 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -188,8 +188,10 @@ echo "build --remote_header=x-buildbuddy-api-key=$KIBANA_BUILDBUDDY_CI_API_KEY" export PATH="$PATH:$HOME/.yarn/bin" ls /var/lib/jenkins/.config/yarn/global -ls $(yarn global bin) +ls "$(yarn global dir)" +ls "$(yarn global bin)" ls "$HOME/.yarn/bin" +ls $(yarn global bin) ### ### make sure bazelisk is installed on CI ### From 9d92a5eaf008573788c8c83b3a37b85f3bb4a0d1 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 5 Feb 2021 00:41:44 +0000 Subject: [PATCH 08/13] chore(NA): remove one statement --- src/dev/ci_setup/setup_env.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index 1b0feeac88234e..051bdef26b678f 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -187,8 +187,7 @@ echo "# Appended by $KIBANA_DIR/src/dev/ci_setup/setup.sh" >> "$HOME/.bazelrc" echo "build --remote_header=x-buildbuddy-api-key=$KIBANA_BUILDBUDDY_CI_API_KEY" >> "$HOME/.bazelrc" export PATH="$PATH:$HOME/.yarn/bin" -ls /var/lib/jenkins/.config/yarn/global -ls "$(yarn global dir)" +ls "/var/lib/jenkins/.config/yarn/global" ls "$(yarn global bin)" ls "$HOME/.yarn/bin" ls $(yarn global bin) From a9e74d30e288337d1232ffc744cc70a57e4075dc Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 5 Feb 2021 02:13:27 +0000 Subject: [PATCH 09/13] chore(NA): comment one more line out for testing purposes --- src/dev/ci_setup/setup_env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index 051bdef26b678f..6068adf3146cd1 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -188,7 +188,7 @@ echo "build --remote_header=x-buildbuddy-api-key=$KIBANA_BUILDBUDDY_CI_API_KEY" export PATH="$PATH:$HOME/.yarn/bin" ls "/var/lib/jenkins/.config/yarn/global" -ls "$(yarn global bin)" +#ls "$(yarn global bin)" ls "$HOME/.yarn/bin" ls $(yarn global bin) ### From 344164ca0bb6c2dda4d1075768c454b12914bfc7 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 5 Feb 2021 02:19:06 +0000 Subject: [PATCH 10/13] chore(NA): export the correct yarn bin location into the PATH --- src/dev/ci_setup/setup_env.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index 6068adf3146cd1..2b1025778551e5 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -119,6 +119,10 @@ yarn config set yarn-offline-mirror "$cacheDir/yarn-offline-cache" ### yarnGlobalDir="$(yarn global bin)" export PATH="$PATH:$yarnGlobalDir" +# In some situations looks lik the yarn binaries added through +# yarn global add will not be placed on yarn global bin +# but on $HOME/.yarn/bin. I'm also adding it into the PATH +export PATH="$PATH:$HOME/.yarn/bin" # use a proxy to fetch chromedriver/geckodriver asset export GECKODRIVER_CDNURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" @@ -186,15 +190,11 @@ cp -f "$KIBANA_DIR/src/dev/ci_setup/.bazelrc-ci" "$HOME/.bazelrc"; echo "# Appended by $KIBANA_DIR/src/dev/ci_setup/setup.sh" >> "$HOME/.bazelrc" echo "build --remote_header=x-buildbuddy-api-key=$KIBANA_BUILDBUDDY_CI_API_KEY" >> "$HOME/.bazelrc" -export PATH="$PATH:$HOME/.yarn/bin" -ls "/var/lib/jenkins/.config/yarn/global" -#ls "$(yarn global bin)" -ls "$HOME/.yarn/bin" -ls $(yarn global bin) + ### ### make sure bazelisk is installed on CI ### -bazeliskVersion=$(head -n 1 "$KIBANA_DIR/.bazeliskversion") -yarn global add "@bazel/bazelisk@${bazeliskVersion}" +# bazeliskVersion=$(head -n 1 "$KIBANA_DIR/.bazeliskversion") +# yarn global add "@bazel/bazelisk@${bazeliskVersion}" export CI_ENV_SETUP=true From e36bde50cb203895a0d4adcda8ab7ef87a072144 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 5 Feb 2021 02:35:11 +0000 Subject: [PATCH 11/13] chore(NA): cleaning implementation --- src/dev/ci_setup/setup_env.sh | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index 2b1025778551e5..06304e6ae41858 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -190,11 +190,4 @@ cp -f "$KIBANA_DIR/src/dev/ci_setup/.bazelrc-ci" "$HOME/.bazelrc"; echo "# Appended by $KIBANA_DIR/src/dev/ci_setup/setup.sh" >> "$HOME/.bazelrc" echo "build --remote_header=x-buildbuddy-api-key=$KIBANA_BUILDBUDDY_CI_API_KEY" >> "$HOME/.bazelrc" - -### -### make sure bazelisk is installed on CI -### -# bazeliskVersion=$(head -n 1 "$KIBANA_DIR/.bazeliskversion") -# yarn global add "@bazel/bazelisk@${bazeliskVersion}" - export CI_ENV_SETUP=true From a0aba71b9236d27931a64f8d573463b1d4fa8280 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 5 Feb 2021 19:35:52 +0000 Subject: [PATCH 12/13] chore(NA): move installation process of bazelisk into npm --- packages/kbn-pm/dist/index.js | 29 +++++++++++------ .../kbn-pm/src/utils/bazel/install_tools.ts | 32 +++++++++++++------ src/dev/ci_setup/setup_env.sh | 4 --- 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js index e4ea1217ee2dd7..abb941d2117131 100644 --- a/packages/kbn-pm/dist/index.js +++ b/packages/kbn-pm/dist/index.js @@ -48106,23 +48106,34 @@ async function isBazelBinAvailable() { } } +async function isBazeliskInstalled(bazeliskVersion) { + try { + const { + stdout: bazeliskPkgInstallStdout + } = await Object(_child_process__WEBPACK_IMPORTED_MODULE_2__["spawn"])('npm', ['ls', '--global', '--parseable', '--long', `@bazel/bazelisk@${bazeliskVersion}`], { + stdio: 'pipe' + }); + return bazeliskPkgInstallStdout.includes(`@bazel/bazelisk@${bazeliskVersion}`); + } catch { + return false; + } +} + async function installBazelTools(repoRootPath) { _log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] reading bazel tools versions from version files`); const bazeliskVersion = await readBazelToolsVersionFile(repoRootPath, '.bazeliskversion'); const bazelVersion = await readBazelToolsVersionFile(repoRootPath, '.bazelversion'); // Check what globals are installed - _log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] verify if bazelisk is installed`); - const { - stdout: bazeliskPkgInstallStdout - } = await Object(_child_process__WEBPACK_IMPORTED_MODULE_2__["spawn"])('yarn', ['global', 'list'], { - stdio: 'pipe' - }); + _log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] verify if bazelisk is installed`); // Test if bazelisk is already installed in the correct version + + const isBazeliskPkgInstalled = await isBazeliskInstalled(bazeliskVersion); // Test if bazel bin is available + const isBazelBinAlreadyAvailable = await isBazelBinAvailable(); // Install bazelisk if not installed - if (!bazeliskPkgInstallStdout.includes(`@bazel/bazelisk@${bazeliskVersion}`) || !isBazelBinAlreadyAvailable) { + if (!isBazeliskPkgInstalled || !isBazelBinAlreadyAvailable) { _log__WEBPACK_IMPORTED_MODULE_4__["log"].info(`[bazel_tools] installing Bazel tools`); _log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] bazelisk is not installed. Installing @bazel/bazelisk@${bazeliskVersion} and bazel@${bazelVersion}`); - await Object(_child_process__WEBPACK_IMPORTED_MODULE_2__["spawn"])('yarn', ['global', 'add', `@bazel/bazelisk@${bazeliskVersion}`], { + await Object(_child_process__WEBPACK_IMPORTED_MODULE_2__["spawn"])('npm', ['install', '--global', `@bazel/bazelisk@${bazeliskVersion}`], { env: { USE_BAZEL_VERSION: bazelVersion }, @@ -48132,7 +48143,7 @@ async function installBazelTools(repoRootPath) { if (!isBazelBinAvailableAfterInstall) { throw new Error(dedent__WEBPACK_IMPORTED_MODULE_0___default.a` - [bazel_tools] an error occurred when installing the Bazel tools. Please make sure 'yarn global bin' is on your $PATH, otherwise just add it there + [bazel_tools] an error occurred when installing the Bazel tools. Please make sure you have access to npm globally installed modules on your $PATH `); } } diff --git a/packages/kbn-pm/src/utils/bazel/install_tools.ts b/packages/kbn-pm/src/utils/bazel/install_tools.ts index dfd20f5974d67d..ab348c42b38cb6 100644 --- a/packages/kbn-pm/src/utils/bazel/install_tools.ts +++ b/packages/kbn-pm/src/utils/bazel/install_tools.ts @@ -36,6 +36,22 @@ async function isBazelBinAvailable() { } } +async function isBazeliskInstalled(bazeliskVersion) { + try { + const { stdout: bazeliskPkgInstallStdout } = await spawn( + 'npm', + ['ls', '--global', '--parseable', '--long', `@bazel/bazelisk@${bazeliskVersion}`], + { + stdio: 'pipe', + } + ); + + return bazeliskPkgInstallStdout.includes(`@bazel/bazelisk@${bazeliskVersion}`); + } catch { + return false; + } +} + export async function installBazelTools(repoRootPath: string) { log.debug(`[bazel_tools] reading bazel tools versions from version files`); const bazeliskVersion = await readBazelToolsVersionFile(repoRootPath, '.bazeliskversion'); @@ -43,23 +59,21 @@ export async function installBazelTools(repoRootPath: string) { // Check what globals are installed log.debug(`[bazel_tools] verify if bazelisk is installed`); - const { stdout: bazeliskPkgInstallStdout } = await spawn('yarn', ['global', 'list'], { - stdio: 'pipe', - }); + // Test if bazelisk is already installed in the correct version + const isBazeliskPkgInstalled = await isBazeliskInstalled(bazeliskVersion); + + // Test if bazel bin is available const isBazelBinAlreadyAvailable = await isBazelBinAvailable(); // Install bazelisk if not installed - if ( - !bazeliskPkgInstallStdout.includes(`@bazel/bazelisk@${bazeliskVersion}`) || - !isBazelBinAlreadyAvailable - ) { + if (!isBazeliskPkgInstalled || !isBazelBinAlreadyAvailable) { log.info(`[bazel_tools] installing Bazel tools`); log.debug( `[bazel_tools] bazelisk is not installed. Installing @bazel/bazelisk@${bazeliskVersion} and bazel@${bazelVersion}` ); - await spawn('yarn', ['global', 'add', `@bazel/bazelisk@${bazeliskVersion}`], { + await spawn('npm', ['install', '--global', `@bazel/bazelisk@${bazeliskVersion}`], { env: { USE_BAZEL_VERSION: bazelVersion, }, @@ -69,7 +83,7 @@ export async function installBazelTools(repoRootPath: string) { const isBazelBinAvailableAfterInstall = await isBazelBinAvailable(); if (!isBazelBinAvailableAfterInstall) { throw new Error(dedent` - [bazel_tools] an error occurred when installing the Bazel tools. Please make sure 'yarn global bin' is on your $PATH, otherwise just add it there + [bazel_tools] an error occurred when installing the Bazel tools. Please make sure you have access to npm globally installed modules on your $PATH `); } } diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index 06304e6ae41858..0b835d4b9fa947 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -119,10 +119,6 @@ yarn config set yarn-offline-mirror "$cacheDir/yarn-offline-cache" ### yarnGlobalDir="$(yarn global bin)" export PATH="$PATH:$yarnGlobalDir" -# In some situations looks lik the yarn binaries added through -# yarn global add will not be placed on yarn global bin -# but on $HOME/.yarn/bin. I'm also adding it into the PATH -export PATH="$PATH:$HOME/.yarn/bin" # use a proxy to fetch chromedriver/geckodriver asset export GECKODRIVER_CDNURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" From 2be639b5b58871830d92b2c5e00f267aedcfebf4 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 5 Feb 2021 19:53:38 +0000 Subject: [PATCH 13/13] chore(NA): add missing type --- packages/kbn-pm/src/utils/bazel/install_tools.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kbn-pm/src/utils/bazel/install_tools.ts b/packages/kbn-pm/src/utils/bazel/install_tools.ts index ab348c42b38cb6..cee6eff317afa4 100644 --- a/packages/kbn-pm/src/utils/bazel/install_tools.ts +++ b/packages/kbn-pm/src/utils/bazel/install_tools.ts @@ -36,7 +36,7 @@ async function isBazelBinAvailable() { } } -async function isBazeliskInstalled(bazeliskVersion) { +async function isBazeliskInstalled(bazeliskVersion: string) { try { const { stdout: bazeliskPkgInstallStdout } = await spawn( 'npm',