现在,一些标准 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 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
注意:由于某种原因,
将执行一次调用以查看文件是否已上传,另一次调用以上传文件。因此,我使用这种方法突破了 API 速率限制,尝试将 500 个文件附加到一个版本。通常,您每小时应该能够跨工作流程执行 1000 次 API 调用。gh
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.
});