---
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@v6

      - name: Install tox, tox-lsr
        run: |
          set -euxo pipefail
          pip3 install "git+https://github.com/linux-system-roles/tox-lsr@3.14.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
