运行YAML任务时如何获取PR最新里程碑数据,校验里程碑是否已设置?
问题原因
context.payload.pull_request是工作流触发时刻的快照数据,重新运行历史工作流时,该 payload 不会同步更新为当前最新的 PR 状态,因此始终读取的是最后一次推送提交时的里程碑信息。你看到的早年社区讨论是当时还不支持里程碑变更触发工作流的功能请求,目前该需求完全可以实现。
解决方案
1. 修改脚本主动拉取最新PR状态
不要直接读取上下文中的快照数据,调用GitHub API实时查询当前PR的最新信息,修改后的任务代码如下:
jobs: milestone: name: Check if milestone is set runs-on: ubuntu-latest steps: - name: Check milestone uses: actions/github-script@v5 with: script: | const prNumber = context.payload.pull_request.number; // 主动调用API拉取最新PR数据 const { data: pr } = await github.rest.pulls.get({ owner: context.repo.owner, repo: context.repo.repo, pull_number: prNumber }); if (pr.milestone) { core.info(`This pull request has a milestone set: ${pr.milestone.title}`); } else { core.setFailed(`A maintainer needs to set the milestone for this pull request.`); }
修改后即使重新运行历史工作流,也会读取当前最新的里程碑状态,符合预期。
2. 配置里程碑变更自动触发检查(可选)
如果希望修改里程碑后不需要手动重跑工作流,自动触发校验,可以在工作流的触发配置段新增对应的活动类型:
on: pull_request: # 保留你原有需要的触发类型,如opened、synchronize等,新增以下两个类型 types: [opened, synchronize, milestoned, demilestoned]
配置后PR被设置/移除里程碑时,会自动触发该检查任务运行。
内容的提问来源于stack exchange,提问作者kimv
相关产品推荐
相关产品推荐

