如何通过GitHub Script Action上传GitHub Release制品
使用GitHub Script Action上传Release制品(Tarball)
要将tarball文件内容填入data参数,你可以利用Node.js的fs模块读取文件的二进制内容(Buffer),因为uploadReleaseAsset接口接受Buffer类型的文件数据。以下是修正后的完整Workflow代码:
- name: Upload Assets uses: "actions/github-script@v6" with: script: | const fs = require('fs'); const path = require('path'); try { // 读取tarball文件,返回Buffer类型的二进制内容 const fileContent = fs.readFileSync(path.join(process.cwd(), 'release.tar.xz')); return await github.rest.repos.uploadReleaseAsset({ owner: context.repo.owner, repo: context.repo.repo, name: "release.tar.xz", release_id: ${{ fromJSON(steps.deploy.outputs.result).data.id }}, data: fileContent, // 可选:指定文件的Content-Type,有助于GitHub正确识别文件类型 headers: { 'content-type': 'application/x-xz' } }) } catch (error) { core.setFailed(error.message); }
关键说明:
- 用
fs.readFileSync读取文件:因为tarball是二进制文件,无需指定编码,默认返回Buffer,正好符合Octokit接口的要求。 - 路径处理:使用
path.join(process.cwd(), 'release.tar.xz')确保文件路径正确,process.cwd()是GitHub Runner的当前工作目录,如果你生成的tarball在其他子目录,需要调整路径。 - 语法修正:原代码中
release_id行末尾缺少逗号,必须补上否则会报错。 - 可选的Content-Type:添加
headers指定content-type为application/x-xz,能让GitHub正确识别这是xz压缩的tar包。
内容的提问来源于stack exchange,提问作者Brian Sidebotham
相关产品推荐
相关产品推荐

