Github Actions如何仅针对推送的最新标签触发工作流?
GitHub Action 多标签推送仅触发最新标签工作流方案
你原有的触发配置无需修改,只需要在作业中新增标签校验逻辑,即可实现单次推送多个标签时仅针对最新标签执行后续任务,完整配置示例如下:
on: push: tags: - '*' jobs: build: runs-on: ubuntu-latest steps: # 新增校验步骤:判断当前触发标签是否为本次推送的最新标签 - name: 校验是否为最新触发标签 id: check-latest-tag run: | # 获取本次推送所有关联的标签 PUSHED_TAGS=$(git tag --contains ${{ github.sha }}) # 按标签创建时间倒序排序,取第一个即为最新创建的标签 LATEST_TAG=$(echo "$PUSHED_TAGS" | xargs -I {} git log -1 --format=%ct\ {} {} | sort -nr | head -n 1 | awk '{print $2}') # 当前工作流触发的标签 CURRENT_TAG=${GITHUB_REF#refs/tags/} if [ "$CURRENT_TAG" != "$LATEST_TAG" ]; then echo "当前标签 $CURRENT_TAG 不是最新推送标签,终止工作流" exit 1 fi echo "当前为最新标签 $LATEST_TAG,继续执行后续任务" # 后续你的原有业务步骤 - name: 后续业务步骤 run: echo "执行业务逻辑"
如果你使用语义化版本号作为标签(例如v1.2.3),想要取最高版本而非最新创建时间的标签,可以把上述步骤中LATEST_TAG的赋值逻辑替换为:
# 按语义化版本号倒序排序,取最高版本 LATEST_TAG=$(echo "$PUSHED_TAGS" | sort -rV | head -n 1)
内容的提问来源于stack exchange,提问作者Amith
相关产品推荐
相关产品推荐

