ljharb/repo-report

Rate limit error is poorly handled

Open

#69 opened on 2022年3月2日

GitHub で見る
 (0 comments) (0 reactions) (0 assignees)JavaScript (17 forks)github user discovery
bughelp wanted

Repository metrics

Stars
 (25 stars)
PR merge metrics
 (PR metrics pending)

説明

I triggered the rate limit again:

$ repo-report
ℹ config file found at /Users/ljharb/.repo-report.json...
Usage: repo-report <command> [options]

Commands:
  repo-report          Fetch actionable details about your public, source
                       (non-fork, non-template) repositories. Unactionable
                       metrics are converted to ✔ by default.          [default]
  repo-report ls       Lists all repositories.
                       - Includes sources, forks, templates, private, and public
                       repos by default.
  repo-report metrics  Show available metrics

Options:
      --version       Show version number                              [boolean]
      --config        Path to JSON config file
      --help          Show help                                        [boolean]
      --unactionable                                  [boolean] [default: false]
      --actual                                        [boolean] [default: false]
      --goodness                                       [boolean] [default: true]
  -m, --metrics                                       [boolean] [default: false]
      --all                                           [boolean] [default: false]
      --names                                         [boolean] [default: false]
  -s, --sort                                          [boolean] [default: false]
      --cache                                         [boolean] [default: false]

GraphqlResponseError: Request failed due to following response errors:
 - API rate limit exceeded for user ID 45469.
    at /Users/ljharb/Dropbox/git/ljharb/repo-report.git/node_modules/@octokit/graphql/dist-node/index.js:81:13
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async getRepositories (/Users/ljharb/Dropbox/git/ljharb/repo-report.git/src/utils.js:125:20)
    at async getRepositories (/Users/ljharb/Dropbox/git/ljharb/repo-report.git/src/getRepositories.js:86:35)
    at async Object.detail [as handler] (/Users/ljharb/Dropbox/git/ljharb/repo-report.git/src/commands/detail.js:25:35) {
  request: {
    query: 'query {\n' +
      '  viewer {\n' +
      '\trepositories(\n' +
      '\t  first: 100\n' +
      '\t  affiliations: [OWNER, ORGANIZATION_MEMBER, COLLABORATOR]\n' +
      '\t  \n' +
      '\t  isFork: false\n' +
      '\t  privacy: PUBLIC\n' +
      '\t) {\n' +
      '\t  totalCount\n' +
      '\t  pageInfo {\n' +
      '\t\tendCursor\n' +
      '\t\thasNextPage\n' +
      '\t}\n' +
      '\tnodes {\n' +
      '\t\tname\n' +
      '\t\tnameWithOwner\n' +
      '\t\tdefaultBranchRef {\n' +
      '\t\t\tname\n' +
      '\t\t\tbranchProtectionRule {\n' +
      '\t\t\t\tallowsForcePushes\n' +
      '\t\t\t\tallowsDeletions\n' +
      '\t\t\t\tdismissesStaleReviews\n' +
      '\t\t\t\trequiredApprovingReviewCount\n' +
      '\t\t\t\trequiresApprovingReviews\n' +
      '\t\t\t\trequiresCodeOwnerReviews\n' +
      '\t\t\t\trequiresConversationResolution\n' +
      '\t\t\t\trestrictsPushes\n' +
      '\t\t\t}\n' +
      '\t\t}\n' +
      '\t\tdeleteBranchOnMerge\n' +
      '\t\thasIssuesEnabled\n' +
      '\t\thasProjectsEnabled\n' +
      '\t\thasWikiEnabled\n' +
      '\t\tforkingAllowed\n' +
      '\t\tisArchived\n' +
      '\t\tautoMergeAllowed\n' +
      '\t\tisBlankIssuesEnabled\n' +
      '\t\tisFork\n' +
      '\t\tisPrivate\n' +
      '\t\tisSecurityPolicyEnabled\n' +
      '\t\tisTemplate\n' +
      '\t\tlicenseInfo {\n' +
      '\t\t\tname\n' +
      '\t\t}\n' +
      '\t\tmergeCommitAllowed\n' +
      '\t\towner {\n' +
      '\t\t\tlogin\n' +
      '\t\t}\n' +
      '\t\trebaseMergeAllowed\n' +
      '\t\tsquashMergeAllowed\n' +
      '\t\tcreatedAt\n' +
      '\t\tupdatedAt\n' +
      '\t\tpushedAt\n' +
      '\t\tviewerHasStarred\n' +
      '\t\tviewerPermission\n' +
      '\t\tviewerSubscription\n' +
      '\t  }\n' +
      '\t}\n' +
      '  }\n' +
      '  rateLimit {\n' +
      '\tcost\n' +
      '\tremaining\n' +
      '  }\n' +
      '}\n',
    headers: { authorization: 'token $TOKEN' }
  },
  headers: {
    'access-control-allow-origin': '*',
    'access-control-expose-headers': 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset',
    connection: 'close',
    'content-encoding': 'gzip',
    'content-security-policy': "default-src 'none'",
    'content-type': 'application/json; charset=utf-8',
    date: 'Wed, 02 Mar 2022 21:35:24 GMT',
    'referrer-policy': 'origin-when-cross-origin, strict-origin-when-cross-origin',
    server: 'GitHub.com',
    'strict-transport-security': 'max-age=31536000; includeSubdomains; preload',
    'transfer-encoding': 'chunked',
    vary: 'Accept-Encoding, Accept, X-Requested-With',
    'x-accepted-oauth-scopes': 'repo',
    'x-content-type-options': 'nosniff',
    'x-frame-options': 'deny',
    'x-github-media-type': 'github.v3; format=json',
    'x-github-request-id': 'D4B6:8A9B:5AE25D:61ACC3:621FE31C',
    'x-oauth-scopes': 'read:discussion, read:enterprise, read:gpg_key, read:org, read:packages, read:public_key, read:repo_hook, read:user, repo, user:email, user:follow',
    'x-ratelimit-limit': '5000',
    'x-ratelimit-remaining': '0',
    'x-ratelimit-reset': '1646257799',
    'x-ratelimit-resource': 'graphql',
    'x-ratelimit-used': '5000',
    'x-xss-protection': '0'
  },
  response: { errors: [ [Object] ] },
  errors: [
    {
      type: 'RATE_LIMITED',
      message: 'API rate limit exceeded for user ID 45469.'
    }
  ],
  data: undefined
}

We need to handle this error better. Additionally, note the $TOKEN (which i had to manually censor). The github token should never be printed to the console.

コントリビューターガイド