github操作中的hashFiles显示不正确的哈希



我正在github操作中运行以下代码

- 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目录中所有文件的哈希

整个"脚本";在您的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') }}"

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

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

(hashfilesactions/runner出现问题,但应该已修复(

第二,尝试使用双引号而不是单引号(强引号(,以确保外壳能够解释通配符"*"。

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

最新更新