feat: implement comment-check in workflows. #8
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Non-English Comments Check | |
on: | |
pull_request: | |
branches: | |
- main | |
workflow_dispatch: | |
jobs: | |
non-english-comments-check: | |
runs-on: ubuntu-latest | |
permissions: | |
pull-requests: write | |
env: | |
# Directories to be excluded | |
EXCLUDE_DIRS: ".git docs tests scripts assets node_modules build" | |
# Files to be excluded | |
EXCLUDE_FILES: ".md .txt .html .css .min.js .mdx" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
# - name: Search for Non-English comments in the entire repository | |
# run: | | |
# set -e | |
# # Define the regex pattern to match Chinese characters | |
# pattern='[\p{Han}]' | |
# # Use find to get all files in the repository | |
# all_files=$(find . -type f) | |
# # Loop over each file in the repository | |
# for file in $all_files; do | |
# # Skip files in excluded directories | |
# skip_file=false | |
# for dir in ${EXCLUDE_DIRS}; do | |
# if [[ "$file" == ./$dir/* ]]; then | |
# skip_file=true | |
# break | |
# fi | |
# done | |
# # Skip files matching excluded patterns | |
# for file_pattern in ${EXCLUDE_FILES}; do | |
# if [[ "$file" == *$file_pattern ]]; then | |
# skip_file=true | |
# break | |
# fi | |
# done | |
# # If the file matches any exclude pattern, skip it | |
# if [ "$skip_file" = true ]; then | |
# continue | |
# fi | |
# # Use grep to find all comments containing Non-English characters in filtered files | |
# grep_output=$(grep -PnH "$pattern" "$file" || true) | |
# if [ -n "$grep_output" ]; then | |
# # Insert a tab after the line number, keeping the colon between the file path and line number | |
# formatted_output=$(echo "$grep_output" | sed 's/^\(.*:[0-9]\+\):/\1\t/') | |
# echo "$formatted_output" >> non_english_comments.txt # Save to file | |
# fi | |
# done | |
- name: Search for Non-English comments in PR diff 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 }}) | |
# Loop over each changed file | |
for file in $changed_files; do | |
# Skip files in excluded directories | |
skip_file=false | |
for dir in ${EXCLUDE_DIRS}; do | |
if [[ "$file" == ./$dir/* ]]; then | |
skip_file=true | |
break | |
fi | |
done | |
# Skip files matching excluded patterns | |
for file_pattern in ${EXCLUDE_FILES}; do | |
if [[ "$file" == *$file_pattern ]]; then | |
skip_file=true | |
break | |
fi | |
done | |
# If the file matches any exclude pattern, skip it | |
if [ "$skip_file" = true ]; then | |
continue | |
fi | |
# Use grep to find all comments containing Non-English characters in filtered files | |
grep_output=$(grep -PnH "$pattern" "$file" || true) | |
if [ -n "$grep_output" ]; then | |
# Insert a tab after the line number, keeping the colon between the file path and line number | |
formatted_output=$(echo "$grep_output" | sed 's/^\(.*:[0-9]\+\):/\1\t/') | |
echo "$formatted_output" >> non_english_comments.txt # Save to file | |
fi | |
done | |
- name: Store non-English comments in ENV | |
run: | | |
# Store the entire content of non_english_comments.txt into an environment variable | |
if [ -f non_english_comments.txt ]; then | |
NON_ENGLISH_COMMENTS=$(cat non_english_comments.txt) | |
echo "NON_ENGLISH_COMMENTS<<EOF" >> $GITHUB_ENV | |
echo "$NON_ENGLISH_COMMENTS" >> $GITHUB_ENV | |
echo "EOF" >> $GITHUB_ENV | |
fi | |
- 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 | |
- name: Find Comment | |
if: failure() | |
uses: peter-evans/[email protected] | |
id: fc | |
with: | |
issue-number: ${{ github.event.pull_request.number }} | |
comment-author: 'github-actions[bot]' | |
body-includes: Non-English comments were found in the following locations | |
- 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.BOT_GITHUB_TOKEN }} | |
issue-number: ${{ github.event.pull_request.number }} | |
comment-id: ${{ steps.fc.outputs.comment-id }} | |
edit-mode: replace | |
body: | | |
⚠️ Non-English comments were found in the following locations: | |
``` | |
${{ env.NON_ENGLISH_COMMENTS }} | |
``` | |
# 测试一下 如果当前提交的PR内的非Excluded文件中有中文注释, | |
# 那么这个workflow会失败,同时会在PR内添加一条评论,告知用户有中文注释 |