Github操作-获取PR标题



我有一个连续集成工作流程,我想运行

  1. 关于PR合并到主分支
  2. 如果有任何对PR的推送(运行测试和linting(

我还想让PR标题和描述打印到日志中,但PR标题返回一个空字符串。

代码如下:

name: Continuous Integration
# according to the docs, this will be triggered every time someone 
# pushes a change to the repo or merges a pull request
on: push
env:
PR_TITLE: ${{ github.event.pull_request.title }} # this is returning empty
PR_DESCRIPTION: ${{ github.event.head_commit.message }}
jobs:
ci:
runs-on: self-hosted
steps:
- uses: actions/checkout@v3
- name: Print PR info to console
run: |
echo "PR title is: $PR_TITLE"
echo "PR description is: $PR_DESCRIPTION"
- name: Python
uses: actions/setup-python@4
with:
python-version: "3.11"
- name: Unitests and Style check
pytest
mypy
- name: Post actions
if: success()
run: |
echo "Success"

文档没有明确表示,至少我找不到,但能够从其他帖子中推断出,你只能访问触发工作流的事件的上下文。例如,我使用${{ github.event.pull_request.title }}来获取标题,但pull_request不在on:语句中。这是一个正确的假设吗?我主要从这篇文章中得到了这一点:如何使用Github Actions 获得Pull Request的标题

push事件在有效负载中不包含PR的标题,因为它在任何推送时都会触发,而不仅仅是推送到拉请求(特别是推送至尚未创建PR的分支(。

如果你真的只想在pull请求和push-to-main上运行工作流,我建议将触发器切换为:

on:
pull_request:
push:
branches: [main]

虽然您可以从推送事件中获取拉请求标题,但请考虑以下内容:

  • 您必须首先找到PR,例如在提交时使用GraphQL查询associatedPullRequests
    • 可能不止一个
    • 如果用户推送到没有PR的分支机构,则可能没有PR
    • 可能有一个,但你找不到,因为它来自叉子
  • 在主干道上运行时,您必须区分情况

使用触发器pull_request解决了所有这些问题,只是在将PR标题打印到控制台时,您仍然需要区分是否在main上运行。

你可能会这样做:

- run: echo "PR title is: ${{ github.event.pull_request.title || 'On Main' }}"

最新更新