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

生成每日构建版本号时,当日构建次数无法递增的问题排查

问题根源分析

你的代码存在两个核心错误,导致当日构建次数无法递增:


1. 数组长度计算逻辑错误

你试图用${#BUILDS_TODAY[@]}获取当日构建次数,但:

  • BUILDS_TODAY=$(seq ...)的结果是字符串,不是数组。在Bash中,直接赋值的字符串会被当作数组的单个元素,因此${#BUILDS_TODAY[@]}永远返回1,和实际内容无关。
  • 你的seq命令语法完全错误:seq的参数顺序是seq [起始值] [结束值],当你传入${{ github.run_number }}和${{ github.run_number }} -1时,起始值大于结束值,seq不会生成任何有效序列,最终BUILDS_TODAY是空字符串,但依然被当作数组的一个元素,长度还是1。

2. 当日构建次数的计算逻辑错误

github.run_number是仓库全局的工作流运行计数器,每次触发工作流都会递增,跨天不会重置。用它来计算当日构建次数完全不成立,无法区分不同日期的构建记录。


正确实现方案

要获取当日构建次数,需要依赖外部存储或GitHub API来统计当日的工作流运行次数,以下是两种可行方案:

方案一:通过GitHub API查询当日运行次数(无需额外存储)

利用GitHub API查询当前工作流当日的运行记录数,直接计算当日构建次数:

# 先在工作流开头添加权限声明
permissions:
  actions: read

- name: Generate Build Version Number
  id: GET_BUILD_VERSION
  run: |
    # 格式化当日日期为YYYY-MM-DD,匹配GitHub API的时间格式
    TODAY=$(date +%Y-%m-%d)
    # 查询当日该工作流的总运行次数
    BUILDS_TODAY=$(gh api repos/${{ github.repository }}/actions/workflows/${{ github.workflow_id }}/runs \
      --method GET \
      --field per_page=100 \
      --field created="$TODAY" \
      --jq '.total_count')
    # 首次构建时total_count为0,所以加1得到当前次数
    CURRENT_BUILD=$((BUILDS_TODAY + 1))
    BUILD_VERSION_GENERATED=$(date +v%Y.%m%d.$CURRENT_BUILD)
    
    echo "Generated Build Version: $BUILD_VERSION_GENERATED"
    echo "BUILD_VERSION=$BUILD_VERSION_GENERATED" >> $GITHUB_ENV
    echo "BUILD=true" >> $GITHUB_ENV
    echo "::set-output name=build_version::$BUILD_VERSION_GENERATED"
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

方案二:用仓库变量存储当日计数(不依赖API)

通过仓库变量维护当日日期和计数,跨天自动重置:

# 先在工作流开头添加权限声明
permissions:
  repository-variables: write

- name: Generate Build Version Number
  id: GET_BUILD_VERSION
  run: |
    TODAY=$(date +%Y%m%d)
    # 读取已存储的日期和计数,不存在则返回空/0
    STORED_DATE=$(gh variable get BUILD_DATE --repo ${{ github.repository }} 2>/dev/null || echo "")
    STORED_COUNT=$(gh variable get BUILD_COUNT --repo ${{ github.repository }} 2>/dev/null || echo "0")

    if [ "$STORED_DATE" = "$TODAY" ]; then
      # 同一天,计数递增
      NEW_COUNT=$((STORED_COUNT + 1))
    else
      # 新的一天,重置计数为1并更新日期
      NEW_COUNT=1
      gh variable set BUILD_DATE --repo ${{ github.repository }} --body "$TODAY"
    fi

    # 更新仓库中的计数变量
    gh variable set BUILD_COUNT --repo ${{ github.repository }} --body "$NEW_COUNT"

    BUILD_VERSION_GENERATED=$(date +v%Y.%m%d.$NEW_COUNT)
    echo "Generated Build Version: $BUILD_VERSION_GENERATED"
    echo "BUILD_VERSION=$BUILD_VERSION_GENERATED" >> $GITHUB_ENV
    echo "BUILD=true" >> $GITHUB_ENV
    echo "::set-output name=build_version::$BUILD_VERSION_GENERATED"
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:03:20