GitHub Actions无法修改文件:版本更新Workflow执行无变更排查
问题分析与解决方案
核心问题:单引号导致Shell变量无法解析
你的sed命令使用单引号包裹替换表达式,而Shell不会解析单引号内部的变量。这意味着sed实际在尝试匹配字面量${version},而非你从Git标签提取出的真实版本号——pyproject.toml里的版本格式显然不是这个字符串,所以替换完全没生效。
次要问题:版本行格式匹配不精确
假设你的pyproject.toml中版本行是类似version = "1.2.3"的格式,原sed表达式没有匹配引号和完整的行结构,即便变量能解析,也可能无法命中目标行。
修正后的Workflow代码
- name: Bump version run: | export TAG=$(git tag --sort version:refname | tail -n1) echo ${TAG} export version=$(cut -c 2- <<< $TAG) echo ${version} # 改用双引号让Shell解析变量,同时匹配pyproject.toml的标准版本行格式 sed -i "s/version = \"${version}\"/version = \"${{ github.event.inputs.version }}\"/" pyproject.toml - name: Commit changelog and manifest files id: make-commit run: | # 调试用:先查看文件变更,确认替换生效 git diff git add CHANGELOG.md pyproject.toml git commit --message "Prepare release v${{ github.event.inputs.version }}" echo "::set-output name=commit::$(git rev-parse HEAD)" - name: Push new branch run: git push origin release/v${{ github.event.inputs.version }}
额外调试建议
- 确认
git tag能正常获取到最新标签:如果仓库没有任何标签,TAG会是空值,后续步骤直接失效,可提前加判断逻辑。 - 验证输入版本号:在步骤中添加
echo ${{ github.event.inputs.version }},确认触发Workflow时传入的版本号正确。 - 检查sed匹配逻辑:如果你的pyproject.toml版本行格式特殊(比如不带引号、有注释),需要调整sed的正则表达式来匹配实际格式。
内容的提问来源于stack exchange,提问作者bruvio
相关产品推荐
相关产品推荐

