File tree 4 files changed +102
-0
lines changed
4 files changed +102
-0
lines changed Original file line number Diff line number Diff line change
1
+ name : " Large PR checker"
2
+ description : " Blocks PR if number of lines changed is excessive. Modified version of https://github.com/adolfosilva/gh-large-pr-check/blob/main/action.yml"
3
+
4
+ inputs :
5
+ max_lines_changed :
6
+ description : " Maximum number of lines changed allowed"
7
+ required : true
8
+ default : " 500"
9
+ target_branch :
10
+ description : The branch to compare against
11
+ required : true
12
+ default : main
13
+ outputs :
14
+ total_lines_changed :
15
+ description : " Total lines changed in this PR"
16
+ value : ${{ steps.get_total_lines_changed.outputs.total_lines_changed }}
17
+
18
+ runs :
19
+ using : " composite"
20
+ steps :
21
+ - id : fetch_target_branch
22
+ run : |
23
+ git fetch origin ${{ inputs.target_branch }}
24
+ shell : bash
25
+ - id : get_total_lines_changed
26
+ run : |
27
+ size=$(git diff --shortstat origin/${{ inputs.target_branch }} ':(exclude)*.lock' \
28
+ | awk '{ print $4+$6 }' \
29
+ | awk -F- '{print $NF}' \
30
+ | bc)
31
+
32
+ echo ""
33
+ echo "Total lines changed (note: *.lock files are excluded from this count): $size"
34
+ echo "total_lines_changed=$size" >> $GITHUB_OUTPUT
35
+ shell : bash
36
+ - name : Comment PR
37
+ if : ${{ fromJSON(steps.get_total_lines_changed.outputs.total_lines_changed) > fromJSON(inputs.max_lines_changed) }}
38
+ uses : thollander/actions-comment-pull-request@v2
39
+ with :
40
+ comment_tag : pr_size
41
+ mode : recreate
42
+ message : |
43
+ :boom: :boom: :boom:
44
+ Total lines changed ${{ steps.get_total_lines_changed.outputs.total_lines_changed }} is greater than ${{ inputs.max_lines_changed }}.
45
+ Please consider breaking this PR down.
46
+ - id : fail
47
+ if : ${{ fromJSON(steps.get_total_lines_changed.outputs.total_lines_changed) > fromJSON(inputs.max_lines_changed) }}
48
+ run : exit 1
49
+ shell : bash
Original file line number Diff line number Diff line change 18
18
RUFF_VERSION : " 0.6.7"
19
19
20
20
jobs :
21
+ check-pr-diff :
22
+ runs-on : ubuntu-latest
23
+
24
+ steps :
25
+ - name : Checkout repository
26
+ uses : actions/checkout@v4
27
+
28
+ - name : Check PR diff size
29
+ uses : ./.github/actions/large-pr-check
30
+ with :
31
+ target_branch : ${{ github.event.pull_request.base.ref }}
32
+ max_lines_changed : 300
33
+
21
34
lint :
22
35
runs-on : ubuntu-latest
23
36
timeout-minutes : 10
37
50
- name : Run Ruff
38
51
run : ruff check --output-format=github .
39
52
53
+ - name : Spell Check
54
+ uses : crate-ci/typos@master
55
+
40
56
test :
41
57
runs-on : ubuntu-latest
42
58
strategy :
Original file line number Diff line number Diff line change @@ -41,3 +41,10 @@ repos:
41
41
stages : [pre-push]
42
42
language : python
43
43
types : [python]
44
+ - id : check-pr-size
45
+ name : check-pr-size
46
+ entry : chmod +x scripts/large-pr-checker.sh && ./large-pr-checker.sh
47
+ pass_filenames : false
48
+ stages : [pre-push]
49
+ language : system
50
+ types : [python]
Original file line number Diff line number Diff line change
1
+ #! /bin/bash
2
+
3
+ # Script helps to block Pull Requests with exceeded number of changed lines of code.
4
+ # Firstly, it compares HEAD with source branch
5
+ # Then it counts changed lines of code, excluding specified files and respecting max lines of code
6
+
7
+ # Read first input arg or take default value - 500
8
+ MAX_CHANGED_LOC=" ${1:- 500} "
9
+
10
+ # Second argument (source branch) is required
11
+ if [ -z " $2 " ]; then
12
+ echo " No remote source branch supplied"
13
+ exit 1
14
+ else
15
+ source_branch=$2
16
+ fi
17
+
18
+ # Parse such line `2 files changed, 18 insertions(+), 248 deletions(-)` and write to variable
19
+ changed_loc=$( git diff --shortstat ${source_branch} ' :(exclude)*.lock' \
20
+ | awk ' { print $4+$6 }' \
21
+ | awk -F- ' {print $NF}' \
22
+ | bc)
23
+
24
+ if [[ $changed_loc -le $MAX_CHANGED_LOC ]]; then
25
+ echo " ✅ ${changed_loc} lines of code changed. It is allowed to create Pull Request"
26
+ exit 0
27
+ else
28
+ echo " ❌ ${changed_loc} lines of code changed. It is more than allowed ${MAX_CHANGED_LOC} . Please divide changes into several branches"
29
+ exit 1
30
+ fi
You can’t perform that action at this time.
0 commit comments