【问题标题】:Determine source branch name on merge push in GitHub action workflow在 GitHub 操作工作流中确定合并推送的源分支名称
【发布时间】:2021-02-02 21:16:50
【问题描述】:

我有一个 GitHub 操作工作流,我在其中将各种不同的源分支合并到目标分支 main。

这是一个读取环境变量值的测试工作流程:

name: Print Github Env Variables
on:
  push:
    branches:
      - main
      - test
  pull_request:
    branches:
      - main
      - test
  workflow_dispatch:
jobs:
  print-env-variabes:
    name: Print Github Variables
    runs-on: ubuntu-latest
    steps:
      - name: Print Github Variables
        run: |
          echo "GITHUB_WORKFLOW:$GITHUB_WORKFLOW"
          echo "GITHUB_EVENT_NAME:$GITHUB_EVENT_NAME"
          echo "GITHUB_EVENT_PATH:$GITHUB_EVENT_PATH"
          echo "GITHUB_WORKSPACE:$GITHUB_WORKSPACE"
          echo "GITHUB_SHA:$GITHUB_SHA"
          echo "GITHUB_REF:$GITHUB_REF"
          echo "GITHUB_HEAD_REF:$GITHUB_HEAD_REF"
      - name: Print complete webhook event payload
        run: cat $GITHUB_EVENT_PATH

在名为 test 的分支中创建 test.txt 文件,创建拉取请求然后合并到 main。你会看到我所看到的。

当我查看 GITHUB_REF 时,它包含主分支。

对于 pull_requests GITHUB_HEAD_REF 包含“测试”,但对于 push 它是空的。我需要文件合并时的值,所以当推送发生时。

测试工作流还打印出整个事件 json 对象,在推送事件中我也没有看到任何带有分支“test”的条目。

如何在推送事件期间获取源分支的名称?

【问题讨论】:

  • 您可以使用HEAD^1HEAD^2 获取通勤的锚点。
  • 感谢@lucas 提供链接,但我想要源分支名称,而不是目标分支名称。
  • 推送没有源分支名称。它们只有一个提交哈希 ID。
  • @ValentinGenev:这是真的,但与这个问题无关。远程跟踪名称由git fetch 创建后存在于您自己的存储库中,问题是关于git push 和github“动作”(这些“动作”事物由GitHub 定义,而不是由Git 定义)。如果运行该操作的存储库具有远程跟踪名称,则其中一些可能包含 SHA,但有些可能不包含,并且包含该名称的集合可能不是正确的集合,或者可能包含太多名称有用。

标签: git github github-actions


【解决方案1】:

在合并请求后这对我有用:

export LATESTLOG=$(git log -1 --pretty=%B)
export SOURCEBRANCH=$(echo $LATESTLOG | awk -F '\\\\n' '{print $1}' |  awk -F '/' '{print $2}' | awk '{print $1}')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-14
    • 2020-12-30
    • 1970-01-01
    • 2020-02-17
    • 2022-01-26
    • 2020-01-15
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多