无法通过API上传GitHub释放资产



我有一个没有资产的github版本:

$ curl https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets
[
]

,但我无法将资产上传到此版本:

$ 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/repos/cljsinfo/api-docs/releases/1260660/assets提出发布请求发布。应该是https://uploads.github.com/repos/cljsinfo/api-docs/releases/1260660/assets。

请参阅文档以获取更多信息:

https://developer.github.com/v3/repos/releases/#upload-a-release-asset-set-

资产上传的URL为 https://<upload_url>/repos/:owner/:repo/releases/:id/assets?name=foo.zip。您可能会出现非常无用的"未找到"错误的原因:

  1. 错误的版本ID 。上述URL中的:id字段是您给版本的名称,而是GitHub生成的数字ID(可能是数据库ID)。要获取发布ID,您必须调用版本API并通过JSON响应进行搜索以获取tag_name等于您使用的名称的版本。例如,如果您命名了您的版本v0.0.3,请在JSON中搜索使用"tag_name": "v0.0.3"的版本,并使用该版本的id字段。
  2. 错误上传URL 。您用于上传资产的URL与所有其他API调用的UR相同。要获取正确的上传URL,您可以使用相同的版本API,使用上面描述的tag_name A搜索您的版本,然后从JSON响应中提取upload_url字段。这是伊万(接受的)答案。
  3. 缺少GitHub访问令牌权限。这是使我脱颖而出的最糟糕的人,因为我所使用的令牌能够对发布API进行API调用并获取有关我的回购的信息,但是 not> not> not> not> 将资产上传到同一回购。"未找到"错误响应根本没有暗示。在您的个人访问令牌页面中检查您的令牌的权限,并确保检查repo和/或public_repo

请注意,对于企业调味的github,上传URL与'github.com'的形式不同,您应该使用创建/查询版本时返回的'upload_url':获取发布API文档

例如,这是从我们的企业github服务器返回的内容(稍微弹出以保护有罪的人):
"upload_url": "https://git.example.com/api/uploads/repos/example-owner/example-repo/releases/5/assets{?name,label}",

最新更新