131 lines
3.8 KiB
Bash
131 lines
3.8 KiB
Bash
#! /bin/bash -vex
|
|
|
|
set -x -e
|
|
|
|
echo "running as" $(id)
|
|
|
|
####
|
|
# Taskcluster friendly wrapper for performing fx desktop builds via mozharness.
|
|
####
|
|
|
|
# Inputs, with defaults
|
|
|
|
: MOZHARNESS_SCRIPT ${MOZHARNESS_SCRIPT}
|
|
: MOZHARNESS_CONFIG ${MOZHARNESS_CONFIG}
|
|
|
|
: TOOLTOOL_CACHE ${TOOLTOOL_CACHE:=/home/worker/tooltool-cache}
|
|
|
|
: RELENGAPI_TOKEN ${RELENGAPI_TOKEN+HIDDEN}
|
|
|
|
: NEED_XVFB ${NEED_XVFB:=false}
|
|
|
|
: MH_CUSTOM_BUILD_VARIANT_CFG ${MH_CUSTOM_BUILD_VARIANT_CFG}
|
|
: MH_BRANCH ${MH_BRANCH:=mozilla-central}
|
|
: MH_BUILD_POOL ${MH_BUILD_POOL:=staging}
|
|
|
|
: WORKSPACE ${WORKSPACE:=/home/worker/workspace}
|
|
|
|
set -v
|
|
|
|
export MOZ_CRASHREPORTER_NO_REPORT=1
|
|
export MOZ_OBJDIR=obj-firefox
|
|
export MOZ_SYMBOLS_EXTRA_BUILDID=linux64
|
|
export TINDERBOX_OUTPUT=1
|
|
|
|
# use "simple" package names so that they can be hard-coded in the task's
|
|
# extras.locations
|
|
export MOZ_SIMPLE_PACKAGE_NAME=target
|
|
|
|
# Ensure that in tree libraries can be found
|
|
export LIBRARY_PATH=$LIBRARY_PATH:$WORKSPACE/src/obj-firefox:$WORKSPACE/src/gcc/lib64
|
|
|
|
# test required parameters are supplied
|
|
if [[ -z ${MOZHARNESS_SCRIPT} ]]; then exit 1; fi
|
|
if [[ -z ${MOZHARNESS_CONFIG} ]]; then exit 1; fi
|
|
|
|
cleanup() {
|
|
if [ -n "$xvfb_pid" ]; then
|
|
kill $xvfb_pid || true
|
|
fi
|
|
}
|
|
trap cleanup EXIT INT
|
|
|
|
# run mozharness in XVfb, if necessary; this is an array to maintain the quoting in the -s argument
|
|
if $NEED_XVFB; then
|
|
# Some mozharness scripts set DISPLAY=:2
|
|
Xvfb :2 -screen 0 1024x768x24 &
|
|
export DISPLAY=:2
|
|
xvfb_pid=$!
|
|
# Only error code 255 matters, because it signifies that no
|
|
# display could be opened. As long as we can open the display
|
|
# tests should work. We'll retry a few times with a sleep before
|
|
# failing.
|
|
retry_count=0
|
|
max_retries=2
|
|
xvfb_test=0
|
|
until [ $retry_count -gt $max_retries ]; do
|
|
xvinfo || xvfb_test=$?
|
|
if [ $xvfb_test != 255 ]; then
|
|
retry_count=$(($max_retries + 1))
|
|
else
|
|
retry_count=$(($retry_count + 1))
|
|
echo "Failed to start Xvfb, retry: $retry_count"
|
|
sleep 2
|
|
fi done
|
|
if [ $xvfb_test == 255 ]; then exit 255; fi
|
|
fi
|
|
|
|
# set up mozharness configuration, via command line, env, etc.
|
|
|
|
debug_flag=""
|
|
if [ 0$DEBUG -ne 0 ]; then
|
|
debug_flag='--debug'
|
|
fi
|
|
|
|
custom_build_variant_cfg_flag=""
|
|
if [ -n "${MH_CUSTOM_BUILD_VARIANT_CFG}" ]; then
|
|
custom_build_variant_cfg_flag="--custom-build-variant-cfg=${MH_CUSTOM_BUILD_VARIANT_CFG}"
|
|
fi
|
|
|
|
set +x
|
|
# mozharness scripts look for the relengapi token at this location, so put it there,
|
|
# if specified
|
|
if [ -n "${RELENGAPI_TOKEN}" ]; then
|
|
echo 'Storing $RELENGAPI_TOKEN in /builds/relengapi.tok'
|
|
echo ${RELENGAPI_TOKEN} > /builds/relengapi.tok
|
|
# unset it so that mozharness doesn't "helpfully" log it
|
|
unset RELENGAPI_TOKEN
|
|
fi
|
|
set -x
|
|
|
|
# $TOOLTOOL_CACHE bypasses mozharness completely and is read by tooltool_wrapper.sh to set the
|
|
# cache. However, only some mozharness scripts use tooltool_wrapper.sh, so this may not be
|
|
# entirely effective.
|
|
export TOOLTOOL_CACHE
|
|
|
|
# support multiple, space delimited, config files
|
|
config_cmds=""
|
|
for cfg in $MOZHARNESS_CONFIG; do
|
|
config_cmds="${config_cmds} --config ${cfg}"
|
|
done
|
|
|
|
# Mozharness would ordinarily do the checkouts itself, but they are disabled
|
|
# here (--no-checkout-sources, --no-clone-tools) as the checkout is performed above.
|
|
|
|
python2.7 $WORKSPACE/build/src/testing/${MOZHARNESS_SCRIPT} ${config_cmds} \
|
|
$debug_flag \
|
|
$custom_build_variant_cfg_flag \
|
|
--disable-mock \
|
|
--no-setup-mock \
|
|
--no-checkout-sources \
|
|
--no-clone-tools \
|
|
--no-clobber \
|
|
--no-update \
|
|
--no-upload-files \
|
|
--no-sendchange \
|
|
--log-level=debug \
|
|
--work-dir=$WORKSPACE/build \
|
|
--no-action=generate-build-stats \
|
|
--branch=${MH_BRANCH} \
|
|
--build-pool=${MH_BUILD_POOL}
|