name: Manage labels based on PR body on: pull_request: types: [opened, edited, reopened, synchronize] jobs: manage-labels: runs-on: ubuntu-latest steps: - name: Analyze PR Body and manage labels run: | body="${{ github.event.pull_request.body }}" labels_to_add=() labels_to_remove=() declare -A label_checks=( ["New feature"]="enhancement" ["Bug fix|Hotfix|Security patch"]="bug" ["Documentation update"]="documentation" ["Refactoring"]="refactor" ["UI/UX improvement"]="UI/UX" ) for key in "${!label_checks[@]}"; do if echo "$body" | grep -q "\- \[x\] $key"; then labels_to_add+=("${label_checks[$key]}") else labels_to_remove+=("${label_checks[$key]}") fi done echo "LABELS_TO_ADD=${labels_to_add[*]}" >> $GITHUB_ENV echo "LABELS_TO_REMOVE=${labels_to_remove[*]}" >> $GITHUB_ENV - name: Add labels if necessary if: env.LABELS_TO_ADD != '' run: | for label in ${{ env.LABELS_TO_ADD }}; do curl -s -X POST \ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ -H "Accept: application/vnd.github.v3+json" \ -d "{\"labels\": [\"$label\"]}" \ https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/labels done - name: Remove labels if necessary if: env.LABELS_TO_REMOVE != '' run: | for label in ${{ env.LABELS_TO_REMOVE }}; do curl -s -X DELETE \ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/labels/$label done