network/.github/workflows/ansible-lint.yml
Rich Megginson 0748c5d500 ci: Use ansible 2.19 for fedora 42 testing; support python 3.13
NOTE: This also requires upgrading to tox-lsr 3.11.0

Ansible 2.19 will be released soon and has some changes which will
require fixes in system roles.  This adds 2.19 to our testing matrix
on fedora 42 so that we can start addressing these issues.

python 3.13 is now being used on some platforms.

Signed-off-by: Rich Megginson <rmeggins@redhat.com>
2025-06-10 08:57:02 -06:00

84 lines
2.9 KiB
YAML

---
name: Ansible Lint
on: # yamllint disable-line rule:truthy
pull_request:
merge_group:
branches:
- main
types:
- checks_requested
push:
branches:
- main
workflow_dispatch:
env:
LSR_ROLE2COLL_NAMESPACE: fedora
LSR_ROLE2COLL_NAME: linux_system_roles
permissions:
contents: read
jobs:
ansible_lint:
runs-on: ubuntu-latest
steps:
- name: Update pip, git
run: |
set -euxo pipefail
sudo apt update
sudo apt install -y git
- name: Checkout repo
uses: actions/checkout@v4
- name: Install tox, tox-lsr
run: |
set -euxo pipefail
pip3 install "git+https://github.com/linux-system-roles/tox-lsr@3.11.0"
- name: Convert role to collection format
id: collection
run: |
set -euxo pipefail
TOXENV=collection lsr_ci_runtox
coll_dir=".tox/ansible_collections/$LSR_ROLE2COLL_NAMESPACE/$LSR_ROLE2COLL_NAME"
# cleanup after collection conversion
rm -rf "$coll_dir/.ansible" .tox/ansible-plugin-scan
# ansible-lint action requires a .git directory???
# https://github.com/ansible/ansible-lint/blob/main/action.yml#L45
mkdir -p "$coll_dir/.git"
meta_req_file="${{ github.workspace }}/meta/collection-requirements.yml"
test_req_file="${{ github.workspace }}/tests/collection-requirements.yml"
if [ -f "$meta_req_file" ] && [ -f "$test_req_file" ]; then
coll_req_file="${{ github.workspace }}/req.yml"
python -c 'import sys; import yaml
hsh1 = yaml.safe_load(open(sys.argv[1]))
hsh2 = yaml.safe_load(open(sys.argv[2]))
coll = {}
for item in hsh1["collections"] + hsh2["collections"]:
if isinstance(item, dict):
name = item["name"]
rec = item
else:
name = item # assume string
rec = {"name": name}
if name not in coll:
coll[name] = rec
hsh1["collections"] = list(coll.values())
yaml.safe_dump(hsh1, open(sys.argv[3], "w"))' "$meta_req_file" "$test_req_file" "$coll_req_file"
echo merged "$coll_req_file"
cat "$coll_req_file"
elif [ -f "$meta_req_file" ]; then
coll_req_file="$meta_req_file"
elif [ -f "$test_req_file" ]; then
coll_req_file="$test_req_file"
else
coll_req_file=""
fi
echo "coll_req_file=$coll_req_file" >> $GITHUB_OUTPUT
- name: Run ansible-lint
uses: ansible/ansible-lint@v25
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