在 Github Action 中,hashFiles 显示错误的哈希值。

6

我正在 Github Actions 中运行以下代码

- name: Verify Workflow integrity
  run: |
        echo "some text" > test/apps/test/test.yml
        cat test/apps/test/test.yml
        
        echo "${{ hashFiles('test/apps/test/*.yml') }}"

        echo "alter text" > test/apps/test/test.yml
        cat test/apps/test/test.yml
        echo "${{ hashFiles('test/apps/test/*.yml') }}"

它生成以下输出。
| some text
| e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
| alter text
| e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

文件中的文本已更改,我期望得到不同的哈希值。然而,它生成了相同的哈希值。我错过了什么吗?

基本上,我想找到test/apps/test目录中所有文件的哈希值。

2个回答

3
在您的run部分中,整个“脚本”一次性执行。在执行之前,“脚本”将被评估,并解析所有变量和/或函数调用。
因此,在执行“脚本”之前,会两次评估hashFiles('test/apps/test/*.yml'),其结果为e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855。然后,执行下面这个解析后的版本的“脚本”。
            echo "some text" > test/apps/test/test.yml
            cat test/apps/test/test.yml
            
            echo "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    
            echo "alter text" > test/apps/test/test.yml
            cat test/apps/test/test.yml
            echo "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

因为所有hashFiles()的调用都在执行之前解决了,所以脚本中发生的所有事情都不被考虑。

一种解决方法是将事物分成多个run

    - name: Verify Workflow integrity
      run: |
            echo "some text" > test/apps/test/test.yml
            cat test/apps/test/test.yml
    - run: echo "${{ hashFiles('test/apps/test/*.yml') }}"
    - run: |
            echo "alter text" > test/apps/test/test.yml
            cat test/apps/test/test.yml
    - run: echo "${{ hashFiles('test/apps/test/*.yml') }}"

1

首先,尝试使用精确名称文件而不是通配符进行相同的测试:

 echo "${{ hashFiles('test/apps/test/test.yml') }}"

有一个关于hashfilesactions/runner问题, 但是据说已经修复了。

其次,请尝试使用双引号而不是单引号(强引号),以确保通配符'*'被 shell 解释。

 echo "${{ hashFiles("test/apps/test/*.yml") }}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接