自动化生成GitHub PR变更日志时出现异常箭头字符,求排查
PR自动生成变更日志出现异常箭头字符的排查与解决
问题描述
我通过GitHub工作流在PR创建时自动生成变更日志,流程是拉取PR内的所有提交,将PR正文更新为以下格式:
Changelog:
- feat: new file
- feat: update to file
但实际输出的变更日志里出现了一个异常箭头字符,不清楚其来源。
相关代码片段
const commitMessages = `${{ steps.fetch-commits.outputs.commit_messages }}`; let changelog = "## Changelog:\n"; commitMessages.split('|').forEach(line => { changelog += `${line}`; }); const prNumber = context.payload.pull_request.number; const owner = context.repo.owner; const repo = context.repo.repo; await github.rest.pulls.update({ owner: owner, repo: repo, pull_number: prNumber, body: changelog, headers: { authorization: `token ${process.env.PAT}` } });
排查方向与解决方案
1. 提交消息或日志输出格式混入箭头
箭头字符大概率来自拉取提交消息的环节:
- 检查
fetch-commits步骤的实现,比如是否用了类似git log --format="%h => %s"的命令,这种格式会直接在输出中加入=>箭头,需要调整为纯提交消息格式,比如git log --format="- %s"。 - 查看PR内的所有提交消息,确认是否有提交本身包含
=>字符,若有则需要规范提交消息格式,或者在代码中过滤该字符。
2. 代码分割与拼接逻辑问题
- 分割符冲突:如果提交消息中包含
|,split('|')会将单条提交消息拆分成多段,可能导致异常内容混入。建议更换为更罕见的分割符(如|||),同时同步调整fetch-commits步骤的输出分隔规则。 - 缺少内容过滤:遍历提交消息时未做格式校验,导致无效内容被加入日志。可以添加过滤逻辑,只保留符合规范的条目:
commitMessages.split('|').forEach(line => { const trimmedLine = line.trim(); // 只保留以"- "开头的有效变更条目 if (trimmedLine && trimmedLine.startsWith('- ')) { changelog += `${trimmedLine}\n`; } });
3. 变量引用错误
原代码中commitMessages的定义若存在多余反斜杠(如\${{ ... }}),会导致GitHub Actions变量未被正确替换,虽不是箭头的直接原因,但也需要修正为:
const commitMessages = `${{ steps.fetch-commits.outputs.commit_messages }}`;
内容的提问来源于stack exchange,提问作者pipocaDourada
相关产品推荐
相关产品推荐

