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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:38:11