---
name: "Collection Tests 🧪"

concurrency:
  group: ${{ github.head_ref || github.run_id }}-${{ github.event_name }}
  cancel-in-progress: true

on:  # yamllint disable-line rule:truthy
  push:
    branches: [main]
  pull_request_target:
    branches: [main]
  workflow_dispatch:
  schedule:
    - cron: "0 0 * * *"

jobs:
  sonar:
    name: SonarCloud
    uses: ansible/ansible-content-actions/.github/workflows/sonarcloud.yaml@main
    with:
      python_version: "3.12"
      galaxy_dependencies: |
        git+https://github.com/ansible-collections/ansible.utils.git
      test_command: "pip install passlib && pytest tests/unit -v --cov-report xml --cov=./"
    secrets:
      SONAR_TOKEN: ${{ secrets.ANSIBLE_COLLECTIONS_ORG_SONAR_TOKEN_CICD_BOT }}
  changelog:
    uses: ansible/ansible-content-actions/.github/workflows/changelog.yaml@main
    if: github.event_name == 'pull_request_target'
  build-import:
    uses: ansible/ansible-content-actions/.github/workflows/build_import.yaml@main
  ansible-lint:
    uses: ansible/ansible-content-actions/.github/workflows/ansible_lint.yaml@main
  sanity:
    uses: ansible/ansible-content-actions/.github/workflows/sanity.yaml@main
  unit-galaxy:
    uses: ansible/ansible-content-actions/.github/workflows/unit.yaml@main
  unit-source:
    uses: ansible-network/github_actions/.github/workflows/unit_source.yml@main
    with:
      collection_pre_install: >-
        git+https://github.com/ansible-collections/ansible.utils.git

  report-status:
    if: ${{ always() && github.event_name == 'schedule' }}
    needs:
      - changelog
      - build-import
      - sanity
      - unit-galaxy
      - ansible-lint
      - unit-source
    uses: ansible/ansible-content-actions/.github/workflows/upload_upstream_results.yaml@main
    with:
      job_context: ${{ toJSON(needs) }}
      component_name: ${{ github.event.repository.name }}
      UPLOAD_USER: ${{ vars.PDE_ORG_RESULTS_AGGREGATOR_UPLOAD_USER }}
      UPLOAD_URL: ${{ vars.PDE_ORG_RESULTS_AGGREGATOR_UPLOAD_URL }}
    secrets:
      UPLOAD_PASSWORD: ${{ secrets.PDE_ORG_RESULTS_UPLOAD_PASSWORD }}

  all_green:
    if: ${{ always() }}
    needs:
      - changelog
      - build-import
      - sanity
      - unit-galaxy
      - unit-source
      - ansible-lint
      - sonar
      - report-status
    runs-on: ubuntu-latest
    steps:
      - run: >-
          python -c "assert 'failure' not in
          set([
          '${{ needs.changelog.result }}',
          '${{ needs.sanity.result }}',
          '${{ needs.unit-galaxy.result }}',
          '${{ needs.ansible-lint.result }}',
          '${{ needs.unit-source.result }}',
          '${{ needs.sonar.result }}',
          '${{ needs.report-status.result }}'
          ])"
