name: "Pull Request: Validate"

on:
  pull_request:

concurrency:
  group: ${{ github.head_ref }}-pr-validate
  # cancel-in-progress: true

jobs:
  pr-changes:
    name: Collect PR changes
    runs-on:
      group: default
    outputs:
      addedOrModified: ${{ steps.collect-changes.outputs.changesDetected }}
      addedOrModifiedFiles: ${{ steps.collect-changes.outputs.addedOrModifiedFiles }}
      addedOrModifiedCharts: ${{ steps.collect-changes.outputs.addedOrModifiedCharts }}
    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Collect changes
        id: collect-changes
        uses: ./.github/actions/collect-changes

  common-tests:
    uses: ./.github/workflows/common-tests.yaml

  charts-lint:
    uses: ./.github/workflows/charts-lint.yaml
    needs:
      - pr-changes
    with:
      checkoutCommit: ${{ needs.charts-changelog.outputs.commitHash }}
      chartChangesDetected: ${{ needs.pr-changes.outputs.addedOrModified }}
      modifiedFiles: ${{ needs.pr-changes.outputs.addedOrModifiedFiles }}
      modifiedCharts: ${{ needs.pr-changes.outputs.addedOrModifiedCharts }}

  charts-test:
    uses: ./.github/workflows/charts-test.yaml
    needs:
      - pr-changes
      - charts-lint
    with:
      checkoutCommit: ${{ needs.charts-changelog.outputs.commitHash }}
      chartChangesDetected: ${{ needs.pr-changes.outputs.addedOrModified }}
      modifiedCharts: ${{ needs.pr-changes.outputs.addedOrModifiedCharts }}

  website-and-docs:
    uses: ./.github/workflows/charts-release.yaml

  print_head_msg:
    name: Print commit message
    runs-on:
      group: default
    outputs:
      head-commit-message: ${{ steps.get_head_commit_message.outputs.headCommitMsg }}
      pr-title: ${{ github.event.pull_request.title }}
    steps:
      - name: Get repo
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: verbose head git commit message
        run: echo "$(git show -s --format=%s)"
      - name: Print head git commit message
        id: get_head_commit_message
        run: echo "::set-output name=headCommitMsg::$(git show -s --format=%s)"
      - name: Print PR title
        run: |
          echo "PR title: ${{ github.event.pull_request.title }}"

  finished:
    name: Finished PR Tests
    runs-on:
      group: default
    if: always()
    needs:
      - pr-changes
      - charts-lint
      - charts-test
      - website-and-docs
      - print_head_msg
      - common-tests
    steps:
      - name: Check Results
        run: |
          if [[ "${{ needs.pr-changes.result }}" != "success" || \
                "${{ needs.charts-lint.result }}" != "success" || \
                "${{ needs.charts-test.result }}" != "success" || \
                "${{ needs.website-and-docs.result }}" != "success" || \
                "${{ needs.common-tests.result }}" != "success" || \
                "${{ needs.print_head_msg.result }}" != "success" ]]; then
            echo "One or more jobs failed!"
            exit 1
          else
            echo "All jobs succeeded!"
          fi
