Skip to content

CI 流程 flutter-release.yml "Publish release to backend" 步骤:curl 无条件上传全部 3 个 APK,缺失即失败且被 continue-on-error 静默 #49

Description

@yunkst

问题位置.github/workflows/flutter-release.ymlPublish release to backend 步骤(约第 262-320 行,本次提交新增)。

问题:该步骤的 Python 块与 curl 命令对"哪些 APK 实际存在"持不同假设:

  • Python 块(用 if not os.path.exists(path): continue 过滤)只把存在的 APK 写入 meta.jsonfiles 数组。
  • 但紧随其后的 curl 命令无条件附加全部 3 个 -F "files=@..."
    curl --fail-with-body -sS -X POST \
      "$BACKEND_URL/api/admin/app/releases/publish" \
      -H "X-API-TOKEN: $BACKEND_TOKEN" \
      -F "meta=@$APK_DIR/meta.json;type=application/json" \
      -F "files=@$APK_DIR/app-arm64-v8a-release.apk" \
      -F "files=@$APK_DIR/app-armeabi-v7a-release.apk" \
      -F "files=@$APK_DIR/app-x86_64-release.apk"
  • 只要任何一个 APK 缺失(构建变体精简、CI 缓存异常、armv7 旧机器上 archive 失败等),curl 在 -F 解析阶段就报 curl: (26) Failed to open/read local data,整个发布失败。

影响

  • meta.json 内容与 files 字段不一致:meta 声称只有 N 个文件,但 curl 实际尝试发 N+k 个(k=缺失的),后端 publish 端点对多余/缺失文件的容错行为未在本次变更中确认,可能产生 4xx/5xx。
  • continue-on-error: true 把发布失败静默吞掉,CI 跑出 ✅ 绿勾但后端实际没同步——若产品方把"绿 = 已同步"作为约定,发布链路就出现不可见的"成功假象"。
  • 缺失部分 ABI 时,本来想推到 GitHub Releases 的发布就少了这一份镜像分发。

修复建议(任选其一,按简洁度排):

  1. 让 Python 块同时输出"实际存在的 APK 文件名列表"到 env(如 EXISTING_FILES),curl 之前用 bash for 循环动态生成 -F files=@... 参数。
  2. 在 Python 块中直接用 subprocess.run 调 curl,把 -F 参数根据 entries 动态构造。
  3. 至少加一个 for f in app-*.apk; do [ -f "$APK_DIR/$f" ] && ... ; done 的 bash 守卫,给每个缺失文件打 ⚠️ 跳过,让日志可读。

同时建议:把 continue-on-error: true 改为 continue-on-error: false 并配 Slack/邮件告警,至少在"早期"之外也加一条注释说明何时切换为强校验——当前注释写"跑稳后可移除",但没有触发条件可观察("跑稳"无定义)。


忽略指南:在项目根 .cr-ignore.md 追加:

  • issue: <CR_IGNORE_IID_NUM>
    reason: <你的理由>
    下次审查会自动关闭。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions