1
0
Fork 0
mirror of https://github.com/ansible-collections/hetzner.hcloud.git synced 2026-02-04 08:01:49 +00:00

Add Gitlab-CI (#3)

This commit is contained in:
Lukas Kämmerling 2020-05-06 07:44:05 +02:00 committed by GitHub
parent 363598811e
commit a2d00f8d7a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 207 additions and 0 deletions

80
tests/utils/gitlab/gitlab.sh Executable file
View file

@ -0,0 +1,80 @@
#!/usr/bin/env bash
set -o pipefail -eux
declare -a args
IFS='/:' read -ra args <<< "$1"
test="${args[0]}"
command -v python
python -V
function retry
{
for repetition in 1 2 3; do
set +e
"$@"
result=$?
set -e
if [ ${result} == 0 ]; then
return ${result}
fi
echo "$@ -> ${result}"
done
echo "Command '$@' failed 3 times!"
exit -1
}
command -v pip
pip --version
pip list --disable-pip-version-check
retry pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check
export ANSIBLE_COLLECTIONS_PATHS="${HOME}/.ansible"
SHIPPABLE_RESULT_DIR="$(pwd)/shippable"
TEST_DIR="${ANSIBLE_COLLECTIONS_PATHS}/ansible_collections/hetzner/hcloud"
mkdir -p "${TEST_DIR}"
cp -r "." "${TEST_DIR}"
cd "${TEST_DIR}"
# STAR: HACK install dependencies
retry ansible-galaxy -vvv collection install community.general
retry ansible-galaxy -vvv collection install ansible.netcommon
retry pip install netaddr --disable-pip-version-check
retry pip install hcloud
# END: HACK
export PYTHONIOENCODING='utf-8'
if [ "${JOB_TRIGGERED_BY_NAME:-}" == "nightly-trigger" ]; then
COMPLETE=yes
fi
if [ -n "${COMPLETE:-}" ]; then
# disable change detection triggered by setting the COMPLETE environment variable to a non-empty value
export CHANGED=""
elif [[ "${CI_COMMIT_MESSAGE}" =~ ci_complete ]]; then
# disable change detection triggered by having 'ci_complete' in the latest commit message
export CHANGED=""
else
# enable change detection (default behavior)
export CHANGED=""
fi
export UNSTABLE="--allow-unstable-changed"
# remove empty core/extras module directories from PRs created prior to the repo-merge
find plugins -type d -empty -print -delete
ansible-test env --dump --show --timeout "50" --color -v
group="${args[1]}"
if [[ "${test}" =~ integration ]]; then
bash tests/utils/gitlab/integration.sh "shippable/hcloud/group${group}/"
else
bash tests/utils/gitlab/sanity.sh "sanity/${group}"
fi

View file

@ -0,0 +1,15 @@
#!/usr/bin/env bash
target="$1"
HCLOUD_TOKEN=$(cat hcloud_token.txt)
changed_all_target="shippable/${cloud}/smoketest/"
echo "[default]
hcloud_api_token=${HCLOUD_TOKEN}
" >> $(pwd)/tests/integration/cloud-config-hcloud.ini
# shellcheck disable=SC2086
export SHIPPABLE="true"
export SHIPPABLE_BUILD_NUMBER="gl-$(cat prefix.txt)"
export SHIPPABLE_JOB_NUMBER="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 2 | head -n 1)"
ansible-test integration --color --local -v "${target}" ${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} ${UNSTABLE:+"$UNSTABLE"}

42
tests/utils/gitlab/sanity.sh Executable file
View file

@ -0,0 +1,42 @@
#!/usr/bin/env bash
set -o pipefail -eux
declare -a args
IFS='/:' read -ra args <<< "$1"
group="${args[1]}"
if [ "${BASE_BRANCH:-}" ]; then
base_branch="origin/${BASE_BRANCH}"
else
base_branch=""
fi
case "${group}" in
1) options=(--skip-test pylint --skip-test ansible-doc --skip-test validate-modules) ;;
2) options=( --test ansible-doc --test validate-modules) ;;
3) options=(--test pylint plugins/modules/) ;;
4) options=(--test pylint --exclude plugins/modules/) ;;
esac
# allow collection migration sanity tests for groups 3 and 4 to pass without updating this script during migration
network_path="lib/ansible/modules/network/"
if [ -d "${network_path}" ]; then
if [ "${group}" -eq 3 ]; then
options+=(--exclude "${network_path}")
elif [ "${group}" -eq 4 ]; then
options+=("${network_path}")
fi
fi
pip install pycodestyle
pip install yamllint
pip install voluptuous
pip install pylint
# shellcheck disable=SC2086
ansible-test sanity --color -v --junit ${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} \
--base-branch "${base_branch}" \
--exclude shippable.yml --exclude tests/utils/ \
"${options[@]}" --allow-disabled