我正在为一个项目做一个github动作,这个项目有以下部分:
- name: Check for version change
id: check_version
run: |
git fetch origin main
VERSION_CHANGED=$(git diff --name-only ${{ github.event.before }}..HEAD | grep -c '^src/manifest.json$')
echo "version_changed=$VERSION_CHANGED" >> "$GITHUB_OUTPUT"
字符串
它允许我查看我的清单文件中是否有更改。如果是,则返回1,如果否,则返回0。
问题是,当它返回1时,我的所有其他操作都顺利进行,但另一方面,它退出我,并出现以下错误:
Run git fetch origin main
git fetch origin main
VERSION_CHANGED=$(git diff --name-only 32f9a1bbdaa01bcda6cbc59973fe89707c92abc2..HEAD | grep -c '^src/manifest.json$')
echo "version_changed=$VERSION_CHANGED" >> "$GITHUB_OUTPUT"
shell: /usr/bin/bash -e {0}
* branch main -> FETCH_HEAD
Error: Process completed with exit code 1.
型
这是一切顺利的结果,即使我怀疑它会有任何好处:
Run git fetch origin main
git fetch origin main
VERSION_CHANGED=$(git diff --name-only c47cdb4394c93c367b97241d7618a7608e9acb64..HEAD | grep -c '^src/manifest.json$')
echo "version_changed=$VERSION_CHANGED" >> "$GITHUB_OUTPUT"
shell: /usr/bin/bash -e {0}
* branch main -> FETCH_HEAD
型
1条答案
按热度按时间kpbwa7wx1#
与退出状态相关的是grep是否匹配;
grep -c
的数值并不直接相关。如果至少有一行与正则表达式匹配,则退出状态为0(成功),
VERSION_CHANGED
为1或更大。如果没有匹配的行,则退出状态为1(不成功),
VERSION_CHANGED
为0(如果设置了,请参见下文)。由于
run
步骤启用了set -e
(出错时退出),因此如果没有匹配项,将立即退出,并且不会设置VERSION_CHANGED
。因为你实际上对行数并不感兴趣(我认为),而只是想看看一个特定的文件是否被修改了,你可以把这个检查移到一个
if
条件中,它不受set -e
行为的影响:字符串
我使用
grep -q
而不是grep -c
,它只设置退出状态,不产生任何输出。