| #!/bin/bash |
| |
| set -eou pipefail |
| set -x |
| |
| function util_ensure_available() { |
| local bin=$1 |
| if ! which "${bin}" |
| then |
| echo "Please install ${bin}" |
| return 1 |
| fi |
| return 0 |
| } |
| |
| function jenkins_get_job_config() { |
| local host="$1" |
| local job="$2" |
| local config |
| config="$(mktemp --suffix=.xml config.XXXXXX)" |
| local url="https://${host}/job/${job}/config.xml" |
| wget --output-document="${config}" "${url}" |
| echo "${config}" |
| } |
| |
| function jenkins_get_job_repos() { |
| local config="$1" |
| if [ -n "${REPO}" ] |
| then |
| echo "${REPO}" |
| return 0 |
| fi |
| # xmllint is rubbish, so we need sed(1) to separate the results |
| xmllint --xpath '//com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject/pattern' "${config}" | sed -e 's/<pattern>//g' -e 's/<\/pattern>/\n/g' |
| } |
| |
| : "${JENKINS_HOST:=openpower.xyz}" |
| : "${JENKINS_JOB:=openbmc-repository-ci}" |
| |
| util_ensure_available wget |
| util_ensure_available xmllint |
| util_ensure_available git |
| |
| CONFIG= |
| REPO= |
| |
| while [[ $# -gt 0 ]] |
| do |
| key="$1" |
| case "${key}" in |
| -c|--config) |
| CONFIG="$2" |
| shift 2 |
| ;; |
| -r|--repo|--repository) |
| REPO="$2" |
| shift 2 |
| ;; |
| -h|--help) |
| echo "USAGE: DISTRO=DOCKERBASE $0 --config config.xml" |
| echo |
| echo "DOCKERBASE is the Docker Hub tag of the base image against which to" |
| echo "build and test the repositories described in config.xml. Individual" |
| echo "repositories can be tested against DOCKERBASE with the --repository" |
| echo "option \(in place of --config\)." |
| exit 0 |
| ;; |
| *) |
| (>&2 echo Unrecognised argument \'"$1"\') |
| shift |
| ;; |
| esac |
| done |
| |
| if [ -z "${CONFIG}" ] |
| then |
| CONFIG="$(jenkins_get_job_config "${JENKINS_HOST}" "${JENKINS_JOB}")" |
| fi |
| |
| export UNIT_TEST_PKG= |
| export WORKSPACE= |
| |
| function git_clone_repo() { |
| local prj_package="$1" |
| local package |
| package="$(basename "${prj_package}")" |
| local workspace="$2" |
| if [ -d "${prj_package}" ] |
| then |
| git clone "${prj_package}" "${workspace}"/"${package}" |
| return |
| fi |
| git clone https://gerrit.openbmc.org/openbmc/"${package}" "${workspace}"/"${package}" |
| } |
| |
| jenkins_get_job_repos "${CONFIG}" | while read -r GERRIT_PROJECT |
| do |
| UNIT_TEST_PKG=$(basename "${GERRIT_PROJECT}") |
| WORKSPACE="$(mktemp -d --tmpdir openbmc-build-scripts.XXXXXX)" |
| git clone . "${WORKSPACE}"/openbmc-build-scripts |
| git_clone_repo "${GERRIT_PROJECT}" "${WORKSPACE}" |
| ./run-unit-test-docker.sh |
| rm -rf "${WORKSPACE}" |
| done |