我已经设置了一个 CircleCI 作业来运行语义发布,但我希望 CircleCI 在没有发现任何更改时失败。即当语义释放输出时:
没有相关的变化,所以没有发布新版本
运行线的 CircleCi 片段。
- run:
name: Semantic Release
command: npm run semantic-release
我已经设置了一个 CircleCI 作业来运行语义发布,但我希望 CircleCI 在没有发现任何更改时失败。即当语义释放输出时:
没有相关的变化,所以没有发布新版本
运行线的 CircleCi 片段。
- run:
name: Semantic Release
command: npm run semantic-release
好问题。我没有对此进行测试,也不太了解 Node.js 以便快速测试,但这是我的建议。
grep
0
如果它找到某些东西,1
如果它没有,则返回一个退出代码。0
除了表示 CircleCI 失败之外的任何退出代码。Grep 的-q
标志表示安静,不输出文本,&&
表示只有在前一个命令通过时才运行。所以,这可能对你有用:
- run:
name: Semantic Release
# Fail if there are no changes
command: npm run semantic-release | grep -q "There are no relevant changes, so no new version is released." && exit 1
同样,我没有亲自测试过它,所以我不知道如何semantic-release
输出东西,但这可能会奏效。
在故意不释放的情况下,语义释放不会出错。
如果您添加了一个不保证发布的提交(例如修改代码中的注释或代码格式的提交),您不希望您的 CI 失败。
简而言之,在不需要发布时不发布不是错误情况,因此 CI 不应该出错。
semantic-release 有意不支持这一点,但是,如果您需要管道在不创建版本的情况下失败,您可以按照建议搜索该特定文本,也可以使用插件来执行此操作。
npm install --save-dev commit-analyzer-fail-on-no-release
在语义发布配置文件中,将默认提交分析器替换为commit-analyzer-fail-on-no-release
. 如果您已配置,则所有配置选项都会传递给默认插件@semantic-release/commit-analyzer
。
.releaserc
{
"plugins": [
"commit-analyzer-fail-on-no-release"
]
}