You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions的hashFiles函数调用中嵌套变量?

GitHub Actions中hashFiles无法解析变量参数的原因及解决方法

问题原因

这是正常的机制限制。GitHub Actions的表达式解析有优先级:hashFiles属于函数调用,它的参数会被当作字面量字符串优先解析,不会嵌套解析内部的${{ inputs.root-path }}表达式。也就是说第一次调用时,hashFiles实际接收的参数是原始字符串repo/${{ inputs.root-path }}/package-lock.json,而非替换后的repo/env/package-lock.json,自然找不到目标文件,返回空值。

解决方法

要在hashFiles中使用变量输入,需要先完成路径的拼接,再传入函数:

方法1:用format函数拼接路径

通过format函数把变量和固定路径部分组合成完整路径,再传给hashFiles:

- name: DEBUG
  run: |
    set -x
    ls -l repo/${{ inputs.root-path }}/package-lock.json
    echo "HASH: ${{ hashFiles(format('repo/{0}/package-lock.json', inputs.root-path)) }}"
    echo "HASH: ${{ hashFiles('repo/env/package-lock.json') }}"

方法2:通过环境变量传递路径

先把完整路径存入环境变量,再用环境变量作为hashFiles的参数:

- name: DEBUG
  env:
    LOCK_FILE_PATH: repo/${{ inputs.root-path }}/package-lock.json
  run: |
    set -x
    ls -l $LOCK_FILE_PATH
    echo "HASH: ${{ hashFiles(env.LOCK_FILE_PATH) }}"
    echo "HASH: ${{ hashFiles('repo/env/package-lock.json') }}"

两种方法都能让hashFiles正确获取到替换后的实际文件路径,从而计算出正确的哈希值。

内容的提问来源于stack exchange,提问作者Josh M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:19:53