通过 REST 为 Github 项目创建里程碑

Creating a Milestone for a Github Project via REST

我想使用 Github 的 REST API 来管理我的一些存储库的里程碑和标签,但我总是无法通过 REST 创建新的里程碑或标签。我想念什么?

我为我的帐户启用了 2FA,并创建了一个个人访问令牌,如 Other Authentication Methods

中所述

例如,我尝试使用此 cURL 命令创建一个新的里程碑:

curl -X POST -v \
  -H "Authorization: token MyPersonalAccessToken" \
  -H "Content-Type: application/json" \
  -H "Accept: application/vnd.github.v3+json" \
  -d '{"title": "1", "state": "open", "description": "Milestone", "due_on": "2025-10-09T23:39:01Z"}' \
  https://api.github.com/repos/obfischer/boxsack/milestones

我尝试了各种其他变体,但似乎都是错误的。至少我总是只得到一个404 Not Found。根据 Github 文档,这也可能意味着我的身份验证失败,因为 Github returns 一个 404 Not Found 响应代码来保护用户数据而不是返回一个 401 Unauthorized .

但我很确定通过个人访问令牌的身份验证正在运行,因为我可以在响应中看到特定于用户的 rate-limit headers:

X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999

有人知道为什么我不能通过 REST 创建里程碑吗?

也许您的个人访问令牌没有 repo scope。我刚刚测试过使用没有该范围的令牌发送请求,它也是 returns 404 :

< HTTP/1.1 404 Not Found
< Date: Sat, 26 Oct 2019 11:07:31 GMT
< Content-Type: application/json; charset=utf-8
< Content-Length: 125
< Server: GitHub.com
< Status: 404 Not Found
< X-RateLimit-Limit: 5000
< X-RateLimit-Remaining: 4989
< X-RateLimit-Reset: 1572091544
< X-OAuth-Scopes: [Here there should be repo] <================
< X-Accepted-OAuth-Scopes: 
< X-GitHub-Media-Type: github.v3; format=json
< Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type
< Access-Control-Allow-Origin: *
< Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
< X-Frame-Options: deny
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
< Content-Security-Policy: default-src 'none'
< X-GitHub-Request-Id: 87B2:23EED:36F2B7F:42647AE:5DB428F3
< 
{
  "message": "Not Found",
  "documentation_url": "https://developer.github.com/v3/issues/milestones/#create-a-milestone"
}