如何在GitHub Action中将git diff保存为数组



我正试图在GitHub操作中将git diff中的文件名保存到数组中,以便在数组中迭代。

我可以确认我从下面得到了我需要的正确的两个提交哈希(也尝试过不使用--short(-必须将分支名称转换为提交哈希:

  • BASE_COMMIT=$(git rev-parse --short origin/$GITHUB_BASE_REF)
  • HEAD_COMMIT=$(git rev-parse --short origin/$GITHUB_HEAD_REF)

我预计以下操作会产生一组修改文件的文件路径,但不起作用:

SAVEIFS=$IFS
IFS=$'n'
mapfile my_array < <( git diff --name-only $BASE_COMMIT -- $HEAD_COMMIT )
IFS=$SAVEIFS
echo "${#myArray[@]}"

我还尝试使用mapfile的-t选项来代替$IFS,但仍然得到了一个空数组:

my_array=()
mapfile -t my_array < <( git diff --name-only $BASE_COMMIT -- $HEAD_COMMIT )
echo "${#myArray[@]}"

我已经确认,当在Mac上本地运行bash时,git diff --name-only $BASE_COMMIT..$HEAD_COMMIT给了我预期的结果,$BASE_COMMIT/$HEAD_COMMIT被适当的提交哈希所取代。

.yml的操作部分如下,其中foo_bar.sh是包含上述片段的可执行脚本。

name: Pull Request Action
on: pull_request
jobs:
JobName1:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Foo Bars
run: |
git fetch
./.github/foo_bar.sh
shell: bash

我查阅了Stack Overflow和GH Action文档,但没有找到一个在不使用市场上的另一个Action的情况下有效的答案(安全部门说这是不可能的(。我很感激你的帮助。

简单答案,归因于@larsks

GitHub Actions不需要用--替换..。我在之前的故障排除中误读了一个错误,以获得适当的提交。只要在workflow.yml文件中设置了shell: bash,数组就可以正常工作。

相关内容

  • 没有找到相关文章

最新更新