如何在Composite/Node自定义Action内获取Action引用?
获取自定义Action调用引用的可行方案
针对你想自动获取Action调用时的版本引用(如dloez/repo@v2中的v2),且不想让用户手动传参的需求,以下是两种适配Node.js和Composite Action的可行方法:
一、Node.js Action实现
Node Action中无需依赖@action/github,直接读取GitHub自动注入的环境变量GITHUB_ACTION_REF即可获取当前Action的调用引用。
示例代码:
// 直接读取环境变量 const actionRef = process.env.GITHUB_ACTION_REF; console.log(`当前Action版本:${actionRef}`); // 后续逻辑:根据actionRef拼接下载链接,获取对应平台的二进制文件 const platform = process.platform === 'win32' ? 'windows' : process.platform === 'darwin' ? 'macos' : 'linux'; const downloadUrl = `https://github.com/dloez/repo/releases/download/${actionRef}/my-app-${platform}`; // 执行下载、权限设置、参数传递等操作
这个环境变量会自动被GitHub填充为用户调用时指定的ref(标签、分支或commit SHA),完全不需要用户额外配置。
二、Composite Action实现
虽然Composite Action不能直接在步骤中使用${{ github.action_ref }},但可以通过在Action元数据文件(action.yml)的步骤内定义环境变量,间接传递这个值:
示例action.yml:
name: 'Rust自动版本管理Action' description: '封装Rust应用,自动匹配Action版本下载对应二进制文件' runs: using: 'composite' steps: - name: 下载对应版本二进制文件 env: ACTION_REF: ${{ github.action_ref }} RUNNER_OS: ${{ runner.os }} run: | # 适配不同系统的二进制文件名 if [ "$RUNNER_OS" == "Windows" ]; then BINARY_NAME="my-app-windows.exe" elif [ "$RUNNER_OS" == "macOS" ]; then BINARY_NAME="my-app-macos" else BINARY_NAME="my-app-linux" fi # 下载二进制文件 curl -LO "https://github.com/dloez/repo/releases/download/$ACTION_REF/$BINARY_NAME" # 赋予执行权限(非Windows系统) if [ "$RUNNER_OS" != "Windows" ]; then chmod +x "$BINARY_NAME" fi shell: bash - name: 执行二进制文件并传递输入参数 env: ACTION_BINARY: ${{ runner.os == 'Windows' && 'my-app-windows.exe' || runner.os == 'macOS' && 'my-app-macos' || 'my-app-linux' }} INPUT_VERSION_ARG: ${{ inputs.version_arg }} INPUT_DEPLOY_FLAG: ${{ inputs.deploy_flag }} run: | ./"$ACTION_BINARY" --version-input "$INPUT_VERSION_ARG" --deploy "$INPUT_DEPLOY_FLAG" shell: bash inputs: version_arg: description: '版本控制参数' required: true deploy_flag: description: '部署开关' required: false default: 'false'
这种方式下,用户调用你的Action时只需写uses: dloez/repo@v2,Action内部会自动获取v2作为下载版本,完全不需要用户手动传入版本信息。
适配多平台的注意事项
- 二进制文件命名需统一规则,比如包含系统标识(
linux/macos/windows),方便Action根据runner.os自动匹配。 - Composite Action中可通过
shell: bash/shell: pwsh区分不同系统的执行逻辑,或者用条件步骤处理跨平台差异。
内容的提问来源于stack exchange,提问作者dloez
相关产品推荐
相关产品推荐

