diff --git a/.github/workflows/pr-labels.yaml b/.github/workflows/pr-labels.yaml new file mode 100644 index 00000000..eab956f4 --- /dev/null +++ b/.github/workflows/pr-labels.yaml @@ -0,0 +1,50 @@ +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 \ No newline at end of file