【问题标题】:Github Action pull request doesn't provide last commit by github_shaGithub Action 拉取请求不提供 github_sha 的最后一次提交
【发布时间】:2020-04-15 16:10:13
【问题描述】:

我有一个在拉取请求时触发的 github 操作工作流。我想查找每次提交中已更改的文件,因此我尝试运行 git diff-tree --no-commit-id --name-only -r ${{ github.sha }}
但是,它不会返回该拉取请求中最新提交的哈希提交。我返回了另一个哈希提交(我在我的仓库中的任何地方都找不到它的提交)。
任何人都知道如何解决这个问题或其他方式我可以在拉取请求中找到所有在提交中更改的文件?

编辑——yml文件

name: test
on: [pull_request]
jobs:
  build: 
    runs-on: ubuntu-latest
    steps:
    - checkout my repo
    - install python
    - run a python script
      run: |
        CHANGED_FILES=$(git diff-tree --no-commit-id --name-only -r ${{ github.sha }})
        python3 .github/scripts/test.py $CHANGED_FILES

我由 github.sha(这里 ^)生成的哈希提交似乎与我提交的实际哈希不匹配。

【问题讨论】:

  • 在脚本中使用像${{ github.sha }} 这样的表达式真的有效吗?您是否尝试打印此值以查看它是否实际包含任何内容。尝试将其与 GITHUB_SHA 环境变量进行比较。
  • 它似乎确实有效,它确实打印了一个值。当我更改触发器以推送它时,它可以完美地工作,与实际的提交哈希匹配。当触发器更改为拉取请求时出现问题,提交哈希不匹配,然后我没有返回任何文件
  • 尝试使用GITHUB_REF 环境变量。所以git diff-tree --no-commit-id --name-only -r $GITHUB_REF
  • 收到此错误fatal: ambiguous argument 'refs/pull/num/merge': unknown revision or path not in the working tree.
  • 我找到了另一种解决方法。我正在使用来自 github 市场 Changed Files Exporter 的此操作。到目前为止似乎有效

标签: git github github-actions


【解决方案1】:

我在使用不同的触发器时遇到了类似的问题。事实证明,您可以使用以下步骤打印 GitHub 变量:

- name: Dump GitHub context
  env:
    GITHUB_CONTEXT: ${{ toJson(github) }}
  run: echo "$GITHUB_CONTEXT"

pull_request 的情况下,最新提交的哈希可以在${{ github.event.pull_request.head.sha }} 变量中找到,而${{ github.sha }} 指的是PR 合并提交。

【讨论】:

猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 2018-08-30
  • 2021-08-14
相关资源
最近更新 更多