123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- #! /bin/bash -xe
- set -x -e
- echo "running as" $(id)
- # Detect release version.
- . /etc/lsb-release
- if [ "${DISTRIB_RELEASE}" == "12.04" ]; then
- UBUNTU_1204=1
- elif [ "${DISTRIB_RELEASE}" == "16.04" ]; then
- UBUNTU_1604=1
- fi
- . /home/worker/scripts/xvfb.sh
- ####
- # Taskcluster friendly wrapper for performing fx desktop tests via mozharness.
- ####
- # Inputs, with defaults
- : MOZHARNESS_PATH ${MOZHARNESS_PATH}
- : MOZHARNESS_URL ${MOZHARNESS_URL}
- : MOZHARNESS_SCRIPT ${MOZHARNESS_SCRIPT}
- : MOZHARNESS_CONFIG ${MOZHARNESS_CONFIG}
- : NEED_XVFB ${NEED_XVFB:=true}
- : NEED_WINDOW_MANAGER ${NEED_WINDOW_MANAGER:=false}
- : NEED_PULSEAUDIO ${NEED_PULSEAUDIO:=false}
- : START_VNC ${START_VNC:=false}
- : TASKCLUSTER_INTERACTIVE ${TASKCLUSTER_INTERACTIVE:=false}
- : WORKSPACE ${WORKSPACE:=/home/worker/workspace}
- : mozharness args "${@}"
- set -v
- cd $WORKSPACE
- fail() {
- echo # make sure error message is on a new line
- echo "[test-linux.sh:error]" "${@}"
- exit 1
- }
- maybe_start_pulse() {
- if $NEED_PULSEAUDIO; then
- pulseaudio --fail --daemonize --start
- pactl load-module module-null-sink
- fi
- }
- # test required parameters are supplied
- if [ -z "${MOZHARNESS_PATH}" -a -z "${MOZHARNESS_URL}" ]; then
- fail "MOZHARNESS_PATH or MOZHARNESS_URL must be defined";
- fi
- if [[ -z ${MOZHARNESS_SCRIPT} ]]; then fail "MOZHARNESS_SCRIPT is not set"; fi
- if [[ -z ${MOZHARNESS_CONFIG} ]]; then fail "MOZHARNESS_CONFIG is not set"; fi
- mkdir -p ~/artifacts/public
- cleanup() {
- local rv=$?
- if [[ -s /home/worker/.xsession-errors ]]; then
- # To share X issues
- cp /home/worker/.xsession-errors ~/artifacts/public/xsession-errors.log
- fi
- cleanup_xvfb
- exit $rv
- }
- trap cleanup EXIT INT
- # Download mozharness with exponential backoff
- # curl already applies exponential backoff, but not for all
- # failed cases, apparently, as we keep getting failed downloads
- # with 404 code.
- download_mozharness() {
- local max_attempts=10
- local timeout=1
- local attempt=0
- echo "Downloading mozharness"
- while [[ $attempt < $max_attempts ]]; do
- if curl --fail -o mozharness.zip --retry 10 -L $MOZHARNESS_URL; then
- rm -rf mozharness
- if unzip -q mozharness.zip; then
- return 0
- fi
- echo "error unzipping mozharness.zip" >&2
- else
- echo "failed to download mozharness zip" >&2
- fi
- echo "Download failed, retrying in $timeout seconds..." >&2
- sleep $timeout
- timeout=$((timeout*2))
- attempt=$((attempt+1))
- done
- fail "Failed to download and unzip mozharness"
- }
- # Download mozharness if we're told to.
- if [ ${MOZHARNESS_URL} ]; then
- download_mozharness
- rm mozharness.zip
- if ! [ -d mozharness ]; then
- fail "mozharness zip did not contain mozharness/"
- fi
- MOZHARNESS_PATH=`pwd`/mozharness
- fi
- # pulseaudio daemon must be started before xvfb on Ubuntu 12.04.
- if [ "${UBUNTU_1204}" ]; then
- maybe_start_pulse
- fi
- # run XVfb in the background, if necessary
- if $NEED_XVFB; then
- start_xvfb '1600x1200x24' 0
- fi
- if $START_VNC; then
- x11vnc > ~/artifacts/public/x11vnc.log 2>&1 &
- fi
- if $NEED_WINDOW_MANAGER; then
- # This is read by xsession to select the window manager
- echo DESKTOP_SESSION=ubuntu > /home/worker/.xsessionrc
- # note that doing anything with this display before running Xsession will cause sadness (like,
- # crashes in compiz). Make sure that X has enough time to start
- sleep 15
- # DISPLAY has already been set above
- # XXX: it would be ideal to add a semaphore logic to make sure that the
- # window manager is ready
- /etc/X11/Xsession 2>&1 &
- # Turn off the screen saver and screen locking
- gsettings set org.gnome.desktop.screensaver idle-activation-enabled false
- gsettings set org.gnome.desktop.screensaver lock-enabled false
- gsettings set org.gnome.desktop.screensaver lock-delay 3600
- # Disable the screen saver
- xset s off s reset
- if [ "${UBUNTU_1604}" ]; then
- # start compiz for our window manager
- compiz 2>&1 &
- #TODO: how to determine if compiz starts correctly?
- fi
- fi
- if [ "${UBUNTU_1604}" ]; then
- maybe_start_pulse
- fi
- # For telemetry purposes, the build process wants information about the
- # source it is running; tc-vcs obscures this a little, but we can provide
- # it directly.
- export MOZ_SOURCE_REPO="${GECKO_HEAD_REPOSITORY}"
- export MOZ_SOURCE_CHANGESET="${GECKO_HEAD_REV}"
- # support multiple, space delimited, config files
- config_cmds=""
- for cfg in $MOZHARNESS_CONFIG; do
- config_cmds="${config_cmds} --config-file ${MOZHARNESS_PATH}/configs/${cfg}"
- done
- mozharness_bin="/home/worker/bin/run-mozharness"
- # Save the computed mozharness command to a binary which is useful
- # for interactive mode.
- echo -e "#!/usr/bin/env bash
- # Some mozharness scripts assume base_work_dir is in
- # the current working directory, see bug 1279237
- cd $WORKSPACE
- cmd=\"python2.7 ${MOZHARNESS_PATH}/scripts/${MOZHARNESS_SCRIPT} ${config_cmds} ${@} \${@}\"
- echo \"Running: \${cmd}\"
- exec \${cmd}" > ${mozharness_bin}
- chmod +x ${mozharness_bin}
- # In interactive mode, the user will be prompted with options for what to do.
- if ! $TASKCLUSTER_INTERACTIVE; then
- # run the given mozharness script and configs, but pass the rest of the
- # arguments in from our own invocation
- ${mozharness_bin};
- fi
|