@@ -88,18 +88,34 @@ jobs:
8888 - name : Generate reviewers list
8989 id : generate_reviewers
9090 run : |
91- # 根据变更文件路径匹配维护者规则
92- rm -f triggered_reviewers.txt
93- rm -f triggered_tags.txt
91+ # 删除旧文件并初始化空文件
92+ rm -f triggered_reviewers.txt triggered_tags.txt
93+ touch triggered_reviewers.txt triggered_tags.txt # 确保文件存在
94+
95+ # 匹配路径并追加维护者信息
9496 while IFS='|' read -r tag path reviewers; do
95- # 使用正则匹配路径(支持子目录)
96- if grep -qE "^$path(/|$)" changed_files.txt; then
97- echo "$reviewers" | tr ' ' '\n' >> triggered_reviewers.txt
98- echo "$tag" | tr ' ' '\n' >> triggered_tags.txt
97+ # 转义路径中的正则特殊字符
98+ escaped_path=$(sed 's/[.[\*^$]/\\&/g' <<< "$path")
99+ # 精确匹配路径及其子路径
100+ if grep -qxE "$escaped_path(/.*)?" changed_files.txt; then
101+ # 清理空格并移除空行后追加到文件
102+ echo "$reviewers" | tr -s ' ' '\n' | sed '/^$/d' >> triggered_reviewers.txt
103+ echo "$tag" >> triggered_tags.txt
99104 fi
100105 done < tag_data.csv
101- awk 'NF && !seen[$0]++' triggered_reviewers.txt > unique_reviewers.txt
102- awk 'NF && !seen[$0]++' triggered_tags.txt > unique_tags.txt
106+
107+ # 处理去重前检查文件是否有内容
108+ if [[ -s triggered_reviewers.txt ]]; then
109+ awk 'NF && !seen[$0]++' triggered_reviewers.txt > unique_reviewers.txt
110+ else
111+ echo "No reviewers matched." > unique_reviewers.txt # 生成占位文件
112+ fi
113+
114+ if [[ -s triggered_tags.txt ]]; then
115+ awk 'NF && !seen[$0]++' triggered_tags.txt > unique_tags.txt
116+ else
117+ echo "No tags matched." > unique_tags.txt # 生成占位文件
118+ fi
103119 - name : Restore Reviewers Cache
104120 id : reviewers-cache-restore
105121 if : ${{ steps.changed_files.outputs.COMMENT_TIME != '' }}
0 commit comments