You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GitHub Action部署Flutter包?解决Pub授权问题

解决GitHub Action部署pub.dev包时的授权失败问题

我通过GitHub Action将包部署到pub.dev,完成所有配置流程后,仍然收到提示:

Pub needs your authorization to upload packages on your behalf.

以下是我的配置文件和日志:

秘钥配置脚本pub_login.sh

# This script creates/updates pub-credentials.json file which is used
# to authorize publisher when publishing packages to pub.dev

# Checking whether the secrets are available as environment
# variables or not.
if [ -z "${PUB_DEV_PUBLISH_ACCESS_TOKEN}" ]; then
  echo "Missing PUB_DEV_PUBLISH_ACCESS_TOKEN environment variable"
  exit 1
fi

if [ -z "${PUB_DEV_PUBLISH_REFRESH_TOKEN}" ]; then
  echo "Missing PUB_DEV_PUBLISH_REFRESH_TOKEN environment variable"
  exit 1
fi

if [ -z "${PUB_DEV_PUBLISH_TOKEN_ENDPOINT}" ]; then
  echo "Missing PUB_DEV_PUBLISH_TOKEN_ENDPOINT environment variable"
  exit 1
fi

if [ -z "${PUB_DEV_PUBLISH_EXPIRATION}" ]; then
  echo "Missing PUB_DEV_PUBLISH_EXPIRATION environment variable"
  exit 1
fi
# ADD THIS LINE TO CREATE THE DIRECTORY
mkdir -p ~/.pub-cache
# Create pub-credentials.json file.
cat <<EOF > ~/.pub-cache/pub-credentials.json
{
  "accessToken":"${PUB_DEV_PUBLISH_ACCESS_TOKEN}",
  "refreshToken":"${PUB_DEV_PUBLISH_REFRESH_TOKEN}",
  "tokenEndpoint":"${PUB_DEV_PUBLISH_TOKEN_ENDPOINT}",
  "scopes":["https://www.googleapis.com/auth/userinfo.email","openid"],
  "expiration":${PUB_DEV_PUBLISH_EXPIRATION}
}
EOF

GitHub Action YAML配置

on:
  release:
    branches:
      - master
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Install Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: '3.3.3'
      - name: Install dependencies
        run: flutter pub get
      - name: Analyze
        run: flutter analyze
      - name: Run tests
        run: flutter test
      - name: Setup Pub Credentials
        shell: bash
        env:
          PUB_DEV_PUBLISH_ACCESS_TOKEN: ${{ secrets.PUB_DEV_PUBLISH_ACCESS_TOKEN }}
          PUB_DEV_PUBLISH_REFRESH_TOKEN: ${{ secrets.PUB_DEV_PUBLISH_REFRESH_TOKEN }}
          PUB_DEV_PUBLISH_TOKEN_ENDPOINT: ${{ secrets.PUB_DEV_PUBLISH_TOKEN_ENDPOINT }}
          PUB_DEV_PUBLISH_EXPIRATION: ${{ secrets.PUB_DEV_PUBLISH_EXPIRATION }}
        run: |
          sh ./pub_login.sh
      - name: Check Publish Warnings
        run: dart pub publish --dry-run
      - name: Publish Package
        run: dart pub publish -f

相关日志截图

GitHub Action日志


解决方案

1. 确保凭证文件权限正确

脚本生成pub-credentials.json后,添加权限设置避免pub无法读取:
在脚本的cat <<EOF > ~/.pub-cache/pub-credentials.json代码块后新增:

chmod 600 ~/.pub-cache/pub-credentials.json

2. 显式指定PUB_CACHE路径

在执行pub命令的步骤前,明确设置缓存路径,确保pub能定位到凭证文件:
修改Action中的发布相关步骤:

- name: Check Publish Warnings
  run: |
    export PUB_CACHE="$HOME/.pub-cache"
    dart pub publish --dry-run
- name: Publish Package
  run: |
    export PUB_CACHE="$HOME/.pub-cache"
    dart pub publish -f

3. 验证凭证有效性

  • 检查PUB_DEV_PUBLISH_EXPIRATION是否为数字时间戳(不能是字符串格式),确认未过期。
  • 重新获取有效凭证:在本地执行dart pub publish完成授权后,从本地~/.pub-cache/pub-credentials.json中复制最新的凭证值到GitHub Secrets。

4. 统一Flutter/Dart环境版本

确保Action中安装的Flutter版本与本地测试版本一致,不同版本的pub对凭证路径的处理可能存在差异。

5. 直接在Action步骤中生成凭证文件

避免脚本路径问题,将凭证生成逻辑直接写入Action步骤:
替换原Setup Pub Credentials步骤为:

- name: Setup Pub Credentials
  shell: bash
  env:
    PUB_DEV_PUBLISH_ACCESS_TOKEN: ${{ secrets.PUB_DEV_PUBLISH_ACCESS_TOKEN }}
    PUB_DEV_PUBLISH_REFRESH_TOKEN: ${{ secrets.PUB_DEV_PUBLISH_REFRESH_TOKEN }}
    PUB_DEV_PUBLISH_TOKEN_ENDPOINT: ${{ secrets.PUB_DEV_PUBLISH_TOKEN_ENDPOINT }}
    PUB_DEV_PUBLISH_EXPIRATION: ${{ secrets.PUB_DEV_PUBLISH_EXPIRATION }}
  run: |
    mkdir -p ~/.pub-cache
    cat <<EOF > ~/.pub-cache/pub-credentials.json
    {
      "accessToken":"${PUB_DEV_PUBLISH_ACCESS_TOKEN}",
      "refreshToken":"${PUB_DEV_PUBLISH_REFRESH_TOKEN}",
      "tokenEndpoint":"${PUB_DEV_PUBLISH_TOKEN_ENDPOINT}",
      "scopes":["https://www.googleapis.com/auth/userinfo.email","openid"],
      "expiration":${PUB_DEV_PUBLISH_EXPIRATION}
    }
    EOF
    chmod 600 ~/.pub-cache/pub-credentials.json

内容的提问来源于stack exchange,提问作者Kunchok Tashi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:05:22