From 3dabee0cdcca553e4df078a7c16a32b9b4a45fdb Mon Sep 17 00:00:00 2001 From: adrinospy Date: Fri, 9 Feb 2024 22:24:04 +0530 Subject: [PATCH 1/8] added auto labeler based on size of changes --- .github/workflows/pr-labeler.yml | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/workflows/pr-labeler.yml diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml new file mode 100644 index 00000000000..c146a5c6aa2 --- /dev/null +++ b/.github/workflows/pr-labeler.yml @@ -0,0 +1,38 @@ +# set labels on Pull-Requests based on size of changes +# size is compared form first to last commit in the pull request +name: Size Labeler/Checker +on: + pull_request_target: + types: + - opened + - synchronize +jobs: + label-changes: + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - name: Check changes and label + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + CHANGES=$((${{github.event.pull_request.additions}} + ${{github.event.pull_request.deletions}})) + echo "Changed files: $CHANGES" + + THRESHOLD=200 + + PR_NUMBER="${{ github.event.number }}" + API_URL="https://api.github.com/repos/${{ github.repository }}/issues/${PR_NUMBER}/labels" + AUTH_HEADER="Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" + + if [ "$CHANGES" -le "$THRESHOLD" ]; then + LABEL="tiny" + DELETE_LABEL="huge" + else + LABEL="huge" + DELETE_LABEL="tiny" + fi + + echo "Adding label: $LABEL" + curl -X POST -H "$AUTH_HEADER" -d "{\"labels\":[\"$LABEL\"]}" "$API_URL" + curl -X DELETE -H "$AUTH_HEADER" "$API_URL/$DELETE_LABEL" \ No newline at end of file From 6c4ac86aa73b2f9a06c985957727e437b039d622 Mon Sep 17 00:00:00 2001 From: adrinospy Date: Sun, 11 Feb 2024 16:48:18 +0530 Subject: [PATCH 2/8] added new labels for different thresholds --- .github/workflows/pr-labeler.yml | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index c146a5c6aa2..b4f3c76e3f3 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -17,22 +17,32 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | CHANGES=$((${{github.event.pull_request.additions}} + ${{github.event.pull_request.deletions}})) - echo "Changed files: $CHANGES" + echo "Changes Made: $CHANGES" - THRESHOLD=200 + MINIMAL_THRESHOLD=50 + SMALL_THRESHOLD=100 + MODERATE_THRESHOLD=300 PR_NUMBER="${{ github.event.number }}" API_URL="https://api.github.com/repos/${{ github.repository }}/issues/${PR_NUMBER}/labels" AUTH_HEADER="Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" - if [ "$CHANGES" -le "$THRESHOLD" ]; then - LABEL="tiny" - DELETE_LABEL="huge" + DELETE_LABELS=("minimal" "small" "moderate" "large") + + if [ "$CHANGES" -le "$MINIMAL_THRESHOLD" ]; then + LABEL="minimal" + elif [ "$CHANGES" -le "$SMALL_THRESHOLD" ]; then + LABEL="small" + elif [ "$CHANGES" -le "$MODERATE_THRESHOLD" ]; then + LABEL="moderate" else - LABEL="huge" - DELETE_LABEL="tiny" + LABEL="large" fi + DELETE_LABELS=("${DELETE_LABELS[@]/$LABEL}") + echo "Adding label: $LABEL" curl -X POST -H "$AUTH_HEADER" -d "{\"labels\":[\"$LABEL\"]}" "$API_URL" - curl -X DELETE -H "$AUTH_HEADER" "$API_URL/$DELETE_LABEL" \ No newline at end of file + for DELETE_LABEL in "${DELETE_LABELS[@]}"; do + curl -X DELETE -H "$AUTH_HEADER" "$API_URL/$DELETE_LABEL" + done From 0563c507a45bcd9dcc6689564f16b9fd0170058f Mon Sep 17 00:00:00 2001 From: adrinospy Date: Mon, 4 Mar 2024 04:31:30 +0530 Subject: [PATCH 3/8] added functionality to ignore blank lines --- .github/workflows/sync_labels.yml | 63 +++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/.github/workflows/sync_labels.yml b/.github/workflows/sync_labels.yml index 56fe526eb8e..d174170d804 100644 --- a/.github/workflows/sync_labels.yml +++ b/.github/workflows/sync_labels.yml @@ -64,3 +64,66 @@ jobs: GITHUB_TOKEN: ${{ env.TOKEN }} REPO_URL: ${{ github.event.repository.html_url }} LOG_LEVEL: ${{ vars.SYNC_LABELS_LOG_LEVEL }} # variable from repository settings, values can be "--debug", "--info" or "--warning" + + # add labels based on size + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Add labels based on size + run: | + git fetch origin ${{ github.base_ref }} + CHANGES=$(git diff --ignore-all-space ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}) + CHANGES=$(echo "$CHANGES" | grep -E '^[+\-]' | grep -vE '^\+\+\+|^\-\-\-') + + # ignore blank lines + CHANGES=$(echo "$CHANGES" | grep -vE '^[\+\-]\s*$') + + # count total no of lines + CHANGES=$(echo "$CHANGES" | wc -l) + + echo "CHANGES MADE: $CHANGES" + + MINIMAL_THRESHOLD=50 + + SMALL_THRESHOLD=100 + MODERATE_THRESHOLD=300 + + PR_NUMBER="${{ github.event.number }}" + API_URL="https://api.github.com/repos/${{ github.repository }}/issues/${PR_NUMBER}/labels" + AUTH_HEADER="Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" + + DELETE_LABELS=("v: minimal" "v: small" "v: moderate" "v: large") + + if [ "$CHANGES" -le "$MINIMAL_THRESHOLD" ]; then + LABEL="v: minimal" + elif [ "$CHANGES" -le "$SMALL_THRESHOLD" ]; then + LABEL="v: small" + elif [ "$CHANGES" -le "$MODERATE_THRESHOLD" ]; then + LABEL="v: moderate" + else + LABEL="v: large" + fi + + DELETE_LABELS=("${DELETE_LABELS[@]//${LABEL}}") + + echo "Adding label: $LABEL" + curl -X POST \ + -H "$AUTH_HEADER" \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + -d "{\"labels\":[\"$LABEL\"]}" \ + "$API_URL" >/dev/null + + echo "Deleting Labels:" + for DELETE_LABEL in "${DELETE_LABELS[@]}"; do + ENCODED_LABEL=$(echo "$DELETE_LABEL" | sed 's/ /%20/g') + curl -X DELETE \ + -H "Accept: application/vnd.github+json" \ + -H "$AUTH_HEADER" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "$API_URL/$ENCODED_LABEL" >/dev/null + done + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From da0903d961e3d878bf990d32d8a9a3a9dd561d5b Mon Sep 17 00:00:00 2001 From: adrinospy Date: Tue, 12 Mar 2024 12:27:58 +0530 Subject: [PATCH 4/8] no of changes depends on repo variable and checks if repo variables exists --- .github/workflows/pr-labeler.yml | 73 +++++++++++++++++++------------ .github/workflows/sync_labels.yml | 63 -------------------------- 2 files changed, 46 insertions(+), 90 deletions(-) diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index b4f3c76e3f3..3b5c28cf478 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -1,48 +1,67 @@ -# set labels on Pull-Requests based on size of changes -# size is compared form first to last commit in the pull request name: Size Labeler/Checker on: pull_request_target: types: - opened - synchronize + - edited jobs: label-changes: runs-on: ubuntu-latest permissions: pull-requests: write steps: - - name: Check changes and label - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - CHANGES=$((${{github.event.pull_request.additions}} + ${{github.event.pull_request.deletions}})) - echo "Changes Made: $CHANGES" - - MINIMAL_THRESHOLD=50 - SMALL_THRESHOLD=100 - MODERATE_THRESHOLD=300 + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + - name: Add labels based on size + run: | + if [[ -z "${{ vars.SMALL_THRESHOLD }}" || -z "${{ vars.MODERATE_THRESHOLD }}" || -z "${{ vars.LARGE_THRESHOLD }}" ]]; then + echo "One or more environment variables are not set." + exit 1 + fi + git fetch origin ${{ github.base_ref }} + CHANGES=$(git diff --ignore-all-space ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}) + CHANGES=$(echo "$CHANGES" | grep -E '^[+\-]' | grep -vE '^\+\+\+|^\-\-\-') + # ignore blank lines + CHANGES=$(echo "$CHANGES" | grep -vE '^[\+\-]\s*$') + # count total no of lines + CHANGES=$(echo "$CHANGES" | wc -l) + echo "CHANGES MADE: $CHANGES" + SMALL_THRESHOLD=${{vars.SMALL_THRESHOLD}} + MODERATE_THRESHOLD=${{vars.MODERATE_THRESHOLD}} + LARGE_THRESHOLD=${{vars.LARGE_THRESHOLD}} PR_NUMBER="${{ github.event.number }}" API_URL="https://api.github.com/repos/${{ github.repository }}/issues/${PR_NUMBER}/labels" AUTH_HEADER="Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" - - DELETE_LABELS=("minimal" "small" "moderate" "large") - - if [ "$CHANGES" -le "$MINIMAL_THRESHOLD" ]; then - LABEL="minimal" - elif [ "$CHANGES" -le "$SMALL_THRESHOLD" ]; then - LABEL="small" - elif [ "$CHANGES" -le "$MODERATE_THRESHOLD" ]; then - LABEL="moderate" + DELETE_LABELS=("v: minimal" "v: small" "v: moderate" "v: large") + if [ "$CHANGES" -gt "$SMALL_THRESHOLD" ]; then + LABEL="v: small" + elif [ "$CHANGES" -gt "$MODERATE_THRESHOLD" ]; then + LABEL="v: moderate" + elif [ "$CHANGES" -gt "$LARGE_THRESHOLD" ]; then + LABEL="v: large" else - LABEL="large" + LABEL="v: minimal" fi - - DELETE_LABELS=("${DELETE_LABELS[@]/$LABEL}") - + DELETE_LABELS=("${DELETE_LABELS[@]//${LABEL}}") echo "Adding label: $LABEL" - curl -X POST -H "$AUTH_HEADER" -d "{\"labels\":[\"$LABEL\"]}" "$API_URL" + curl -X POST \ + -H "$AUTH_HEADER" \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + -d "{\"labels\":[\"$LABEL\"]}" \ + "$API_URL" >/dev/null + echo "Deleting Labels:" for DELETE_LABEL in "${DELETE_LABELS[@]}"; do - curl -X DELETE -H "$AUTH_HEADER" "$API_URL/$DELETE_LABEL" + ENCODED_LABEL=$(echo "$DELETE_LABEL" | sed 's/ /%20/g') + curl -X DELETE \ + -H "Accept: application/vnd.github+json" \ + -H "$AUTH_HEADER" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "$API_URL/$ENCODED_LABEL" >/dev/null done + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/sync_labels.yml b/.github/workflows/sync_labels.yml index d174170d804..56fe526eb8e 100644 --- a/.github/workflows/sync_labels.yml +++ b/.github/workflows/sync_labels.yml @@ -64,66 +64,3 @@ jobs: GITHUB_TOKEN: ${{ env.TOKEN }} REPO_URL: ${{ github.event.repository.html_url }} LOG_LEVEL: ${{ vars.SYNC_LABELS_LOG_LEVEL }} # variable from repository settings, values can be "--debug", "--info" or "--warning" - - # add labels based on size - - name: Checkout code - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - - - name: Add labels based on size - run: | - git fetch origin ${{ github.base_ref }} - CHANGES=$(git diff --ignore-all-space ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}) - CHANGES=$(echo "$CHANGES" | grep -E '^[+\-]' | grep -vE '^\+\+\+|^\-\-\-') - - # ignore blank lines - CHANGES=$(echo "$CHANGES" | grep -vE '^[\+\-]\s*$') - - # count total no of lines - CHANGES=$(echo "$CHANGES" | wc -l) - - echo "CHANGES MADE: $CHANGES" - - MINIMAL_THRESHOLD=50 - - SMALL_THRESHOLD=100 - MODERATE_THRESHOLD=300 - - PR_NUMBER="${{ github.event.number }}" - API_URL="https://api.github.com/repos/${{ github.repository }}/issues/${PR_NUMBER}/labels" - AUTH_HEADER="Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" - - DELETE_LABELS=("v: minimal" "v: small" "v: moderate" "v: large") - - if [ "$CHANGES" -le "$MINIMAL_THRESHOLD" ]; then - LABEL="v: minimal" - elif [ "$CHANGES" -le "$SMALL_THRESHOLD" ]; then - LABEL="v: small" - elif [ "$CHANGES" -le "$MODERATE_THRESHOLD" ]; then - LABEL="v: moderate" - else - LABEL="v: large" - fi - - DELETE_LABELS=("${DELETE_LABELS[@]//${LABEL}}") - - echo "Adding label: $LABEL" - curl -X POST \ - -H "$AUTH_HEADER" \ - -H "Accept: application/vnd.github+json" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - -d "{\"labels\":[\"$LABEL\"]}" \ - "$API_URL" >/dev/null - - echo "Deleting Labels:" - for DELETE_LABEL in "${DELETE_LABELS[@]}"; do - ENCODED_LABEL=$(echo "$DELETE_LABEL" | sed 's/ /%20/g') - curl -X DELETE \ - -H "Accept: application/vnd.github+json" \ - -H "$AUTH_HEADER" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - "$API_URL/$ENCODED_LABEL" >/dev/null - done - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From dc7d14e2355255325039f639a97293ac535d0fc0 Mon Sep 17 00:00:00 2001 From: adrinospy Date: Tue, 12 Mar 2024 12:32:22 +0530 Subject: [PATCH 5/8] made code redable --- .github/workflows/pr-labeler.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index 3b5c28cf478..214b9b19abe 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -18,25 +18,33 @@ jobs: - name: Add labels based on size run: | - if [[ -z "${{ vars.SMALL_THRESHOLD }}" || -z "${{ vars.MODERATE_THRESHOLD }}" || -z "${{ vars.LARGE_THRESHOLD }}" ]]; then + if [[ -z "${{ vars.SMALL_THRESHOLD }}" || -z "${{ vars.MODERATE_THRESHOLD }}" || -z "${{ vars.LARGE_THRESHOLD }}"]]; then echo "One or more environment variables are not set." exit 1 fi git fetch origin ${{ github.base_ref }} CHANGES=$(git diff --ignore-all-space ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}) + CHANGES=$(echo "$CHANGES" | grep -E '^[+\-]' | grep -vE '^\+\+\+|^\-\-\-') + # ignore blank lines CHANGES=$(echo "$CHANGES" | grep -vE '^[\+\-]\s*$') + # count total no of lines CHANGES=$(echo "$CHANGES" | wc -l) + echo "CHANGES MADE: $CHANGES" + SMALL_THRESHOLD=${{vars.SMALL_THRESHOLD}} MODERATE_THRESHOLD=${{vars.MODERATE_THRESHOLD}} LARGE_THRESHOLD=${{vars.LARGE_THRESHOLD}} + PR_NUMBER="${{ github.event.number }}" API_URL="https://api.github.com/repos/${{ github.repository }}/issues/${PR_NUMBER}/labels" AUTH_HEADER="Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" + DELETE_LABELS=("v: minimal" "v: small" "v: moderate" "v: large") + if [ "$CHANGES" -gt "$SMALL_THRESHOLD" ]; then LABEL="v: small" elif [ "$CHANGES" -gt "$MODERATE_THRESHOLD" ]; then @@ -46,7 +54,9 @@ jobs: else LABEL="v: minimal" fi + DELETE_LABELS=("${DELETE_LABELS[@]//${LABEL}}") + echo "Adding label: $LABEL" curl -X POST \ -H "$AUTH_HEADER" \ @@ -54,7 +64,9 @@ jobs: -H "X-GitHub-Api-Version: 2022-11-28" \ -d "{\"labels\":[\"$LABEL\"]}" \ "$API_URL" >/dev/null + echo "Deleting Labels:" + for DELETE_LABEL in "${DELETE_LABELS[@]}"; do ENCODED_LABEL=$(echo "$DELETE_LABEL" | sed 's/ /%20/g') curl -X DELETE \ From cdf4d0b0c67afdbc7563740d4e75951009a05a0d Mon Sep 17 00:00:00 2001 From: adrinospy Date: Mon, 18 Mar 2024 02:24:04 +0530 Subject: [PATCH 6/8] adding labels of file changed --- .github/workflows/pr-labeler.yml | 52 ++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index 214b9b19abe..91bd5fdc21f 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -1,3 +1,5 @@ +# This action automatically labels Pull-Requests +# based on files edited and no of lines changed. name: Size Labeler/Checker on: pull_request_target: @@ -18,27 +20,23 @@ jobs: - name: Add labels based on size run: | - if [[ -z "${{ vars.SMALL_THRESHOLD }}" || -z "${{ vars.MODERATE_THRESHOLD }}" || -z "${{ vars.LARGE_THRESHOLD }}"]]; then - echo "One or more environment variables are not set." - exit 1 - fi git fetch origin ${{ github.base_ref }} - CHANGES=$(git diff --ignore-all-space ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}) - CHANGES=$(echo "$CHANGES" | grep -E '^[+\-]' | grep -vE '^\+\+\+|^\-\-\-') + # get all the changes made and changed files + CHANGES=$(git diff --ignore-all-space ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}) + CHANGED_FILES=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} | awk -F'src/sage/' '{print $2}' | cut -d'/' -f1 | sed 's/\([^ ]\+\)/c: \1/g') # ignore blank lines CHANGES=$(echo "$CHANGES" | grep -vE '^[\+\-]\s*$') + # ignore non necessary lines from git diff + CHANGES=$(echo "$CHANGES" | grep -E '^[+\-]' | grep -vE '^\+\+\+|^\-\-\-') + # count total no of lines CHANGES=$(echo "$CHANGES" | wc -l) echo "CHANGES MADE: $CHANGES" - SMALL_THRESHOLD=${{vars.SMALL_THRESHOLD}} - MODERATE_THRESHOLD=${{vars.MODERATE_THRESHOLD}} - LARGE_THRESHOLD=${{vars.LARGE_THRESHOLD}} - PR_NUMBER="${{ github.event.number }}" API_URL="https://api.github.com/repos/${{ github.repository }}/issues/${PR_NUMBER}/labels" AUTH_HEADER="Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" @@ -46,24 +44,29 @@ jobs: DELETE_LABELS=("v: minimal" "v: small" "v: moderate" "v: large") if [ "$CHANGES" -gt "$SMALL_THRESHOLD" ]; then - LABEL="v: small" + SIZE_LABEL="v: small" elif [ "$CHANGES" -gt "$MODERATE_THRESHOLD" ]; then - LABEL="v: moderate" + SIZE_LABEL="v: moderate" elif [ "$CHANGES" -gt "$LARGE_THRESHOLD" ]; then - LABEL="v: large" + SIZE_LABEL="v: large" else - LABEL="v: minimal" + SIZE_LABEL="v: minimal" fi - DELETE_LABELS=("${DELETE_LABELS[@]//${LABEL}}") + DELETE_LABELS=("${DELETE_LABELS[@]//${SIZE_LABEL}}") - echo "Adding label: $LABEL" - curl -X POST \ - -H "$AUTH_HEADER" \ - -H "Accept: application/vnd.github+json" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - -d "{\"labels\":[\"$LABEL\"]}" \ - "$API_URL" >/dev/null + readarray -t LABELS <<< "$CHANGED_FILES" + LABELS+=("$SIZE_LABEL") + + echo "Adding label: ${LABELS[@]}" + for LABEL in "${LABELS[@]}"; do + curl -X POST \ + -H "$AUTH_HEADER" \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + -d "{\"labels\":[\"$LABEL\"]}" \ + "$API_URL" >/dev/null + done echo "Deleting Labels:" @@ -76,4 +79,7 @@ jobs: "$API_URL/$ENCODED_LABEL" >/dev/null done env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SMALL_THRESHOLD: ${{ vars.SMALL_THRESHOLD }} + MODERATE_THRESHOLD: ${{ vars.MODERATE_THRESHOLD }} + LARGE_THRESHOLD: ${{ vars.LARGE_THRESHOLD }} From f997788e1e1de5dd0d8eef8c0fdacbc904a53d00 Mon Sep 17 00:00:00 2001 From: adrinospy Date: Wed, 3 Apr 2024 22:40:54 +0530 Subject: [PATCH 7/8] added environment variables for repeated literals --- .github/workflows/get_changes.sh | 61 +++++++++++++++++++++++++++ .github/workflows/pr-labeler.yml | 72 ++++++-------------------------- 2 files changed, 74 insertions(+), 59 deletions(-) create mode 100644 .github/workflows/get_changes.sh diff --git a/.github/workflows/get_changes.sh b/.github/workflows/get_changes.sh new file mode 100644 index 00000000000..b2e716c9da5 --- /dev/null +++ b/.github/workflows/get_changes.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +# get all the changes made and changed files +CHANGES=$(git diff --ignore-all-space $PR_BASE_SHA $PR_HEAD_SHA) + +# ignore blank lines +CHANGES=$(echo "$CHANGES" | grep -vE '^[\+\-]\s*$') + +# ignore non necessary lines from git diff +CHANGES=$(echo "$CHANGES" | grep -E '^[+\-]' | grep -vE '^\+\+\+|^\-\-\-') + +# count total no of lines +CHANGES=$(echo "$CHANGES" | wc -l) + +echo "CHANGES MADE: $CHANGES" + +# get changed files +CHANGED_PATH=$(git diff --name-only $PR_BASE_SHA $PR_HEAD_SHA) + +# extract changed dir +CHANGED_DIR=$(echo "$CHANGED_PATH" | awk -F'src/sage/' '{print $2}' | cut -d'/' -f1 | sed 's/\([^ ]\+\)/c: \1/g') + +AUTH_HEADER="Authorization: Bearer $GITHUB_TOKEN" + +DELETE_LABELS=("$MINIMAL" "$SMALL" "$MODERATE" "$LARGE") + +if [ "$CHANGES" -gt "$LARGE_THRESHOLD" ]; then +SIZE_LABEL="$LARGE" +elif [ "$CHANGES" -gt "$MODERATE_THRESHOLD" ]; then +SIZE_LABEL="$MODERATE" +elif [ "$CHANGES" -gt "$SMALL_THRESHOLD" ]; then +SIZE_LABEL="$SMALL" +else +SIZE_LABEL="$MINIMAL" +fi + +DELETE_LABELS=("${DELETE_LABELS[@]//${SIZE_LABEL}}") + +readarray -t LABELS <<< "$CHANGED_DIR" +LABELS+=("$SIZE_LABEL") + +echo "Adding label: ${LABELS[@]}" +for LABEL in "${LABELS[@]}"; do + curl -X POST \ + -H "$AUTH_HEADER" \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + -d "{\"labels\":[\"$LABEL\"]}" \ + "$API_URL" >/dev/null +done + +echo "Deleting Labels:" + +for DELETE_LABEL in "${DELETE_LABELS[@]}"; do + ENCODED_LABEL=$(echo "$DELETE_LABEL" | sed 's/ /%20/g') + curl -X DELETE \ + -H "Accept: application/vnd.github+json" \ + -H "$AUTH_HEADER" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "$API_URL/$ENCODED_LABEL" >/dev/null +done \ No newline at end of file diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index 91bd5fdc21f..521e7a2901b 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -9,6 +9,7 @@ on: - edited jobs: label-changes: + if: vars.SMALL_THRESHOLD && vars.MODERATE_THRESHOLD && vars.LARGE_THRESHOLD runs-on: ubuntu-latest permissions: pull-requests: write @@ -20,66 +21,19 @@ jobs: - name: Add labels based on size run: | - git fetch origin ${{ github.base_ref }} - - # get all the changes made and changed files - CHANGES=$(git diff --ignore-all-space ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}) - CHANGED_FILES=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} | awk -F'src/sage/' '{print $2}' | cut -d'/' -f1 | sed 's/\([^ ]\+\)/c: \1/g') - - # ignore blank lines - CHANGES=$(echo "$CHANGES" | grep -vE '^[\+\-]\s*$') - - # ignore non necessary lines from git diff - CHANGES=$(echo "$CHANGES" | grep -E '^[+\-]' | grep -vE '^\+\+\+|^\-\-\-') - - # count total no of lines - CHANGES=$(echo "$CHANGES" | wc -l) - - echo "CHANGES MADE: $CHANGES" - - PR_NUMBER="${{ github.event.number }}" - API_URL="https://api.github.com/repos/${{ github.repository }}/issues/${PR_NUMBER}/labels" - AUTH_HEADER="Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" - - DELETE_LABELS=("v: minimal" "v: small" "v: moderate" "v: large") - - if [ "$CHANGES" -gt "$SMALL_THRESHOLD" ]; then - SIZE_LABEL="v: small" - elif [ "$CHANGES" -gt "$MODERATE_THRESHOLD" ]; then - SIZE_LABEL="v: moderate" - elif [ "$CHANGES" -gt "$LARGE_THRESHOLD" ]; then - SIZE_LABEL="v: large" - else - SIZE_LABEL="v: minimal" - fi - - DELETE_LABELS=("${DELETE_LABELS[@]//${SIZE_LABEL}}") - - readarray -t LABELS <<< "$CHANGED_FILES" - LABELS+=("$SIZE_LABEL") - - echo "Adding label: ${LABELS[@]}" - for LABEL in "${LABELS[@]}"; do - curl -X POST \ - -H "$AUTH_HEADER" \ - -H "Accept: application/vnd.github+json" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - -d "{\"labels\":[\"$LABEL\"]}" \ - "$API_URL" >/dev/null - done - - echo "Deleting Labels:" - - for DELETE_LABEL in "${DELETE_LABELS[@]}"; do - ENCODED_LABEL=$(echo "$DELETE_LABEL" | sed 's/ /%20/g') - curl -X DELETE \ - -H "Accept: application/vnd.github+json" \ - -H "$AUTH_HEADER" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - "$API_URL/$ENCODED_LABEL" >/dev/null - done + git fetch origin $BASE_SHA + chmod a+x .github/workflows/get_changes.sh + .github/workflows/get_changes.sh env: + BASE_SHA: ${{ github.base_ref }} + PR_BASE_SHA: ${{ github.event.pull_request.base.sha }} + PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + API_URL: "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/labels" + MINIMAL: 'v: minimal' + SMALL: 'v: small' + MODERATE: 'v: moderate' + LARGE: 'v: large' SMALL_THRESHOLD: ${{ vars.SMALL_THRESHOLD }} MODERATE_THRESHOLD: ${{ vars.MODERATE_THRESHOLD }} - LARGE_THRESHOLD: ${{ vars.LARGE_THRESHOLD }} + LARGE_THRESHOLD: ${{ vars.LARGE_THRESHOLD }} \ No newline at end of file From d206b472e8b4163a499208a3d1671d409acda76c Mon Sep 17 00:00:00 2001 From: adrinospy Date: Tue, 9 Apr 2024 18:44:45 +0530 Subject: [PATCH 8/8] made suggested changes --- .github/workflows/get_changes.sh | 61 -------------------- .github/workflows/pr-labeler.yml | 18 +++--- .github/workflows/set_labels_by_changes.sh | 67 ++++++++++++++++++++++ 3 files changed, 76 insertions(+), 70 deletions(-) delete mode 100644 .github/workflows/get_changes.sh create mode 100644 .github/workflows/set_labels_by_changes.sh diff --git a/.github/workflows/get_changes.sh b/.github/workflows/get_changes.sh deleted file mode 100644 index b2e716c9da5..00000000000 --- a/.github/workflows/get_changes.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env bash - -# get all the changes made and changed files -CHANGES=$(git diff --ignore-all-space $PR_BASE_SHA $PR_HEAD_SHA) - -# ignore blank lines -CHANGES=$(echo "$CHANGES" | grep -vE '^[\+\-]\s*$') - -# ignore non necessary lines from git diff -CHANGES=$(echo "$CHANGES" | grep -E '^[+\-]' | grep -vE '^\+\+\+|^\-\-\-') - -# count total no of lines -CHANGES=$(echo "$CHANGES" | wc -l) - -echo "CHANGES MADE: $CHANGES" - -# get changed files -CHANGED_PATH=$(git diff --name-only $PR_BASE_SHA $PR_HEAD_SHA) - -# extract changed dir -CHANGED_DIR=$(echo "$CHANGED_PATH" | awk -F'src/sage/' '{print $2}' | cut -d'/' -f1 | sed 's/\([^ ]\+\)/c: \1/g') - -AUTH_HEADER="Authorization: Bearer $GITHUB_TOKEN" - -DELETE_LABELS=("$MINIMAL" "$SMALL" "$MODERATE" "$LARGE") - -if [ "$CHANGES" -gt "$LARGE_THRESHOLD" ]; then -SIZE_LABEL="$LARGE" -elif [ "$CHANGES" -gt "$MODERATE_THRESHOLD" ]; then -SIZE_LABEL="$MODERATE" -elif [ "$CHANGES" -gt "$SMALL_THRESHOLD" ]; then -SIZE_LABEL="$SMALL" -else -SIZE_LABEL="$MINIMAL" -fi - -DELETE_LABELS=("${DELETE_LABELS[@]//${SIZE_LABEL}}") - -readarray -t LABELS <<< "$CHANGED_DIR" -LABELS+=("$SIZE_LABEL") - -echo "Adding label: ${LABELS[@]}" -for LABEL in "${LABELS[@]}"; do - curl -X POST \ - -H "$AUTH_HEADER" \ - -H "Accept: application/vnd.github+json" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - -d "{\"labels\":[\"$LABEL\"]}" \ - "$API_URL" >/dev/null -done - -echo "Deleting Labels:" - -for DELETE_LABEL in "${DELETE_LABELS[@]}"; do - ENCODED_LABEL=$(echo "$DELETE_LABEL" | sed 's/ /%20/g') - curl -X DELETE \ - -H "Accept: application/vnd.github+json" \ - -H "$AUTH_HEADER" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - "$API_URL/$ENCODED_LABEL" >/dev/null -done \ No newline at end of file diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index 521e7a2901b..7eb62c8a498 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -5,11 +5,14 @@ on: pull_request_target: types: - opened + - reopened - synchronize + - ready_for_review + - review_requested - edited jobs: label-changes: - if: vars.SMALL_THRESHOLD && vars.MODERATE_THRESHOLD && vars.LARGE_THRESHOLD + if: vars.SMALL_THRESHOLD && vars.MODERATE_THRESHOLD && vars.LARGE_THRESHOLD && github.event.pull_request.draft == false runs-on: ubuntu-latest permissions: pull-requests: write @@ -22,18 +25,15 @@ jobs: - name: Add labels based on size run: | git fetch origin $BASE_SHA - chmod a+x .github/workflows/get_changes.sh - .github/workflows/get_changes.sh + chmod a+x .github/workflows/set_labels_by_changes.sh + .github/workflows/set_labels_by_changes.sh env: BASE_SHA: ${{ github.base_ref }} PR_BASE_SHA: ${{ github.event.pull_request.base.sha }} PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - API_URL: "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/labels" - MINIMAL: 'v: minimal' - SMALL: 'v: small' - MODERATE: 'v: moderate' - LARGE: 'v: large' + REPOSITORY: ${{ github.repository }} + PR_NUMBER: ${{ github.event.pull_request.number}} SMALL_THRESHOLD: ${{ vars.SMALL_THRESHOLD }} MODERATE_THRESHOLD: ${{ vars.MODERATE_THRESHOLD }} - LARGE_THRESHOLD: ${{ vars.LARGE_THRESHOLD }} \ No newline at end of file + LARGE_THRESHOLD: ${{ vars.LARGE_THRESHOLD }} diff --git a/.github/workflows/set_labels_by_changes.sh b/.github/workflows/set_labels_by_changes.sh new file mode 100644 index 00000000000..a182d539339 --- /dev/null +++ b/.github/workflows/set_labels_by_changes.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +echo 'set_labels_by_changes.sh called with environment:' +echo "BASE SHA: $PR_BASE_SHA" +echo "HEAD SHA: $PR_HEAD_SHA" +echo "SMALL THRESHOLD $SMALL_THRESHOLD" +echo "MODERATE THERESHOLD: $MODERATE_THRESHOLD" +echo "LARGE THRESHOLD: $LARGE_THRESHOLD" + +# get all the changes made and changed files +CHANGES=$(git diff --ignore-all-space $PR_BASE_SHA $PR_HEAD_SHA) + +# ignore blank lines +CHANGES=$(echo "$CHANGES" | grep -vE '^[\+\-]\s*$') + +# ignore non necessary lines from git diff +CHANGES=$(echo "$CHANGES" | grep -E '^[+\-]' | grep -vE '^\+\+\+|^\-\-\-') + +# count total no of lines +CHANGES=$(echo "$CHANGES" | wc -l) + +echo "CHANGES MADE: $CHANGES" + +AUTH_HEADER="Authorization: Bearer $GITHUB_TOKEN" + +MINIMAL="v: minimal" +SMALL="v: small" +MODERATE="v: moderate" +LARGE="v: large" + +DELETE_LABELS=("$MINIMAL" "$SMALL" "$MODERATE" "$LARGE") + +if [ "$CHANGES" -gt "$LARGE_THRESHOLD" ]; then + SIZE_LABEL="$LARGE" +elif [ "$CHANGES" -gt "$MODERATE_THRESHOLD" ]; then + SIZE_LABEL="$MODERATE" +elif [ "$CHANGES" -gt "$SMALL_THRESHOLD" ]; then + SIZE_LABEL="$SMALL" +else + SIZE_LABEL="$MINIMAL" +fi + +DELETE_LABELS=("${DELETE_LABELS[@]//${SIZE_LABEL}/}") + +# API for adding labels on the Pull Request +API_URL="https://api.github.com/repos/$REPOSITORY/issues/$PR_NUMBER/labels" + +echo "Adding label: ${SIZE_LABEL[@]}" +for LABEL in "${SIZE_LABEL[@]}"; do + curl -X POST \ + -H "$AUTH_HEADER" \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + -d "{\"labels\":[\"$LABEL\"]}" \ + "$API_URL" >/dev/null +done + +echo "Deleting Labels:" + +for DELETE_LABEL in "${DELETE_LABELS[@]}"; do + ENCODED_LABEL=$(echo "$DELETE_LABEL" | sed 's/ /%20/g') + curl -X DELETE \ + -H "Accept: application/vnd.github+json" \ + -H "$AUTH_HEADER" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "$API_URL/$ENCODED_LABEL" >/dev/null +done