ci: several changes related to new qemu test, ansible-lint, python versions, ubuntu versions

There is a new QEMU based test which uses the qemu/kvm capability of
github action runners.  This is the basis for new bootc/image mode tests
which we will be rolling out in the near future.

ansible-lint requires that the collection path is set so that the requirements
it installs are installed in the correct place.

There has been some general github action deprecation of python versions and
ubuntu versions that we have had to fix.

Remove `CONTRIBUTOR` from the list of users who can trigger citest.

For more information, see

* https://github.com/linux-system-roles/.github/pull/98
* https://github.com/linux-system-roles/.github/pull/94
* https://github.com/linux-system-roles/.github/pull/93
* https://github.com/linux-system-roles/.github/pull/92
* https://github.com/linux-system-roles/.github/pull/91

Signed-off-by: Rich Megginson <rmeggins@redhat.com>
This commit is contained in:
Rich Megginson
2025-04-11 13:17:45 -06:00
committed by Richard Megginson
parent 0aa8f2aff8
commit fa134b8aab
8 changed files with 137 additions and 12 deletions
+3 -1
View File
@@ -32,7 +32,7 @@ jobs:
- name: Install tox, tox-lsr
run: |
set -euxo pipefail
pip3 install "git+https://github.com/linux-system-roles/tox-lsr@3.4.0"
pip3 install "git+https://github.com/linux-system-roles/tox-lsr@3.5.1"
- name: Convert role to collection format
id: collection
@@ -80,3 +80,5 @@ jobs:
with:
working_directory: ${{ github.workspace }}/.tox/ansible_collections/${{ env.LSR_ROLE2COLL_NAMESPACE }}/${{ env.LSR_ROLE2COLL_NAME }}
requirements_file: ${{ steps.collection.outputs.coll_req_file }}
env:
ANSIBLE_COLLECTIONS_PATH: ${{ github.workspace }}/.tox
@@ -30,7 +30,7 @@ jobs:
- name: Install tox, tox-lsr
run: |
set -euxo pipefail
pip3 install "git+https://github.com/linux-system-roles/tox-lsr@3.4.0"
pip3 install "git+https://github.com/linux-system-roles/tox-lsr@3.5.1"
- name: Run ansible-plugin-scan
run: |
+1 -1
View File
@@ -33,7 +33,7 @@ jobs:
- name: Install tox, tox-lsr
run: |
set -euxo pipefail
pip3 install "git+https://github.com/linux-system-roles/tox-lsr@3.4.0"
pip3 install "git+https://github.com/linux-system-roles/tox-lsr@3.5.1"
- name: Convert role to collection format
run: |
@@ -0,0 +1,129 @@
---
name: QEMU/KVM Integration tests
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:
qemu_kvm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
scenario:
- { 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" }
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 }}"
# 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
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.5.1"
- 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/kvm tox integration tests
if: steps.check_platform.outputs.supported
run: >-
tox -e ${{ matrix.scenario.env }} -- --image-name ${{ matrix.scenario.image }} --make-batch
--log-level=debug --skip-tags tests::infiniband --
- name: Test result summary
if: steps.check_platform.outputs.supported && 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: Show test logs on failure
if: steps.check_platform.outputs.supported && failure()
run: |
set -euo pipefail
for f in tests/*.log; do
echo "::group::$(basename $f)"
cat "$f"
echo "::endgroup::"
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 }} / qemu_kvm (${{ matrix.scenario.image }}, ${{ matrix.scenario.env }}) (pull_request)"
description: The role does not support this platform. Skipping.
targetUrl: ""
+1 -1
View File
@@ -21,7 +21,7 @@ jobs:
if: |
github.event.issue.pull_request
&& contains(github.event.comment.body, '[citest]')
&& (contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR"]'), github.event.comment.author_association)
&& (contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
|| contains('systemroller', github.event.comment.user.login))
runs-on: ubuntu-latest
outputs:
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
if: |
github.event.issue.pull_request
&& contains(fromJson('["[citest_bad]", "[citest-bad]", "[citest bad]"]'), github.event.comment.body)
&& contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR"]'), github.event.comment.author_association)
&& contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
permissions:
actions: write # for re-running failed jobs: https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#re-run-a-job-from-a-workflow-run
runs-on: ubuntu-latest