GitHub Actions通过API创建Release时变量替换失败求助
解决GitHub Workflow中curl命令的变量替换问题
问题原因
你遇到的bad substitution错误,源于两个核心问题:
- GitHub Secrets引用语法错误:必须使用Workflow上下文变量的
${{ secrets.GITHUB_TOKEN }}格式,而非${ secrets.GITHUB_TOKEN }——后者的空格和单大括号会被shell判定为无效变量名,触发替换错误。 - 多行run命令写法不规范:原写法的转义换行容易引发解析异常,改用
|定义多行脚本更稳妥。
修正后的Workflow配置
name: make release on: workflow_dispatch: jobs: try-to-create-a-tag: runs-on: ubuntu-latest steps: - name: Create release run: | curl \ -X POST \ -H "Accept:application/vnd.github+json" \ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ https://api.github.com/repos/.../releases \ -d '{"tag_name":"tag_test11","target_commitish":"main","name":"tag_test11","body":"Description of the release","draft":false,"prerelease":false,"generate_release_notes":false}'
关键修正说明
- 用
run: |定义多行shell脚本,避免每行转义带来的解析风险,同时提升代码可读性。 - 通过
${{ secrets.GITHUB_TOKEN }}正确引用GitHub Secrets,这是Workflow上下文变量的标准语法,shell会自动替换为实际的token值。 Authorization头中token后添加空格,符合GitHub API的规范认证格式。
内容的提问来源于stack exchange,提问作者Mathew
相关产品推荐
相关产品推荐

