---
name: Release

on:
  release:
    types:
      - published

jobs:
  ansible-lint:
    uses: redhat-cop/infra.lvm_snapshots/.github/workflows/ansible-lint.yml@main
  pylint:
    uses: redhat-cop/infra.lvm_snapshots/.github/workflows/pylint.yml@main
  pycodestyle:
    uses: redhat-cop/infra.lvm_snapshots/.github/workflows/pycodestyle.yml@main
  shellcheck:
    uses: redhat-cop/infra.lvm_snapshots/.github/workflows/shellcheck.yml@main
  codespell:
    uses: redhat-cop/infra.lvm_snapshots/.github/workflows/codespell.yml@main
  prechecks:
    needs:
      - ansible-lint
      - pylint
      - pycodestyle
      - shellcheck
      - codespell
    runs-on: ubuntu-latest
    steps:
      - run: >-
          python -c "assert set([
          '${{ needs.ansible-lint.result }}',
          '${{ needs.pylint.result }}',
          '${{ needs.pycodestyle.result }}',
          '${{ needs.shellcheck.result }}',
          '${{ needs.codespell.result }}',
          ]) == {'success'}"
  infra_release:
    needs:
      - prechecks
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v4
        with:
          python-version: '3.x'

      - name: Install Ansible
        run: pip install --upgrade ansible-core

      - name: Update version in galaxy.yml
        run: sed -i 's/version:.*$/version:{{:dumb_space_issue:}}${{ github.ref_name }}/' galaxy.yml; sed -i 's/{{:dumb_space_issue:}}/ /' galaxy.yml

      - name: Build collection
        run: ansible-galaxy collection build -vvv
        shell: bash
        working-directory: ${{ vars.GITHUB_PATH }}

      - name: Get tar name
        run: echo "tar_file=$(ls | grep '.tar')" >> $GITHUB_OUTPUT
        id: build

      - name: Get version
        run: echo "NUM=$(cat galaxy.yml | grep version | cut -d ':' -f 2 | awk '{print $1}')" >> $GITHUB_OUTPUT
        id: vers

      - name: Install collection
        run: ansible-galaxy collection install ./infra-lvm_snapshots-${{ steps.vers.outputs.NUM }}.tar.gz -p /home/runner/collections
        shell: bash
        working-directory: ${{ vars.GITHUB_PATH }}

      - name: Publish to Automation Hub
        run: |
          cat << EOF > ansible.cfg
          [galaxy]
          server_list = rh_automation_hub
          [galaxy_server.rh_automation_hub]
          url=https://cloud.redhat.com/api/automation-hub/
          auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
          token=${{ secrets.CONSOLE_API_KEY }}
          EOF
          ansible-galaxy collection publish ${{ steps.build.outputs.tar_file }}
          rm ansible.cfg

      - name: Publish to galaxy
        run: ansible-galaxy collection publish --api-key=${{ secrets.GALAXY_INFRA_KEY }} ${{ steps.build.outputs.tar_file }}

      - name: Upload files to tag
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: ${{ steps.build.outputs.tar_file }}
          tag: ${{ github.ref }}
          overwrite: true
  changelog:
    needs:
      - infra_release
    runs-on: ubuntu-latest
    env:
      ANSIBLE_FORCE_COLOR: 1
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v4
        with:
          python-version: '3.x'

      - name: Install Ansible
        run: pip install --upgrade ansible-core antsibull-changelog

      - name: Update version in galaxy.yml
        run: sed -i 's/version:.*$/version:{{:dumb_space_issue:}}${{ github.ref_name }}/' galaxy.yml; sed -i 's/{{:dumb_space_issue:}}/ /' galaxy.yml

      - name: Run changelog
        run: antsibull-changelog release --verbose --version ${{ github.ref_name }}

      - name: Create Pull Request
        id: prcreate
        uses: peter-evans/create-pull-request@v3
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: Update changelog ${{ github.ref_name }}
          committer: GitHub <noreply@github.com>
          author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
          signoff: false
          base: main
          branch: changelog-patches
          delete-branch: true
          title: '[RELEASE] Update changelog ${{ github.ref_name }}'
          body: |
            Update changelog
            - Updated with changelog for release ${{ github.ref_name }}
            - Auto-generated by [create-pull-request][1]

            [1]: https://github.com/peter-evans/create-pull-request
          labels: |
            changelog
            automated pr
          draft: false
...
