在CI中发布pub.dev包的最简单方法是什么?credentials.json格式可查吗?
核心问题解答
credentials.json(目前Dart 2.15+版本已更名为pub-credentials.json)的格式是公开可查的,属于pub官方定义的标准认证文件结构。
文件标准格式
你本地完成dart pub login授权后生成的凭证文件格式如下:
{ "accessToken": "Google OAuth访问令牌", "refreshToken": "Google OAuth刷新令牌", "idToken": "可选字段,Google账号ID令牌", "tokenEndpoint": "https://accounts.google.com/o/oauth2/v3/token", "scopes": [ "openid", "https://www.googleapis.com/auth/userinfo.email" ], "expiration": 令牌过期的Unix时间戳(秒级) }
低维护成本的Github Actions配置方案
你提到的写死Flutter版本路径的方案确实维护成本很高,可以用pub自带的环境变量实现跨版本、跨系统通用配置:
- 本地完成
dart pub login授权后,复制本地生成的pub-credentials.json全部内容 - 在Github仓库的Secrets设置中新增名为
PUB_CREDENTIALS的Secret,粘贴刚才复制的内容 - 在Github Actions的工作流文件中按系统对应写入凭证即可:
- Linux/macOS runner:
run: echo "${{ secrets.PUB_CREDENTIALS }}" > $PUB_CACHE/credentials.json - Windows runner:
run: echo "${{ secrets.PUB_CREDENTIALS }}" > $env:APPDATA\dart\pub-credentials.json
- Linux/macOS runner:
注意事项
- 凭证文件中的
refreshToken长期有效,除非你主动在Google账号设置中撤销pub的登录授权,无需频繁更新Secret - 所有凭证内容禁止直接提交到代码仓库,必须存储在Github Secrets等加密配置项中
- 如果你使用Flutter发布包,只需把发布命令换成
flutter pub publish即可,凭证文件通用
内容的提问来源于stack exchange,提问作者Blax
相关产品推荐
相关产品推荐

