如何在自定义JavaScript GitHub Action中调用其他Action?
在JavaScript GitHub Action中调用actions/checkout@v3的方法
直接在JavaScript代码里调用另一个GitHub Action,核心是通过官方提供的Actions工具库复用checkout的逻辑,或者执行其入口脚本,以下是两种可行方案:
方案1:复用官方封装的checkout核心逻辑
官方提供了@actions/checkout npm包,直接对应actions/checkout的核心功能,无需手动处理克隆仓库和版本切换,是最简洁的方式:
- 先安装依赖:
npm install @actions/core @actions/checkout
- 在你的JavaScript代码中调用:
const core = require('@actions/core'); const checkout = require('@actions/checkout'); async function run() { try { // 传入对应参数,和YAML中使用checkout时的输入字段一致 await checkout({ repository: core.getInput('repository'), // 可选,默认当前仓库 ref: core.getInput('ref'), // 可选,指定分支、tag或commit token: core.getInput('token'), // 需权限时传入GITHUB_TOKEN path: core.getInput('path') // 可选,拉取到指定目录 }); } catch (error) { core.setFailed(error.message); } } run();
方案2:直接执行checkout Action的入口脚本
如果不想依赖npm包,可以手动克隆checkout仓库并执行其编译后的脚本:
- 安装依赖:
npm install @actions/core @actions/exec
- 在JavaScript代码中添加逻辑:
const { exec } = require('@actions/exec'); const core = require('@actions/core'); async function run() { try { // 克隆checkout仓库到临时目录 await exec('git', ['clone', 'https://github.com/actions/checkout.git', './temp-checkout']); // 切换到v3版本 await exec('git', ['checkout', 'v3'], { cwd: './temp-checkout' }); // 执行checkout的入口脚本 await exec('node', ['./temp-checkout/dist/index.js']); } catch (error) { core.setFailed(error.message); } } run();
注意:无论哪种方式,都要确保你的Action拥有足够的仓库访问权限,比如在工作流中设置permissions: contents: read,并正确传入GITHUB_TOKEN。
内容的提问来源于stack exchange,提问作者sffortytwo
相关产品推荐
相关产品推荐

