You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自动化生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 02:20:09