--- name: CI concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true # yamllint disable-line rule:truthy on: push: branches: - main pull_request: workflow_dispatch: # Run CI once per day (at 06:00 UTC) # This ensures that even if there haven't been commits that we are still # testing against latest version of ansible-test for each ansible-base version schedule: - cron: "0 6 * * *" jobs: check-tree-clean: runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v5 with: fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v6 with: python-version: 3.x cache: pip - name: Install tox run: | python -m pip install --upgrade pip pip install tox - name: Run make format run: | make format - name: Check if tree is clean run: | if [ -n "$(git status --porcelain)" ]; then echo "There are uncommitted changes!" exit 1 fi linter: runs-on: ubuntu-latest env: collection_dir: ansible_collections/kubevirt/core steps: - name: Check out code uses: actions/checkout@v5 with: path: ${{ env.collection_dir }} fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v6 with: python-version: 3.x cache: pip - name: Install yamllint, ansible, shellcheck run: | python -m pip install --upgrade pip pip install yamllint ansible-core ansible-lint sudo apt install -y shellcheck - name: Run yamllint run: | yamllint . working-directory: ${{ env.collection_dir }} - name: Run ansible-lint run: | ansible-lint --version # Remove --exclude flag once ansible-lint was updated to ignore ansible-compat's new cache location # See https://github.com/ansible/ansible-lint/issues/4477 ansible-lint -v --exclude .cache .ansible working-directory: ${{ env.collection_dir }} - name: Run shellcheck run: | find . -type f -iname '*.sh' -exec shellcheck {} \; working-directory: ${{ env.collection_dir }} needs: - check-tree-clean sanity: uses: ansible-network/github_actions/.github/workflows/sanity.yml@main needs: - linter with: matrix_exclude: >- [ { "ansible-version": "stable-2.16", "python-version": "3.13" }, { "ansible-version": "stable-2.16", "python-version": "3.14" }, { "ansible-version": "stable-2.17", "python-version": "3.13" }, { "ansible-version": "stable-2.17", "python-version": "3.14" }, { "ansible-version": "stable-2.18", "python-version": "3.10" }, { "ansible-version": "stable-2.18", "python-version": "3.14" }, { "ansible-version": "stable-2.19", "python-version": "3.10" }, { "ansible-version": "stable-2.19", "python-version": "3.14" }, { "ansible-version": "stable-2.20", "python-version": "3.10" }, { "ansible-version": "stable-2.20", "python-version": "3.11" }, { "ansible-version": "milestone", "python-version": "3.10" }, { "ansible-version": "milestone", "python-version": "3.11" }, { "ansible-version": "devel", "python-version": "3.10" }, { "ansible-version": "devel", "python-version": "3.11" } ] unit-source: uses: ansible-network/github_actions/.github/workflows/unit_source.yml@main needs: - linter with: matrix_exclude: >- [ { "ansible-version": "stable-2.16", "python-version": "3.13" }, { "ansible-version": "stable-2.16", "python-version": "3.14" }, { "ansible-version": "stable-2.17", "python-version": "3.13" }, { "ansible-version": "stable-2.17", "python-version": "3.14" }, { "ansible-version": "stable-2.18", "python-version": "3.10" }, { "ansible-version": "stable-2.18", "python-version": "3.14" }, { "ansible-version": "stable-2.19", "python-version": "3.10" }, { "ansible-version": "stable-2.19", "python-version": "3.14" }, { "ansible-version": "stable-2.20", "python-version": "3.10" }, { "ansible-version": "stable-2.20", "python-version": "3.11" }, { "ansible-version": "milestone", "python-version": "3.10" }, { "ansible-version": "milestone", "python-version": "3.11" }, { "ansible-version": "devel", "python-version": "3.10" }, { "ansible-version": "devel", "python-version": "3.11" } ] integration: uses: ./.github/workflows/integration.yml needs: - linter with: ansible_test_targets: >- [ "kubevirt_vm", "kubevirt_vm_info", "kubevirt_vmi_info", "inventory_kubevirt" ]