如何在Monorepo中用release-please-action更新package.json版本?
解决release-please-action处理Monorepo中JSON文件版本递增的问题
问题根源
你用>符号定义多行字符串时,YAML会将所有换行转换为空格,导致整个JSON数组被当成单个字符串[ api/pyproject.toml, api/src/app.py, { "type": "json", ... } ],release-please会把开头的[误认为是文件名,从而抛出file [ did not exist错误。
解决方案
1. 使用YAML原生数组格式配置extra-files
直接用YAML的数组语法替代JSON数组,YAML解析器能正确识别每个元素:
jobs: release-please: runs-on: ubuntu-latest steps: - uses: google-github-actions/release-please-action@v3 id: release with: release-type: simple extra-files: - api/pyproject.toml - api/src/app.py - type: json path: web/package.json jsonpath: "$.version"
这种写法不需要嵌套JSON,YAML会自动将其解析为包含字符串和对象的数组,release-please能正确识别每个文件的配置规则。
2. 使用独立配置文件避免YAML格式问题
如果还是遇到格式解析问题,可在项目根目录创建.release-please-config.json文件,将所有配置集中存放:
{ "release-type": "simple", "extra-files": [ "api/pyproject.toml", "api/src/app.py", { "type": "json", "path": "web/package.json", "jsonpath": "$.version" } ] }
然后简化GitHub Action配置,让它自动读取这个配置文件:
jobs: release-please: runs-on: ubuntu-latest steps: - uses: google-github-actions/release-please-action@v3 id: release
3. 验证JSONPath正确性
确保$.version能精准定位到web/package.json中的版本字段,示例package.json结构:
{ "name": "web-app", "version": "1.0.0", // 其他字段... }
如果版本字段在嵌套结构中,需调整JSONPath(比如$.package.version)。
4. 升级action版本(可选)
如果当前v3版本存在已知解析bug,可尝试升级到最新稳定版(如@v4),确保兼容该配置方式。
内容的提问来源于stack exchange,提问作者somoria
相关产品推荐
相关产品推荐

