mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
[WIP] Removed windows dep and unify shippable.sh (#38)
* Removed windows dep and unify shippable.sh * Removed uneeded -p * Fix chmod. * Update tests/utils/shippable/shippable.sh Co-Authored-By: John R Barker <john@johnrbarker.com> * Distribute sanity tests into groups. * Remove docs-build test, which doesn't yet exist for collections. * Remove package-data. * Remove unsupported option. * Fix paths. Co-authored-by: Jordan Borean <jborean93@gmail.com> Co-authored-by: John R Barker <john@johnrbarker.com>
This commit is contained in:
parent
7ead1c14fc
commit
a91ebb4e97
6 changed files with 120 additions and 77 deletions
|
@ -1,9 +1,6 @@
|
||||||
- name: postgresql_ext - install postgis on Linux
|
- name: postgresql_ext - install postgis on Linux
|
||||||
package: name=postgis state=present
|
package: name=postgis state=present
|
||||||
when: ansible_os_family != "Windows"
|
when: ansible_os_family != "Windows"
|
||||||
- name: postgresql_ext - install postgis on Windows
|
|
||||||
when: ansible_os_family == "Windows"
|
|
||||||
ansible.windows.win_package: name=postgis state=present
|
|
||||||
- name: postgresql_ext - create schema schema1
|
- name: postgresql_ext - create schema schema1
|
||||||
become_user: '{{ pg_user }}'
|
become_user: '{{ pg_user }}'
|
||||||
become: true
|
become: true
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
- name: delete temporary directory (windows)
|
|
||||||
ansible.windows.win_file:
|
|
||||||
path: '{{ remote_tmp_dir }}'
|
|
||||||
state: absent
|
|
|
@ -1,10 +0,0 @@
|
||||||
- name: create temporary directory
|
|
||||||
register: remote_tmp_dir
|
|
||||||
notify:
|
|
||||||
- delete temporary directory (windows)
|
|
||||||
ansible.windows.win_tempfile:
|
|
||||||
state: directory
|
|
||||||
suffix: .test
|
|
||||||
- name: record temporary directory
|
|
||||||
set_fact:
|
|
||||||
remote_tmp_dir: '{{ remote_tmp_dir.path }}'
|
|
|
@ -1,5 +1,4 @@
|
||||||
integration_tests_dependencies:
|
integration_tests_dependencies:
|
||||||
- ansible.windows
|
|
||||||
- ansible.posix
|
- ansible.posix
|
||||||
- community.crypto
|
- community.crypto
|
||||||
- ansible.netcommon
|
- ansible.netcommon
|
||||||
|
|
|
@ -2,6 +2,37 @@
|
||||||
|
|
||||||
set -o pipefail -eux
|
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 ) ;;
|
||||||
|
3) options=( --test validate-modules) ;;
|
||||||
|
4) options=(--test pylint --exclude tests/unit/ --exclude plugins/module_utils/) ;;
|
||||||
|
5) options=(--test pylint tests/unit/ plugins/module_utils/) ;;
|
||||||
|
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
|
||||||
|
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
ansible-test sanity --color -v --junit ${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} \
|
ansible-test sanity --color -v --junit ${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} \
|
||||||
--docker \
|
--docker --base-branch "${base_branch}" \
|
||||||
|
"${options[@]}" --allow-disabled
|
||||||
|
|
|
@ -29,8 +29,36 @@ python -V
|
||||||
command -v pip
|
command -v pip
|
||||||
pip --version
|
pip --version
|
||||||
pip list --disable-pip-version-check
|
pip list --disable-pip-version-check
|
||||||
|
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/community/general"
|
||||||
|
mkdir -p "${TEST_DIR}"
|
||||||
|
cp -aT "${SHIPPABLE_BUILD_DIR}" "${TEST_DIR}"
|
||||||
|
cd "${TEST_DIR}"
|
||||||
|
|
||||||
|
# STAR: HACK install dependencies
|
||||||
|
ansible-galaxy -vvv collection install ansible.posix
|
||||||
|
ansible-galaxy -vvv collection install community.crypto
|
||||||
|
ansible-galaxy -vvv collection install ansible.netcommon
|
||||||
|
|
||||||
|
# unit tests
|
||||||
|
ansible-galaxy -vvv collection install community.kubernetes
|
||||||
|
ansible-galaxy -vvv collection install netbox.netbox
|
||||||
|
ansible-galaxy -vvv collection install netapp.ontap
|
||||||
|
ansible-galaxy -vvv collection install cisco.meraki
|
||||||
|
ansible-galaxy -vvv collection install fortinet.fortios
|
||||||
|
ansible-galaxy -vvv collection install junipernetworks.junos
|
||||||
|
ansible-galaxy -vvv collection install cisco.aci
|
||||||
|
ansible-galaxy -vvv collection install google.cloud
|
||||||
|
ansible-galaxy -vvv collection install community.kubernetes
|
||||||
|
ansible-galaxy -vvv collection install f5networks.f5_modules
|
||||||
|
|
||||||
|
# Needed until https://github.com/ansible/ansible/issues/68415 is fixed:
|
||||||
|
chmod -R a+rX "${ANSIBLE_COLLECTIONS_PATHS}/ansible_collections"
|
||||||
|
# END: HACK
|
||||||
|
|
||||||
export PATH="${PWD}/bin:${PATH}"
|
|
||||||
export PYTHONIOENCODING='utf-8'
|
export PYTHONIOENCODING='utf-8'
|
||||||
|
|
||||||
if [ "${JOB_TRIGGERED_BY_NAME:-}" == "nightly-trigger" ]; then
|
if [ "${JOB_TRIGGERED_BY_NAME:-}" == "nightly-trigger" ]; then
|
||||||
|
@ -68,47 +96,81 @@ else
|
||||||
export UNSTABLE=""
|
export UNSTABLE=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
virtualenv --python /usr/bin/python3.7 ~/ansible-venv
|
# remove empty core/extras module directories from PRs created prior to the repo-merge
|
||||||
set +ux
|
find plugins -type d -empty -print -delete
|
||||||
. ~/ansible-venv/bin/activate
|
|
||||||
set -ux
|
|
||||||
|
|
||||||
#pip install ansible==2.9.0 --disable-pip-version-check
|
|
||||||
pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check
|
|
||||||
|
|
||||||
COLLECTION_DIR="${HOME}/.ansible/ansible_collections/"
|
|
||||||
TEST_DIR="${COLLECTION_DIR}/community/general"
|
|
||||||
mkdir -p "${TEST_DIR}"
|
|
||||||
cp -aT "${SHIPPABLE_BUILD_DIR}" "${TEST_DIR}"
|
|
||||||
cd "${TEST_DIR}"
|
|
||||||
|
|
||||||
function cleanup
|
function cleanup
|
||||||
{
|
{
|
||||||
|
# for complete on-demand coverage generate a report for all files with no coverage on the "sanity/5" job so we only have one copy
|
||||||
|
if [ "${COVERAGE}" == "--coverage" ] && [ "${CHANGED}" == "" ] && [ "${test}" == "sanity/5" ]; then
|
||||||
|
stub="--stub"
|
||||||
|
# trigger coverage reporting for stubs even if no other coverage data exists
|
||||||
|
mkdir -p tests/output/coverage/
|
||||||
|
else
|
||||||
|
stub=""
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -d tests/output/coverage/ ]; then
|
if [ -d tests/output/coverage/ ]; then
|
||||||
if find tests/output/coverage/ -mindepth 1 -name '.*' -prune -o -print -quit | grep -q .; then
|
if find tests/output/coverage/ -mindepth 1 -name '.*' -prune -o -print -quit | grep -q .; then
|
||||||
# for complete on-demand coverage generate a report for all files with no coverage on the "other" job so we only have one copy
|
process_coverage='yes' # process existing coverage files
|
||||||
if [ "${COVERAGE}" == "--coverage" ] && [ "${CHANGED}" == "" ] && [ "${test}" == "sanity/1" ]; then
|
elif [ "${stub}" ]; then
|
||||||
stub="--stub"
|
process_coverage='yes' # process coverage when stubs are enabled
|
||||||
else
|
else
|
||||||
stub=""
|
process_coverage=''
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "${process_coverage}" ]; then
|
||||||
|
# use python 3.7 for coverage to avoid running out of memory during coverage xml processing
|
||||||
|
# only use it for coverage to avoid the additional overhead of setting up a virtual environment for a potential no-op job
|
||||||
|
virtualenv --python /usr/bin/python3.7 ~/ansible-venv
|
||||||
|
set +ux
|
||||||
|
. ~/ansible-venv/bin/activate
|
||||||
|
set -ux
|
||||||
|
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
ansible-test coverage xml --color -v --requirements --group-by command --group-by version ${stub:+"$stub"}
|
ansible-test coverage xml --color --requirements --group-by command --group-by version ${stub:+"$stub"}
|
||||||
cp -a tests/output/reports/coverage=*.xml shippable/codecoverage/
|
cp -a tests/output/reports/coverage=*.xml "$SHIPPABLE_RESULT_DIR/codecoverage/"
|
||||||
|
|
||||||
|
# analyze and capture code coverage aggregated by integration test target
|
||||||
|
ansible-test coverage analyze targets generate -v "$SHIPPABLE_RESULT_DIR/testresults/coverage-analyze-targets.json"
|
||||||
|
|
||||||
|
# upload coverage report to codecov.io only when using complete on-demand coverage
|
||||||
|
if [ "${COVERAGE}" == "--coverage" ] && [ "${CHANGED}" == "" ]; then
|
||||||
|
for file in tests/output/reports/coverage=*.xml; do
|
||||||
|
flags="${file##*/coverage=}"
|
||||||
|
flags="${flags%-powershell.xml}"
|
||||||
|
flags="${flags%.xml}"
|
||||||
|
# remove numbered component from stub files when converting to tags
|
||||||
|
flags="${flags//stub-[0-9]*/stub}"
|
||||||
|
flags="${flags//=/,}"
|
||||||
|
flags="${flags//[^a-zA-Z0-9_,]/_}"
|
||||||
|
|
||||||
|
bash <(curl -s https://codecov.io/bash) \
|
||||||
|
-f "${file}" \
|
||||||
|
-F "${flags}" \
|
||||||
|
-n "${test}" \
|
||||||
|
-t 20636cf5-4d6a-4b9a-8d2d-6f22ebbaa752 \
|
||||||
|
-X coveragepy \
|
||||||
|
-X gcov \
|
||||||
|
-X fix \
|
||||||
|
-X search \
|
||||||
|
-X xcode \
|
||||||
|
|| echo "Failed to upload code coverage report to codecov.io: ${file}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d tests/output/junit/ ]; then
|
if [ -d tests/output/junit/ ]; then
|
||||||
cp -aT tests/output/junit/ shippable/testresults/
|
cp -aT tests/output/junit/ "$SHIPPABLE_RESULT_DIR/testresults/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d tests/output/data/ ]; then
|
if [ -d tests/output/data/ ]; then
|
||||||
cp -a tests/output/data/ shippable/testresults/
|
cp -a tests/output/data/ "$SHIPPABLE_RESULT_DIR/testresults/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d tests/output/bot/ ]; then
|
if [ -d tests/output/bot/ ]; then
|
||||||
cp -aT tests/output/bot/ shippable/testresults/
|
cp -aT tests/output/bot/ "$SHIPPABLE_RESULT_DIR/testresults/"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,41 +179,9 @@ trap cleanup EXIT
|
||||||
if [[ "${COVERAGE:-}" == "--coverage" ]]; then
|
if [[ "${COVERAGE:-}" == "--coverage" ]]; then
|
||||||
timeout=60
|
timeout=60
|
||||||
else
|
else
|
||||||
timeout=45
|
timeout=50
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# STAR: HACK install dependencies
|
|
||||||
(
|
|
||||||
#ansible.windows doesn't install from Galaxy
|
|
||||||
mkdir /tmp/collection_deps
|
|
||||||
git clone https://github.com/ansible-collections/ansible.windows.git /tmp/collection_deps/ansible.windows
|
|
||||||
cd /tmp/collection_deps/ansible.windows
|
|
||||||
ansible-galaxy collection build
|
|
||||||
ansible-galaxy collection install /tmp/collection_deps/ansible.windows/ansible-windows* -p "${COLLECTION_DIR}"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
#ansible-galaxy collection install ansible.windows -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install ansible.posix -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install community.crypto -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install ansible.netcommon -p "${COLLECTION_DIR}"
|
|
||||||
|
|
||||||
# unit tests
|
|
||||||
ansible-galaxy collection install community.kubernetes -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install netbox.netbox -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install netapp.ontap -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install cisco.meraki -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install fortinet.fortios -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install junipernetworks.junos -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install cisco.aci -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install google.cloud -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install community.kubernetes -p "${COLLECTION_DIR}"
|
|
||||||
ansible-galaxy collection install f5networks.f5_modules -p "${COLLECTION_DIR}"
|
|
||||||
|
|
||||||
chmod -R a+rX "${COLLECTION_DIR}"
|
|
||||||
|
|
||||||
# END: HACK
|
|
||||||
|
|
||||||
ansible-test env --dump --show --timeout "${timeout}" --color -v
|
ansible-test env --dump --show --timeout "${timeout}" --color -v
|
||||||
|
|
||||||
"tests/utils/shippable/check_matrix.py"
|
"tests/utils/shippable/check_matrix.py"
|
||||||
|
|
Loading…
Reference in a new issue