diff --git a/.github/workflows/comment-check.yml b/.github/workflows/comment-check.yml new file mode 100644 index 00000000000..699d6aaf4c2 --- /dev/null +++ b/.github/workflows/comment-check.yml @@ -0,0 +1,154 @@ +name: Non-English Comments Check + +on: + pull_request_target: + types: [opened, synchronize, reopened] + branches: + - main + # workflow_dispatch: + +jobs: + non-english-comments-check: + runs-on: ubuntu-latest + permissions: + contents: read + 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: + ref: ${{ github.event.pull_request.head.ref }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + 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 }} ${{ github.event.pull_request.head.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<> $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." + + - name: Find Comment + if: failure() && github.event_name != 'workflow_dispatch' + uses: peter-evans/find-comment@v3.1.0 + id: fc + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: "kratos-ci-bot" + body-includes: Non-English comments were found in the following locations + + - name: Comment on PR if errors found + if: failure() && github.event_name != 'workflow_dispatch' # This step runs only if the previous step fails + uses: peter-evans/create-or-update-comment@v4.0.0 + 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 }} + ```