Bazel: Migrate workspace status script to python
This allows to seamlessly build Gerrit on different operating systems. See also discussions in: [1], [2]. [1] https://github.com/bazelbuild/bazel/issues/5958 [2] https://github.com/bazelbuild/bazel/issues/10151 Change-Id: I7738a23c08f4890a2010182587b64a2979256ad4
This commit is contained in:
parent
df03895a49
commit
a7e95e5bc1
2
.bazelrc
2
.bazelrc
@ -1,4 +1,4 @@
|
|||||||
build --workspace_status_command=./tools/workspace-status.sh --strategy=Closure=worker
|
build --workspace_status_command="python ./tools/workspace_status.py" --strategy=Closure=worker
|
||||||
build --repository_cache=~/.gerritcodereview/bazel-cache/repository
|
build --repository_cache=~/.gerritcodereview/bazel-cache/repository
|
||||||
build --action_env=PATH
|
build --action_env=PATH
|
||||||
build --disk_cache=~/.gerritcodereview/bazel-cache/cas
|
build --disk_cache=~/.gerritcodereview/bazel-cache/cas
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# This script will be run by bazel when the build 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.
|
|
||||||
|
|
||||||
function rev() {
|
|
||||||
cd $1; git describe --always --match "v[0-9].*" --dirty
|
|
||||||
}
|
|
||||||
|
|
||||||
echo STABLE_BUILD_GERRIT_LABEL $(rev .)
|
|
||||||
for p in plugins/* ; do
|
|
||||||
test -d "$p" || continue
|
|
||||||
echo STABLE_BUILD_$(echo $(basename $p)_LABEL|tr '[a-z]' '[A-Z]' ) $(rev $p)
|
|
||||||
done
|
|
44
tools/workspace_status.py
Normal file
44
tools/workspace_status.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# This script will be run by bazel when the build 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.
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
ROOT = os.path.abspath(__file__)
|
||||||
|
while not os.path.exists(os.path.join(ROOT, 'WORKSPACE')):
|
||||||
|
ROOT = os.path.dirname(ROOT)
|
||||||
|
CMD = ['git', 'describe', '--always', '--match', 'v[0-9].*', '--dirty']
|
||||||
|
|
||||||
|
|
||||||
|
def revision(directory, parent):
|
||||||
|
try:
|
||||||
|
os.chdir(directory)
|
||||||
|
return subprocess.check_output(CMD).strip().decode("utf-8")
|
||||||
|
except OSError as err:
|
||||||
|
print('could not invoke git: %s' % err, file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
except subprocess.CalledProcessError as err:
|
||||||
|
print('error using git: %s' % err, file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
finally:
|
||||||
|
os.chdir(parent)
|
||||||
|
|
||||||
|
|
||||||
|
print("STABLE_BUILD_GERRIT_LABEL %s" % revision(ROOT, ROOT))
|
||||||
|
for d in os.listdir(os.path.join(ROOT, 'plugins')):
|
||||||
|
p = os.path.join('plugins', d)
|
||||||
|
if os.path.isdir(p):
|
||||||
|
v = revision(p, ROOT)
|
||||||
|
if v:
|
||||||
|
print('STABLE_BUILD_%s_LABEL %s' % (os.path.basename(p).upper(), v))
|
Loading…
Reference in New Issue
Block a user