This will make the qemu/kvm tests be tested in either ascending or descending ASCII order. This should give us better test coverage of clean up scenarios which may fail depending on the order of the previous tests. Rename the qemu/kvm tests so that the statuses are shorter and more intuitive. Improve qemu/kvm test failure error reporting. Signed-off-by: Rich Megginson <rmeggins@redhat.com>
194 lines
7.1 KiB
YAML
194 lines
7.1 KiB
YAML
---
|
|
name: Test
|
|
on: # yamllint disable-line rule:truthy
|
|
pull_request:
|
|
merge_group:
|
|
branches:
|
|
- main
|
|
types:
|
|
- checks_requested
|
|
push:
|
|
branches:
|
|
- main
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
# This is required for the ability to create/update the Pull request status
|
|
statuses: write
|
|
jobs:
|
|
scenario:
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
scenario:
|
|
# QEMU
|
|
- { image: "centos-9", env: "qemu-ansible-core-2.16" }
|
|
- { image: "centos-10", env: "qemu-ansible-core-2.17" }
|
|
# ansible/libdnf5 bug: https://issues.redhat.com/browse/RHELMISC-10110
|
|
# - { image: "fedora-41", env: "qemu-ansible-core-2.17" }
|
|
- { image: "fedora-42", env: "qemu-ansible-core-2.17" }
|
|
|
|
# container
|
|
- { image: "centos-9", env: "container-ansible-core-2.16" }
|
|
- { image: "centos-9-bootc", env: "container-ansible-core-2.16" }
|
|
# broken on non-running dbus
|
|
# - { image: "centos-10", env: "container-ansible-core-2.17" }
|
|
- { image: "centos-10-bootc", env: "container-ansible-core-2.17" }
|
|
- { image: "fedora-41", env: "container-ansible-core-2.17" }
|
|
- { image: "fedora-42", env: "container-ansible-core-2.17" }
|
|
- { image: "fedora-41-bootc", env: "container-ansible-core-2.17" }
|
|
- { image: "fedora-42-bootc", env: "container-ansible-core-2.17" }
|
|
|
|
env:
|
|
TOX_ARGS: "--skip-tags tests::infiniband,tests::nvme,tests::scsi"
|
|
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Check if platform is supported
|
|
id: check_platform
|
|
run: |
|
|
set -euxo pipefail
|
|
image="${{ matrix.scenario.image }}"
|
|
image="${image%-bootc}"
|
|
|
|
# convert image to tag formats
|
|
platform=
|
|
platform_version=
|
|
case "$image" in
|
|
centos-*) platform=el; platform_version=el"${image#centos-}" ;;
|
|
fedora-*) platform=fedora; platform_version="${image/-/}" ;;
|
|
esac
|
|
supported=
|
|
if yq -e '.galaxy_info.galaxy_tags[] | select(. == "'${platform_version}'" or . == "'${platform}'")' meta/main.yml; then
|
|
supported=true
|
|
fi
|
|
|
|
# bootc build support (in buildah) has a separate flag
|
|
if [ "${{ matrix.scenario.image }}" != "$image" ]; then
|
|
if ! yq -e '.galaxy_info.galaxy_tags[] | select(. == "containerbuild")' meta/main.yml; then
|
|
supported=
|
|
fi
|
|
else
|
|
# roles need to opt into support for running in a system container
|
|
env="${{ matrix.scenario.env }}"
|
|
if [ "${env#container}" != "$env" ] &&
|
|
! yq -e '.galaxy_info.galaxy_tags[] | select(. == "container")' meta/main.yml; then
|
|
supported=
|
|
fi
|
|
fi
|
|
|
|
echo "supported=$supported" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Set up /dev/kvm
|
|
if: steps.check_platform.outputs.supported
|
|
run: |
|
|
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm.rules
|
|
sudo udevadm control --reload-rules
|
|
sudo udevadm trigger --name-match=kvm --settle
|
|
ls -l /dev/kvm
|
|
|
|
- name: Disable man-db to speed up package install
|
|
if: steps.check_platform.outputs.supported
|
|
run: |
|
|
echo "set man-db/auto-update false" | sudo debconf-communicate
|
|
sudo dpkg-reconfigure man-db
|
|
|
|
- name: Install test dependencies
|
|
if: steps.check_platform.outputs.supported
|
|
run: |
|
|
set -euxo pipefail
|
|
python3 -m pip install --upgrade pip
|
|
sudo apt update
|
|
sudo apt install -y --no-install-recommends git ansible-core genisoimage qemu-system-x86
|
|
pip3 install "git+https://github.com/linux-system-roles/tox-lsr@3.8.0"
|
|
|
|
- name: Configure tox-lsr
|
|
if: steps.check_platform.outputs.supported
|
|
run: >-
|
|
curl -o ~/.config/linux-system-roles.json
|
|
https://raw.githubusercontent.com/linux-system-roles/linux-system-roles.github.io/master/download/linux-system-roles.json
|
|
|
|
- name: Run qemu integration tests
|
|
if: steps.check_platform.outputs.supported && startsWith(matrix.scenario.env, 'qemu')
|
|
run: >-
|
|
tox -e ${{ matrix.scenario.env }} -- --image-name ${{ matrix.scenario.image }} --make-batch
|
|
--log-level=debug --skip-tags tests::infiniband,tests::nvme,tests::scsi --
|
|
|
|
- name: Qemu result summary
|
|
if: steps.check_platform.outputs.supported && startsWith(matrix.scenario.env, 'qemu') && always()
|
|
run: |
|
|
set -euo pipefail
|
|
# some platforms may have setup/cleanup playbooks - need to find the
|
|
# actual test playbook that starts with tests_
|
|
while read code start end test_files; do
|
|
for f in $test_files; do
|
|
f="$(basename $f)"
|
|
if [[ "$f" =~ ^tests_ ]]; then
|
|
break
|
|
fi
|
|
done
|
|
if [ "$code" = "0" ]; then
|
|
echo -n "PASS: "
|
|
else
|
|
echo -n "FAIL: "
|
|
fi
|
|
echo "$f"
|
|
done < batch.report
|
|
|
|
- name: Run container tox integration tests
|
|
if: steps.check_platform.outputs.supported && startsWith(matrix.scenario.env, 'container')
|
|
run: |
|
|
set -euo pipefail
|
|
# HACK: debug.py/profile.py setup is broken
|
|
export LSR_CONTAINER_PROFILE=false
|
|
export LSR_CONTAINER_PRETTY=false
|
|
rc=0
|
|
for t in tests/tests_*.yml; do
|
|
if tox -e ${{ matrix.scenario.env }} -- --image-name ${{ matrix.scenario.image }} $t > ${t}.log 2>&1; then
|
|
echo "PASS: $(basename $t)"
|
|
else
|
|
echo "FAIL: $(basename $t)"
|
|
rc=1
|
|
fi
|
|
done
|
|
exit $rc
|
|
|
|
- name: Upload test logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: "logs-${{ matrix.scenario.image }}-${{ matrix.scenario.env }}"
|
|
path: |
|
|
tests/*.log
|
|
artifacts/default_provisioners.log
|
|
artifacts/*.qcow2.*.log
|
|
batch.txt
|
|
batch.report
|
|
retention-days: 30
|
|
|
|
- name: Show test log failures
|
|
if: steps.check_platform.outputs.supported && failure()
|
|
run: |
|
|
set -euo pipefail
|
|
for f in tests/*.log; do
|
|
if FAIL=$(grep -E -B100 -A30 "fatal:|An exception occurred" "$f"); then
|
|
echo "::group::$(basename $f)"
|
|
echo "$FAIL"
|
|
echo "::endgroup::"
|
|
fi
|
|
done
|
|
|
|
- name: Set commit status as success with a description that platform is skipped
|
|
if: ${{ steps.check_platform.outputs.supported == '' }}
|
|
uses: myrotvorets/set-commit-status-action@master
|
|
with:
|
|
status: success
|
|
context: "${{ github.workflow }} / scenario (${{ matrix.scenario.image }}, ${{ matrix.scenario.env }}) (pull_request)"
|
|
description: The role does not support this platform. Skipping.
|
|
targetUrl: ""
|