基于现有Node CLI工具封装自定义GitHub Action的疑问
可以实现,具体操作方式如下
完全可以在自定义GitHub Action里执行目标仓库package.json中的build脚本,把用户传入的参数动态传递过去,核心是通过Action的输入参数机制,配合命令行参数或环境变量实现传参逻辑。
步骤1:定义Action的输入参数
在你的自定义Action仓库中创建action.yml,声明需要用户传入的参数,比如示例中的foo参数:
name: '我的CLI工具封装Action' description: '为自定义Node CLI工具提供的GitHub Action' inputs: foo-value: description: '传递给CLI工具--foo选项的值' required: true runs: using: 'composite' steps: - name: 执行带自定义参数的build脚本 run: | npm run build -- --foo ${{ inputs.foo-value }} shell: bash
步骤2:调整用户仓库的build脚本
用户仓库的package.json不需要硬编码固定参数,保留基础CLI命令即可:
{ "scripts": { "build": "clitool" } }
执行npm run build -- --foo xxx时,--foo xxx会被自动传递给clitool命令;如果用户原本的脚本有固定参数,新增参数会直接追加,不影响原有逻辑。
步骤3:处理依赖安装
要确保用户仓库已安装CLI工具依赖,你可以在Action中添加安装步骤,或者提示用户在Workflow中提前执行:
# 在action.yml的steps中追加 - name: 安装依赖 run: npm install shell: bash
备选方案:用环境变量传参
如果你的CLI工具支持读取环境变量,也可以把用户参数转成环境变量再传递:
# action.yml中的步骤 - name: 设置环境变量 run: echo "FOO_VALUE=${{ inputs.foo-value }}" >> $GITHUB_ENV shell: bash - name: 执行build脚本 run: npm run build shell: bash
用户仓库的package.json脚本对应调整为:
{ "scripts": { "build": "clitool --foo $FOO_VALUE" } }
关键注意事项
- 自定义Action默认运行在用户仓库的上下文里,工作目录就是用户仓库根目录,CLI工具可以正常读取仓库内的文件
- 如果需要指定特定工作目录,可以在
run步骤中用working-directory参数配置
内容的提问来源于stack exchange,提问作者Clyde D'Souza
相关产品推荐
相关产品推荐

