# This workflow assists with initial triage of new issues by applying labels
# based on data provided in the issue.
#
# Configuration file that maps issue form input values to labels:
#   advanced-issue-labeler.yml
#
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
# For more information, see:
# https://github.com/stefanbuck/github-issue-parser
# https://github.com/redhat-plumbers-in-action/advanced-issue-labeler

name: Issue Triage Workflow

on:
  issues:
    types: [ opened ]

jobs:
  triage_issue:
    name: Triage Issue
    runs-on: ubuntu-latest

    strategy:
      matrix:
        template: [ bug_report.yml, documentation_request.yml, feature_request.yml ]

    permissions:
      issues: write

    steps:
      - uses: actions/checkout@v4

      - name: Parse Issue Form
        uses: stefanbuck/github-issue-parser@v3
        id: issue-parser
        with:
          issue-body: ${{ github.event.issue.body }}
          template-path: .github/ISSUE_TEMPLATE/${{ matrix.template }}

      - name: Apply Labels from Triage
        uses: redhat-plumbers-in-action/advanced-issue-labeler@v3
        with:
          issue-form: ${{ steps.issue-parser.outputs.jsonString }}
          template: ${{ matrix.template }}
          token: ${{ secrets.GITHUB_TOKEN }}

      - name: Update Assignee
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          FIX_OWNER: ${{ steps.issue-parser.outputs.issueparser_fix_owner }}
        run: |
          if [[ $FIX_OWNER == "I will fix it" ]] || [[ $FIX_OWNER == "I will make the change" ]] || [[ $FIX_OWNER == "I will implement the feature" ]]
          then
            gh issue edit ${{ github.event.issue.html_url }} --add-assignee ${{ github.event.issue.user.login }}
          fi
