使用GitHub Actions检查提交消息正则表达式遇错求助
解决GitHub Actions提交消息正则匹配失败的问题
原配置的核心问题
- Shell正则语法错误:bash的
=~运算符不需要用/包裹正则表达式,也不支持gi这类PCRE修饰符。不区分大小写可以通过shopt -s nocasematch开启,全局匹配只要内容中存在符合规则的片段即可。 - 变量引用未处理特殊字符:直接将
${{ github.event.head_commit.message }}插入Shell语句,若消息包含空格、引号等特殊字符,会触发语法错误,需先将其存入Shell变量并包裹引号。 - 正则转义多余:bash扩展正则中,
()用于分组无需转义,#也不是特殊字符,不需要额外转义。
修正后的完整配置
name: 'Commit Message Standards Check' on: push: jobs: Commit_Message_Check: name: Commit Message Check runs-on: ubuntu-latest steps: - id: step1 run: | # 开启不区分大小写匹配 shopt -s nocasematch # 将提交消息存入Shell变量,避免特殊字符导致语法错误 COMMIT_MSG="${{ github.event.head_commit.message }}" # 使用bash扩展正则匹配 if [[ "$COMMIT_MSG" =~ (user story|defect|quality story) #[0-9]+ ]]; then echo "match=true" >> $GITHUB_OUTPUT fi - name: 输出匹配提示 if: steps.step1.outputs.match == 'true' run: echo "Matching Expression" - name: 不匹配则退出并提示 if: steps.step1.outputs.match != 'true' run: | echo "Wrong Expression" exit 1
关键修改点说明
- 使用
shopt -s nocasematch实现正则的不区分大小写匹配(对应原需求的i修饰符)。 - 将提交消息存入
COMMIT_MSG变量并通过双引号包裹,避免特殊字符破坏Shell语法。 - 简化正则表达式:去掉多余的转义字符,使用bash原生支持的扩展正则语法。
- 合并原step3和step4的逻辑,直接在不匹配的步骤中输出错误信息并退出,减少冗余步骤。
内容的提问来源于stack exchange,提问作者Sachin John Thomas
相关产品推荐
相关产品推荐

