chore(NA): move bazel workspace status from bash script into nodejs executable (#90560)

* chore(NA): move bazel workspace status into nodejs executable

* chore(NA): removed unused console.log on error

* chore(NA): ability to setup different name for origin remote on workspace status command

* chore(NA): do not fail if cant collect repo url

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Tiago Costa 2021-02-08 22:24:14 +00:00 committed by GitHub
parent b39ad86b5d
commit 15a4c285b8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 81 additions and 58 deletions

View file

@ -11,7 +11,7 @@ import %workspace%/.bazelrc.common
# BuildBuddy
## Metadata settings
build --workspace_status_command=$(pwd)/src/dev/bazel_workspace_status.sh
build --workspace_status_command="node ./src/dev/bazel_workspace_status.js"
# Enable this in case you want to share your build info
# build --build_metadata=VISIBILITY=PUBLIC
build --build_metadata=TEST_GROUPS=//packages

View file

@ -0,0 +1,80 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
// Inspired on https://github.com/buildbuddy-io/buildbuddy/blob/master/workspace_status.sh
// This script will be run bazel when building process starts to
// generate key-value information that represents the status of the
// workspace. The output should be like
//
// KEY1 VALUE1
// KEY2 VALUE2
//
// If the script exits with non-zero code, it's considered as a failure
// and the output will be discarded.
(async () => {
const execa = require('execa');
const os = require('os');
async function runCmd(cmd, args) {
try {
return await execa(cmd, args);
} catch (e) {
return { exitCode: 1 };
}
}
// Git repo
const kbnGitOriginName = process.env.KBN_GIT_ORIGIN_NAME || 'origin';
const repoUrlCmdResult = await runCmd('git', [
'config',
'--get',
`remote.${kbnGitOriginName}.url`,
]);
if (repoUrlCmdResult.exitCode === 0) {
// Only output REPO_URL when found it
console.log(`REPO_URL ${repoUrlCmdResult.stdout}`);
}
// Commit SHA
const commitSHACmdResult = await runCmd('git', ['rev-parse', 'HEAD']);
if (commitSHACmdResult.exitCode !== 0) {
process.exit(1);
}
console.log(`COMMIT_SHA ${commitSHACmdResult.stdout}`);
// Git branch
const gitBranchCmdResult = await runCmd('git', ['rev-parse', '--abbrev-ref', 'HEAD']);
if (gitBranchCmdResult.exitCode !== 0) {
process.exit(1);
}
console.log(`GIT_BRANCH ${gitBranchCmdResult.stdout}`);
// Tree status
const treeStatusCmdResult = await runCmd('git', ['diff-index', '--quiet', 'HEAD', '--']);
const treeStatusVarStr = 'GIT_TREE_STATUS';
if (treeStatusCmdResult.exitCode === 0) {
console.log(`${treeStatusVarStr} Clean`);
} else {
console.log(`${treeStatusVarStr} Modified`);
}
// Host
if (process.env.CI) {
const hostCmdResult = await runCmd('hostname');
const hostStr = hostCmdResult.stdout.split('-').slice(0, -1).join('-');
const coresStr = os.cpus().filter((cpu, index) => {
return !cpu.model.includes('Intel') || index % 2 === 1;
}).length;
if (hostCmdResult.exitCode !== 0) {
process.exit(1);
}
console.log(`HOST ${hostStr}-${coresStr}`);
}
})();

View file

@ -1,57 +0,0 @@
#!/bin/bash
# Inspired on https://github.com/buildbuddy-io/buildbuddy/blob/master/workspace_status.sh
# This script will be run bazel when building process starts to
# generate key-value information that represents the status of the
# workspace. The output should be like
#
# KEY1 VALUE1
# KEY2 VALUE2
#
# If the script exits with non-zero code, it's considered as a failure
# and the output will be discarded.
# Git repo
repo_url=$(git config --get remote.origin.url)
if [[ $? != 0 ]];
then
exit 1
fi
echo "REPO_URL ${repo_url}"
# Commit SHA
commit_sha=$(git rev-parse HEAD)
if [[ $? != 0 ]];
then
exit 1
fi
echo "COMMIT_SHA ${commit_sha}"
# Git branch
repo_url=$(git rev-parse --abbrev-ref HEAD)
if [[ $? != 0 ]];
then
exit 1
fi
echo "GIT_BRANCH ${repo_url}"
# Tree status
git diff-index --quiet HEAD --
if [[ $? == 0 ]];
then
tree_status="Clean"
else
tree_status="Modified"
fi
echo "GIT_TREE_STATUS ${tree_status}"
# Host
if [ "$CI" = "true" ]; then
host=$(hostname | sed 's|\(.*\)-.*|\1|')
cores=$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}' )
if [[ $? != 0 ]];
then
exit 1
fi
echo "HOST ${host}-${cores}"
fi