Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Adds Github actions to add the label using slash command #6126

Merged
merged 11 commits into from
Nov 29, 2024
72 changes: 72 additions & 0 deletions .github/workflows/auto-label.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Devtron-auto-labeller

on:
issue_comment:
types: [created]


jobs:
manage-labels:
runs-on: ubuntu-latest

satyampsoni marked this conversation as resolved.
Show resolved Hide resolved
steps:
- name: Checkout Repository
uses: actions/checkout@v3

- name: Authenticate with GitHub CLI
satyampsoni marked this conversation as resolved.
Show resolved Hide resolved
run: |
echo ${{ secrets.GITHUB_TOKEN }} | gh auth login --with-token

- name: Parse and manage labels
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
Loading