-
Notifications
You must be signed in to change notification settings - Fork 2
155 lines (130 loc) · 5.17 KB
/
comment-check.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# name: Non-English Comments Check
# on:
# pull_request:
# branches:
# - main
# workflow_dispatch:
# jobs:
# non-english-comments-check:
# runs-on: ubuntu-latest
# env:
# # Directories to be excluded
# EXCLUDE_DIRS: ".git docs tests scripts assets node_modules build"
# # Files to be excluded (e.g., markdown, text files)
# EXCLUDE_FILES: "*.md *.txt *.html *.css *.min.js *.mdx"
# steps:
# - uses: actions/checkout@v4
# - name: Search for Non-English comments
# run: |
# set -e
# # Define the regex pattern to match Chinese characters
# pattern='[\p{Han}]'
# # Process the directories to be excluded
# exclude_dirs=""
# for dir in $EXCLUDE_DIRS; do
# exclude_dirs="$exclude_dirs --exclude-dir=$dir"
# done
# # Use grep to find all comments containing Non-English characters
# grep -Pnr "$pattern" . $exclude_dirs | while read -r line ; do
# file_name=$(echo "$line" | cut -d':' -f1)
# # Check if the file matches any pattern in EXCLUDE_FILES
# skip_file=false
# for file_pattern in $EXCLUDE_FILES; do
# # Use echo and grep to match the file name with the pattern
# if echo "$file_name" | grep -q "$file_pattern"; then
# skip_file=true
# break
# fi
# done
# # If the file matches an exclude pattern, skip it
# if [ "$skip_file" = true ]; then
# continue
# fi
# # Write the result to the non_english_comments.txt file
# echo "$line" >> non_english_comments.txt
# done || true
# - name: Output non-English comments if found
# id: check-comments
# run: |
# if [ -s non_english_comments.txt ]; then
# echo "Non-English comments found in the following locations:"
# cat non_english_comments.txt
# comments=$(cat non_english_comments.txt | sed ':a;N;$!ba;s/\n/\\n/g')
# echo "non_english_comments=$comments" >> $GITHUB_ENV
# exit 1 # terminate the workflow
# else
# echo "No Non-English comments found."
# fi
# - name: Comment on PR if errors found
# if: failure() # This step runs only if the previous step fails
# uses: peter-evans/[email protected]
# with:
# token: ${{ secrets.GITHUB_TOKEN }} # GitHub token to post the comment
# issue-number: ${{ github.event.pull_request.number }} # PR number
# edit-mode: replace # This ensures that the comment is updated instead of creating a new one
# body: |
# ⚠️ Non-English comments were found in the following locations:
# ```
# $(while IFS= read -r line; do echo "$line"; done < non_english_comments.txt)
# ```
name: Non-English Comments Check
on:
pull_request:
branches:
- main
workflow_dispatch:
jobs:
non-english-comments-check:
runs-on: ubuntu-latest
env:
# Directories to be excluded
EXCLUDE_DIRS: ".git docs tests scripts assets node_modules build"
# Files to be excluded
EXCLUDE_FILES: "*.txt *.html *.css *.min.js *.mdx"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Search for Non-English comments in PR files
run: |
set -e
# Define the regex pattern to match Chinese characters
pattern='[\p{Han}]'
# Get the list of files changed in this PR compared to the base branch
changed_files=$(git diff --name-only ${{ github.event.pull_request.base.sha }})
# Process the directories to be excluded
exclude_dirs=""
for dir in $EXCLUDE_DIRS; do
exclude_dirs="$exclude_dirs --exclude-dir=$dir"
done
# Process the file types to be excluded
exclude_files=""
for file in $EXCLUDE_FILES; do
exclude_files="$exclude_files --exclude=$file"
done
# Check only the files modified in this PR for non-English comments
for file in $changed_files; do
# Skip files matching excluded patterns
skip_file=false
for file_pattern in $EXCLUDE_FILES; do
if echo "$file" | grep -q "$file_pattern"; then
skip_file=true
break
fi
done
# If the file matches an exclude pattern, skip it
if [ "$skip_file" = true ]; then
continue
fi
# Use grep to find all comments containing Non-English characters
grep -Pn "$pattern" "$file" >> non_english_comments.txt || true
done
- name: Output non-English comments if found
run: |
if [ -s non_english_comments.txt ]; then
echo "Non-English comments found in the following locations:"
cat non_english_comments.txt
exit 1 # terminate the workflow
else
echo "No Non-English comments found."
fi