diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml new file mode 100644 index 0000000000..b16ce9eeb1 --- /dev/null +++ b/.github/workflows/auto-label.yml @@ -0,0 +1,71 @@ +name: Devtron-auto-labeller + +on: + issue_comment: + types: [created] + + +jobs: + manage-labels: + if: ${{ !github.event.issue.pull_request }} + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Parse and manage labels + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -e + set -x # Enable debugging + + # Extract comment on body and issue number + COMMENT_BODY=$(jq -r '.comment.body' "$GITHUB_EVENT_PATH") + ISSUE_NUMBER=$(jq -r '.issue.number // .pull_request.number' "$GITHUB_EVENT_PATH") + + ORG_NAME="devtron-labs" + + # checks if the person is authorized to add labels or not + ORG_MEMBERSHIP_STATUS=$(gh api "orgs/$ORG_NAME/members/$COMMENT_AUTHOR" --silent --exit-status) + + if [[ $? -ne 0 ]]; then + gh issue comment "$ISSUE_NUMBER" --body "Hi @$COMMENT_AUTHOR, you must be a member of the organization '$ORG_NAME' to add or remove labels." + + echo "User '$COMMENT_AUTHOR' is not a member of the organization '$ORG_NAME'. Exiting." + exit 1 + fi + + echo "User '$COMMENT_AUTHOR' is a verified member of the organization '$ORG_NAME'. Adding label" + + + # Get the existing labels on the issue + EXISTING_LABELS=$(gh issue view "$ISSUE_NUMBER" --json labels -q '.labels[].name') + + # Add Label + if [[ "$COMMENT_BODY" =~ ^/([^ ]+)$ ]]; then + LABEL_NAME="${COMMENT_BODY:1}" + + # check for already existing labels in reppo + if gh label list --json name -q '.[].name' | grep -q "^$LABEL_NAME$"; then + # Add the requested label, keeping existing ones intact + gh issue edit "$ISSUE_NUMBER" --add-label "$LABEL_NAME" + echo "Successfully added label '$LABEL_NAME' to issue #$ISSUE_NUMBER." + else + echo "The label '$LABEL_NAME' doesn't exist in the repository. You may need to create a label first." + fi + fi + + # Remove Label Logic + if [[ "$COMMENT_BODY" =~ ^/remove[[:space:]](.+)$ ]]; then + LABEL_NAME_TO_REMOVE=$(echo "$COMMENT_BODY" | sed -n 's|/remove ||p') + + # Remove the specified label + if echo "$EXISTING_LABELS" | grep -q "^$LABEL_NAME_TO_REMOVE$"; then + gh issue edit "$ISSUE_NUMBER" --remove-label "$LABEL_NAME_TO_REMOVE" + echo "Successfully removed label '$LABEL_NAME_TO_REMOVE' from issue #$ISSUE_NUMBER." + else + echo "The label '$LABEL_NAME_TO_REMOVE' is not attached to issue #$ISSUE_NUMBER." + fi + fi \ No newline at end of file