Skip to content

Pull Request Labeler #720

Pull Request Labeler

Pull Request Labeler #720

Workflow file for this run

name: "Pull Request Labeler"
on:
pull_request_review:
types: [submitted]
pull_request_review_comment:
types: [created, deleted]
pull_request_target:
types: [opened, edited, reopened, synchronize]
jobs:
labeler:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Labeler
uses: actions/labeler@v5
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Fetch all branches
run: git fetch --all
- name: Determine base and head branches
id: branches
run: |
base_branch=$(jq -r '.pull_request.base.ref' "$GITHUB_EVENT_PATH")
head_branch=$(jq -r '.pull_request.head.ref' "$GITHUB_EVENT_PATH")
echo $base_branch
echo $head_branch
echo "base_branch=$base_branch" >> $GITHUB_ENV
echo "head_branch=$head_branch" >> $GITHUB_ENV
- name: Calculate diff size
id: diff
env:
BASE_BRANCH: ${{ env.base_branch }}
HEAD_BRANCH: ${{ env.head_branch }}
run: |
echo $BASE_BRANCH
echo $HEAD_BRANCH
git checkout $HEAD_BRANCH
git fetch origin $BASE_BRANCH
diff_output=$(git diff --shortstat origin/$BASE_BRANCH...$HEAD_BRANCH)
echo $diff_output
insertions=$(echo $diff_output | awk '{print ($4 == "" ? 0 : $4)}')
deletions=$(echo $diff_output | awk '{print ($6 == "" ? 0 : $6)}')
changed_lines=$((insertions + deletions))
echo $changed_lines
echo "changed_lines=$changed_lines" >> $GITHUB_ENV
- name: Determine label
env:
CHANGED_LINES: ${{ env.changed_lines }}
id: label
run: |
changed_lines=$CHANGED_LINES
if [ "$changed_lines" -le 9 ]; then
label="size:s"
elif [ "$changed_lines" -le 50 ]; then
label="size:m"
elif [ "$changed_lines" -le 100 ]; then
label="size:l"
elif [ "$changed_lines" -le 500 ]; then
label="size:xl"
else
label="size:xxl"
fi
echo "label=$label" >> $GITHUB_ENV
- name: Fetch current labels
id: fetch_labels
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const { data: labels } = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
return labels.map(label => label.name);
- name: Remove old size labels
id: remove_labels
uses: actions/github-script@v7
env:
NEW_SIZE_LABEL: ${{ env.label }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const sizeLabels = ['size:s', 'size:m', 'size:l', 'size:xl', 'size:xxl'];
const newLabel = "${{ env.NEW_SIZE_LABEL }}";
const currentLabels = ${{ steps.fetch_labels.outputs.result }};
const labelsToRemove = currentLabels.filter(label => sizeLabels.includes(label) && label !== newLabel);
for (const label of labelsToRemove) {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
name: label,
});
}
- name: Add label to PR
uses: actions-ecosystem/action-add-labels@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
labels: ${{ env.label }}
add_lgtm_label:
runs-on: ubuntu-latest
if: github.event.review.state == 'APPROVED'
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Add LGTM label
uses: actions-ecosystem/action-add-labels@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
labels: lgtm