无法通过 API 上传 github 发布资产
Cannot upload github release asset through API
我有一个 github 版本还没有资产:
$ curl https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets
[
]
但是我不能upload an asset这个版本:
$ curl -X POST --header "Content-Type:application/edn" --data-binary @cljsdocs-full.edn "https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets?name=full.edn&access_token=$(cat my-token)"
{
"message": "Not Found",
"documentation_url": "https://developer.github.com/v3"
}
我的 api 访问令牌具有 public_repo
访问权限。感谢您帮助上传此资产。
您正在向 https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets which is not the upload URL for the release. It should be https://uploads.github.com/repos/cljsinfo/api-docs/releases/1260660/assets 发出 POST 请求。
有关详细信息,请参阅文档:
https://developer.github.com/v3/repos/releases/#upload-a-release-asset
资产上传 URL 的格式为 https://<upload_url>/repos/:owner/:repo/releases/:id/assets?name=foo.zip
。有几种可能的原因可能会导致您收到非常无用的 "Not Found" 错误:
- 版本 ID 错误。上面 URL 中的
:id
字段是 不是 您给发布的名称,而是 GitHub 生成的数字 ID(可能是数据库 ID ).要获取版本 ID,您必须调用 releases API 并在 JSON 响应中搜索 tag_name
等于您使用的名称的版本。例如,如果您将发布命名为 v0.0.3
,请在 JSON 中搜索带有 "tag_name": "v0.0.3"
的发布并使用该发布的 id
字段。
- 上传错误URL。您用于上传资产的 URL 与您用于所有其他 API 调用的不同。要获得正确的上传 URL,您使用相同的 releases API,使用上述
tag_name
找到您的版本,并从 JSON 中提取 upload_url
字段回复。这是伊万(已接受)的回答。
- 缺少 GitHub 访问令牌权限。这是最让我失望的一个,因为我使用的令牌 是 能够对版本 API 进行 API 调用并获取有关我的信息回购,但 不 将资产上传到同一个回购。 "Not Found" 错误响应根本没有暗示这一点。检查 personal access tokens page 中令牌的权限,并确保
repo
and/or public_repo
已根据需要进行检查。
请注意,对于企业版 GitHub,上传 url 与 'github.com' 的格式不同,您应该使用 'upload_url' creating/querying 发布:Get Release API Docs
例如,这是从我们的企业 github 服务器返回的内容(略微修改以保护罪犯):
"upload_url": "https://git.example.com/api/uploads/repos/example-owner/example-repo/releases/5/assets{?name,label}",
我有一个 github 版本还没有资产:
$ curl https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets
[
]
但是我不能upload an asset这个版本:
$ curl -X POST --header "Content-Type:application/edn" --data-binary @cljsdocs-full.edn "https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets?name=full.edn&access_token=$(cat my-token)"
{
"message": "Not Found",
"documentation_url": "https://developer.github.com/v3"
}
我的 api 访问令牌具有 public_repo
访问权限。感谢您帮助上传此资产。
您正在向 https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets which is not the upload URL for the release. It should be https://uploads.github.com/repos/cljsinfo/api-docs/releases/1260660/assets 发出 POST 请求。
有关详细信息,请参阅文档:
https://developer.github.com/v3/repos/releases/#upload-a-release-asset
资产上传 URL 的格式为 https://<upload_url>/repos/:owner/:repo/releases/:id/assets?name=foo.zip
。有几种可能的原因可能会导致您收到非常无用的 "Not Found" 错误:
- 版本 ID 错误。上面 URL 中的
:id
字段是 不是 您给发布的名称,而是 GitHub 生成的数字 ID(可能是数据库 ID ).要获取版本 ID,您必须调用 releases API 并在 JSON 响应中搜索tag_name
等于您使用的名称的版本。例如,如果您将发布命名为v0.0.3
,请在 JSON 中搜索带有"tag_name": "v0.0.3"
的发布并使用该发布的id
字段。 - 上传错误URL。您用于上传资产的 URL 与您用于所有其他 API 调用的不同。要获得正确的上传 URL,您使用相同的 releases API,使用上述
tag_name
找到您的版本,并从 JSON 中提取upload_url
字段回复。这是伊万(已接受)的回答。 - 缺少 GitHub 访问令牌权限。这是最让我失望的一个,因为我使用的令牌 是 能够对版本 API 进行 API 调用并获取有关我的信息回购,但 不 将资产上传到同一个回购。 "Not Found" 错误响应根本没有暗示这一点。检查 personal access tokens page 中令牌的权限,并确保
repo
and/orpublic_repo
已根据需要进行检查。
请注意,对于企业版 GitHub,上传 url 与 'github.com' 的格式不同,您应该使用 'upload_url' creating/querying 发布:Get Release API Docs
例如,这是从我们的企业 github 服务器返回的内容(略微修改以保护罪犯):"upload_url": "https://git.example.com/api/uploads/repos/example-owner/example-repo/releases/5/assets{?name,label}",