#!/bin/sh set -eux env # TODO: add support for other posix environments container=freebsd build_dir="${HOME}/ansible" test_target="${TARGET:-}" test_flags="${TEST_FLAGS:-}" # Force ansible color output by default. # To disable color force mode use FORCE_COLOR=0 force_color="${FORCE_COLOR:-1}" # FIXME: these tests fail skip_tags='test_copy,test_template,test_unarchive,test_command_shell,test_sudo,test_become,test_service,test_postgresql,test_mysql_db,test_mysql_user,test_mysql_variables,test_uri,test_get_url' cd ~/ # ssl certificate errors using fetch, so install curl pkg install -y curl if [ ! -f bootstrap.sh ]; then curl "https://raw.githubusercontent.com/mattclay/ansible-hacking/master/bootstrap.sh" -o bootstrap.sh fi chmod +x bootstrap.sh ./bootstrap.sh pip -y -q # tests require these packages # TODO: bootstrap.sh should be capable of installing these pkg install -y \ bash \ devel/ruby-gems \ mercurial \ rsync \ ruby \ subversion \ sudo \ zip # TODO: bootstrap.sh should install these pip install \ junit-xml \ virtualenv # FIXME: tests assume bash is in /bin/bash if [ ! -f /bin/bash ]; then ln -s /usr/local/bin/bash /bin/bash fi # FIXME: tests assume true is in /bin/true if [ ! -f /bin/true ]; then ln -s /usr/bin/true /bin/true fi # FIXME: async doesn't work with ansible_python_interpreter, see: https://github.com/ansible/ansible/issues/14101 if [ ! -f /usr/bin/python ]; then ln -s /usr/local/bin/python /usr/bin/python fi # Tests assume loopback addresses other than 127.0.0.1 will work. # Add aliases for loopback addresses used by tests. for i in 3 4 254; do ifconfig lo0 alias "127.0.0.${i}" up done ifconfig lo0 # Since tests run as root, we also need to be able to ssh to localhost as root. sed -i '' 's/^# *PermitRootLogin.*$/PermitRootLogin yes/;' /etc/ssh/sshd_config # Restart sshd for configuration changes and loopback aliases to work. service sshd restart # Generate our ssh key and add it to our authorized_keys file. # We also need to add localhost's server keys to known_hosts. if [ ! -f "${HOME}/.ssh/id_rsa.pub" ]; then ssh-keygen -q -t rsa -N '' -f "${HOME}/.ssh/id_rsa" cp "${HOME}/.ssh/id_rsa.pub" "${HOME}/.ssh/authorized_keys" for key in /etc/ssh/ssh_host_*_key.pub; do pk=$(cat "${key}") echo "localhost ${pk}" >> "${HOME}/.ssh/known_hosts" done fi repo_name="${REPO_NAME:-ansible}" if [ -d "${build_dir}" ]; then cd "${build_dir}" elif [ "${repo_name}" = "ansible" ]; then git clone "${REPOSITORY_URL:-https://github.com/ansible/ansible.git}" "${build_dir}" cd "${build_dir}" if [ "${PULL_REQUEST:-false}" = "false" ]; then git checkout -f "${BRANCH:-devel}" -- git reset --hard "${COMMIT:-HEAD}" else git fetch origin "pull/${PULL_REQUEST}/head" git checkout -f FETCH_HEAD git merge "origin/${BRANCH}" fi git submodule init git submodule sync git submodule update else case "${repo_name}" in "ansible-modules-core") this_module_group="core" ;; "ansible-modules-extras") this_module_group="extras" ;; *) echo "Unsupported repo name: ${repo_name}" exit 1 ;; esac git clone "https://github.com/ansible/ansible.git" "${build_dir}" cd "${build_dir}" git submodule init git submodule sync git submodule update cd "${build_dir}/lib/ansible/modules/${this_module_group}" if [ "${PULL_REQUEST:-false}" = "false" ]; then echo "Only pull requests are supported for module repositories." exit else git fetch origin "pull/${PULL_REQUEST}/head" git checkout -f FETCH_HEAD git merge "origin/${BRANCH}" fi cd "${build_dir}" fi set +u . hacking/env-setup set -u cd test/integration # TODO: support httptester via reverse ssh tunnel rm -rf "/tmp/shippable" mkdir -p "/tmp/shippable/testresults" # TODO: enable jail test # shellcheck disable=SC2086 JUNIT_OUTPUT_DIR="/tmp/shippable/testresults" \ ANSIBLE_FORCE_COLOR="${force_color}" \ ANSIBLE_CALLBACK_WHITELIST=junit \ TEST_FLAGS="-e ansible_python_interpreter=/usr/local/bin/python2 --skip-tags '${skip_tags}' ${test_flags}" \ container="${container}" \ gmake ${test_target}