如何用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, "" )
脚本说明
- 遍历所有发布版本:
.releases[] as $release - 先输出固定的版本标题:
"## " + $release.name - 核心条件判断:用
if $release.changes.added != null检查当前版本是否存在added变更- 存在则依次输出
### Added标题和格式化后的变更列表项 - 不存在则用
empty跳过该部分,不输出多余内容
- 存在则依次输出
- 最后输出空行,分隔不同版本的内容
执行命令
将脚本保存为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
相关产品推荐
相关产品推荐

