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

如何用mikefarah/yq条件输出CHANGELOG中的### Added内容?

解决mikefarah/yq生成CHANGELOG时条件显示Added标题的问题

问题场景

使用mikefarah/yq从包含多版本发布信息的YAML文件生成CHANGELOG.md时,需要仅在对应版本存在added类型变更时才显示### Added标题。当前脚本会在无added变更的版本(如v0.0.1)下错误输出该标题,需调整脚本实现条件打印。

原YAML文件(input.yaml)

releases:
  - name: v0.0.2
    changes:
      added:
        - Second feature (#3)
  - name: v0.0.1
    changes:
  - name: v0.0.0
    changes:
      added:
        - Bootstrap the project (#1)
        - First feature (#2)

期望输出的CHANGELOG.md

## v0.0.2
### Added
- Second feature (#3)

## v0.0.1

## v0.0.0
### Added
- Bootstrap the project (#1)
- First feature (#2)

正确的yq脚本

通过if-else条件判断控制### Added标题及对应列表的输出:

.releases[] as $release | (
  "## " + $release.name,
  if $release.changes.added != null then (
    "### Added",
    "- " + $release.changes.added[]
  ) else empty end,
  ""
)

脚本说明

  1. 遍历所有发布版本:.releases[] as $release
  2. 先输出固定的版本标题:"## " + $release.name
  3. 核心条件判断:用if $release.changes.added != null检查当前版本是否存在added变更
    • 存在则依次输出### Added标题和格式化后的变更列表项
    • 不存在则用empty跳过该部分,不输出多余内容
  4. 最后输出空行,分隔不同版本的内容

执行命令

将脚本保存为changelog.yq后执行:

yq -f changelog.yq input.yaml > CHANGELOG.md

或直接在命令行执行单行命令:

yq e '.releases[] as $release | ("## " + $release.name, if $release.changes.added != null then ("### Added", "- " + $release.changes.added[]) else empty end, "")' input.yaml > CHANGELOG.md

内容的提问来源于stack exchange,提问作者Sébastien MICHOY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:07:47