如何使用 github-script 操作在 GitHub Action 中上传版本

问题描述 投票:0回答:2

现在,一些标准 GitHub 操作已存档并且不再受支持,我需要创建一个新版本并使用 GitHub Script 操作上传工件。

注意:我无法使用 GitHub 不支持的操作。

我已经完成了发布并正在工作,但是现在当尝试上传发布工件时,我找不到上传发布内容的方法(这是一个 tarball)。

用于上传发布资产的 API 端点的文档建议数据应该是调用输入的一部分,而不是引用文件。

如何将文件的内容获取到下面的数据参数中:

- name: Upload Assets
  uses: "actions/github-script@v6"
  with:
    script: |
        try {
          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: 
          })
        } catch (error) {
          core.setFailed(error.message);
        }
github github-actions github-api
2个回答
5
投票

创建版本和其他 GitHub 操作的一个好方法是 GitHub CLI (

gh
)。

GitHub 工作流程已经有一个 GitHub 令牌

${{ github.TOKEN }}
,您可以将其传递给环境,CLI 将自动获取它。

permissions:
  contents: write

jobs:
  release:
    steps:
      - run: |
          gh release create v1.2.3 release.tar.xz
        env:
          GITHUB_TOKEN: ${{ github.TOKEN }}
        shell: bash
        name: Creates a release in GitHub and uploads attachments

注意:由于某种原因,

gh
将执行一次调用以查看文件是否已上传,另一次调用以上传文件。因此,我使用这种方法突破了 API 速率限制,尝试将 500 个文件附加到一个版本。通常,您每小时应该能够跨工作流程执行 1000 次 API 调用。


0
投票

gh
是一个很好的解决方案。或者,如果仍然需要使用
github-script
,我确认以下内容以某种方式工作(至少对于小文件 - 但没有使用大文件进行测试),jfyi。

jobs:
  publish:
    permissions:
      contents: write
    steps:
    # ...
    - name: Upload an Asset in GitHub Release
      uses: "actions/github-script@v6"
      with:
        github-token: "${{ secrets.GITHUB_TOKEN }}"
        script: |
          const fs = require('fs').promises;
          await github.rest.repos.uploadReleaseAsset({
            name: 'README.md',
            owner: context.repo.owner,
            repo: context.repo.repo,
            release_id: ${{ env.RELEASE_ID }},
            data: await fs.readFile('./README.md')  # The file to upload.
          });
© www.soinside.com 2019 - 2024. All rights reserved.