Skip to content

Fail to download GitHub preset

In my Renovate configuration, I have some extends from GitHub like:

{
  extends: [
    'github>camptocamp/gs-renovate-config-preset:base.json5#0.9.0',
    'github>camptocamp/gs-renovate-config-preset:group.json5#0.9.0',
    'github>camptocamp/gs-renovate-config-preset:ci.json5#0.9.0',
    'github>camptocamp/gs-renovate-config-preset:preset.json5#0.9.0',
    'github>camptocamp/gs-renovate-config-preset:pre-commit.json5#0.9.0',
    'github>camptocamp/gs-renovate-config-preset:docker.json5#0.9.0',
    'github>camptocamp/gs-renovate-config-preset:own.json5#0.9.0',
    'github>camptocamp/gs-renovate-config-preset:json-schema.json5#0.9.0',
    'github>camptocamp/gs-renovate-config-preset:shellcheck.json5#0.9.0',
  ],
}

I Run renovate-graph --platform=local With the environment variable:

  • RG_LOCAL_PLATFORM: github
  • RG_LOCAL_ORGANISATION: mapfish
  • RG_LOCAL_REPO: mapfish-print
  • RG_GITHUB_APP_ID: 397457
  • RG_GITHUB_APP_KEY: -----BEGIN RSA PRIVATE KEY---...<secret>
  • RENOVATE_USERNAME: geo-ghci-int[bot]
  • RENOVATE_GIT_AUTHOR: "geo-ghci-int[bot] <146321879+geo-ghci-int[bot]@users.noreply.github.com>
  • RG_GITHUB_APP_INSTALLATION_ID: 146321879

Then I sometimes get the error GitHub failure: rate limit.

Is my application correctly taken in account to get the preset?

Full log:

 INFO: Processing renovate-graph data as GitHub App "Geo GHCI int"
DEBUG: Parsing configs
DEBUG: No config file found on disk - skipping
DEBUG: File config
       "config": {}
DEBUG: CLI config
       "config": {"platform": "local"}
DEBUG: Env config
       "config": {
         "hostRules": [],
         "token": "***********",
         "username": "geo-ghci-int[bot]",
         "gitAuthor": "geo-ghci-int[bot] <146321879+geo-ghci-int[bot]@users.noreply.github.com>"
       }
DEBUG: Combined config
       "config": {
         "hostRules": [],
         "token": "***********",
         "username": "geo-ghci-int[bot]",
         "gitAuthor": "geo-ghci-int[bot] <146321879+geo-ghci-int[bot]@users.noreply.github.com>",
         "platform": "local"
       }
DEBUG: Enabling forkProcessing while in non-autodiscover mode
DEBUG: Enabling onboardingNoDeps while in non-autodiscover mode
DEBUG: Found valid git version: 2.43.0
DEBUG: Setting global hostRules
DEBUG: Using configured gitAuthor (geo-ghci-int[bot] <146321879+geo-ghci-int[bot]@users.noreply.github.com>)
DEBUG: Using baseDir: /tmp/renovate
DEBUG: Using cacheDir: /tmp/renovate/cache
DEBUG: Using containerbaseDir: /tmp/renovate/cache/containerbase
DEBUG: Initializing Renovate internal cache into /tmp/renovate/cache/renovate/renovate-cache-v1
DEBUG: Commits limit = null
DEBUG: Setting global hostRules
DEBUG: validatePresets()
DEBUG: validatePresets()
DEBUG: PackageFiles.clear() - Package files deleted
DEBUG: Resetting npmrc
DEBUG: Resetting npmrc
DEBUG: checkOnboarding()
DEBUG: isOnboarded()
DEBUG: Repo is onboarded
DEBUG: Got file list using git
DEBUG: Found .github/renovate.json5 config file
DEBUG: Repository config
       "fileName": ".github/renovate.json5",
       "config": {
         "extends": [
           "github>camptocamp/gs-renovate-config-preset:base.json5#0.9.0",
           "github>camptocamp/gs-renovate-config-preset:group.json5#0.9.0",
           "github>camptocamp/gs-renovate-config-preset:stabilization-branches.json5#0.9.0",
           "github>camptocamp/gs-renovate-config-preset:preset.json5#0.9.0",
           "github>camptocamp/gs-renovate-config-preset:ci.json5#0.9.0",
           "github>camptocamp/gs-renovate-config-preset:pre-commit.json5#0.9.0",
           "github>camptocamp/gs-renovate-config-preset:docker.json5#0.9.0",
           "github>camptocamp/gs-renovate-config-preset:own.json5#0.9.0",
           "github>camptocamp/gs-renovate-config-preset:json-schema.json5#0.9.0",
           "github>camptocamp/gs-renovate-config-preset:shellcheck.json5#0.9.0"
         ],
         "baseBranches": ["3.28", "3.29", "3.30", "3.31", "master"],
         "customManagers": [
           {
             "fileMatch": ["^build.gradle$", ".*/build.gradle$"],
             "matchStrings": [
               "toolVersion = \"(?<currentValue>.*)\" // (?<depName>.*)"
             ],
             "datasourceTemplate": "maven",
             "customType": "regex"
           }
         ],
         "packageRules": [
           {
             "matchDatasources": ["docker"],
             "versioning": "regex:^(?<major>\\d+)\\.(?<minor>\\d+)(\\.(?<patch>\\d+))?(-(?<compatibility>.*))$",
             "matchDepNames": ["gradle", "tomcat"]
           },
           {
             "matchUpdateTypes": ["major"],
             "groupName": "gradle",
             "automerge": true,
             "matchDepNames": ["gradle"]
           },
           {
             "matchDatasources": ["docker"],
             "matchUpdateTypes": ["major", "minor"],
             "groupName": "geoserver",
             "automerge": true,
             "matchDepNames": ["camptocamp/geoserver"]
           },
           {
             "matchUpdateTypes": ["major"],
             "groupName": "spring",
             "automerge": true,
             "matchPackageNames": [
               "/^org\\.springframework:.*/",
               "/^org\\.springframework\\.security:.*/"
             ]
           },
           {
             "matchUpdateTypes": ["major"],
             "groupName": "jasperreports",
             "automerge": true,
             "matchPackageNames": ["/^net\\.sf\\.jasperreports:.*/"]
           },
           {
             "matchUpdateTypes": ["major"],
             "groupName": "slf4j",
             "automerge": true,
             "matchPackageNames": ["/^org\\.slf4j:.*/"]
           },
           {
             "matchUpdateTypes": ["major"],
             "groupName": "metrics",
             "automerge": true,
             "matchPackageNames": ["/^io\\.dropwizard\\.metrics:.*/"]
           },
           {
             "matchUpdateTypes": ["major"],
             "groupName": "geotools",
             "automerge": true,
             "matchPackageNames": ["/^org\\.geotools\\..*/", "/^org\\.geotools:.*/"]
           },
           {
             "matchUpdateTypes": ["major"],
             "groupName": "logback",
             "automerge": true,
             "matchPackageNames": ["/^ch\\.qos\\.logback:.*/"]
           },
           {
             "matchUpdateTypes": ["major"],
             "groupName": "batik",
             "automerge": true,
             "matchPackageNames": ["/^org\\.apache\\.xmlgraphics:batik\\-.*/"]
           },
           {
             "matchUpdateTypes": ["major", "minor"],
             "dependencyDashboardApproval": true,
             "matchDepNames": ["spotbugs", "gradle"]
           },
           {
             "matchUpdateTypes": ["major", "minor"],
             "dependencyDashboardApproval": true,
             "matchPackageNames": ["/^com\\.github\\.spotbugs:spotbugs\\-.*/"]
           },
           {
             "groupName": "spotbugs",
             "matchPackageNames": [
               "/^com\\.github\\.spotbugs:spotbugs\\-.*/",
               "/^spotbugs.*/"
             ]
           },
           {
             "matchBaseBranches": ["/^[0-9]+\\.[0-9]+$/"],
             "matchUpdateTypes": [
               "major",
               "minor",
               "pin",
               "digest",
               "lockFileMaintenance",
               "rollback",
               "bump"
             ],
             "enabled": false
           },
           {
             "matchBaseBranches": ["/^[0-9]+\\.[0-9]+$/"],
             "minimumReleaseAge": "7 days"
           },
           {
             "matchBaseBranches": ["/^3.2[2-9]$/", "/^3.30$/"],
             "matchPackageNames": ["com.puppycrawl.tools:checkstyle", "checkstyle"],
             "enabled": false
           },
           {
             "automerge": true,
             "groupName": "geotools",
             "separateMultipleMinor": true,
             "matchPackageNames": ["/^org\\.geotools\\..*/", "/^org\\.geotools:.*/"]
           },
           {"matchFileNames": [".github/workflows/rebuild.yaml"], "enabled": false}
         ]
       }
DEBUG: migrateAndValidate()
DEBUG: No config migration necessary
DEBUG: hostRules: no authentication for api.github.com
DEBUG: Using queue: host=api.github.com, concurrency=16
DEBUG: GET https://api.github.com/repos/camptocamp/gs-renovate-config-preset/contents/base.json5?ref=0.9.0 = (code=ERR_NON_2XX_3XX_RESPONSE, statusCode=403 retryCount=0, duration=42)
DEBUG: GitHub failure: rate limit
       "err": {
         "name": "HTTPError",
         "code": "ERR_NON_2XX_3XX_RESPONSE",
         "timings": {
           "start": 1742414881692,
           "socket": 1742414881696,
           "lookup": 1742414881704,
           "connect": 1742414881712,
           "secureConnect": 1742414881723,
           "upload": 1742414881723,
           "response": 1742414881731,
           "end": 1742414881734,
           "phases": {
             "wait": 4,
             "dns": 8,
             "tcp": 8,
             "tls": 11,
             "request": 0,
             "firstByte": 8,
             "download": 3,
             "total": 42
           }
         },
         "message": "Response code 403 (rate limit exceeded)",
         "stack": "HTTPError: Response code 403 (rate limit exceeded)\n    at Request.<anonymous> (/app/node_modules/got/dist/source/as-promise/index.js:118:42)\n    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)",
         "options": {
           "headers": {
             "user-agent": "RenovateBot/39.191.4 (https://github.com/renovatebot/renovate)",
             "accept": "application/json, application/vnd.github.v3+json",
             "accept-encoding": "gzip, deflate, br"
           },
           "url": "https://api.github.com/repos/camptocamp/gs-renovate-config-preset/contents/base.json5?ref=0.9.0",
           "hostType": "github",
           "username": "",
           "password": "",
           "method": "GET",
           "http2": false
         },
         "response": {
           "statusCode": 403,
           "statusMessage": "rate limit exceeded",
           "body": {
             "message": "API rate limit exceeded for 20.203.218.140. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)",
             "documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"
           },
           "headers": {
             "date": "Wed, 19 Mar 2025 20:08:01 GMT",
             "server": "Varnish",
             "strict-transport-security": "max-age=31536000; includeSubdomains; preload",
             "x-content-type-options": "nosniff",
             "x-frame-options": "deny",
             "x-xss-protection": "1; mode=block",
             "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'",
             "access-control-allow-origin": "*",
             "access-control-expose-headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-RateLimit-Used, X-RateLimit-Resource, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset",
             "content-type": "application/json; charset=utf-8",
             "referrer-policy": "origin-when-cross-origin, strict-origin-when-cross-origin",
             "x-github-media-type": "github.v3; format=json",
             "x-ratelimit-limit": "60",
             "x-ratelimit-remaining": "0",
             "x-ratelimit-reset": "1742415966",
             "x-ratelimit-resource": "core",
             "x-ratelimit-used": "60",
             "content-length": "280",
             "x-github-request-id": "70F9:311DF1:6DCC6:71C4B:67DB2421"
           },
           "httpVersion": "1.1",
           "retryCount": 0
         }
       }
DEBUG: Preset file base.json5 not found in camptocamp/gs-renovate-config-preset
DEBUG: Preset fetch error
       "preset": "github>camptocamp/gs-renovate-config-preset:base.json5#0.9.0",
       "err": {
         "message": "dep not found",
         "stack": "Error: dep not found\n    at fetchJSONFile (/app/node_modules/renovate/dist/config/presets/github/index.js:32:15)\n    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n    at async fetchPreset (/app/node_modules/renovate/dist/config/presets/util.js:43:23)\n    at async getPreset (/app/node_modules/renovate/dist/config/presets/index.js:87:24)\n    at async fetchPreset (/app/node_modules/renovate/dist/config/presets/index.js:181:16)\n    at async Object.resolveConfigPresets (/app/node_modules/renovate/dist/config/presets/index.js:140:39)\n    at async mergeRenovateConfig (/app/node_modules/renovate/dist/workers/repository/init/merge.js:213:61)\n    at async getRepoConfig (/app/node_modules/renovate/dist/workers/repository/init/config.js:13:14)\n    at async initRepo (/app/node_modules/renovate/dist/workers/repository/init/index.js:48:14)\n    at async renovateRepo (/app/node_modules/@jamietanna/renovate-graph/dist/vendored-renovate-workers.js:94:14)\n    at async retrievePackageDataForRepo (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:80:24)\n    at async discoverAndProcessThroughGitHubAppWithCallback (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:234:41)\n    at async discoverAndProcessThroughGitHubApp (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:200:12)\n    at async /app/node_modules/@jamietanna/renovate-graph/dist/executable.js:56:9"
       }
 INFO: Throwing preset error
       "validationError": "Cannot find preset's package (github>camptocamp/gs-renovate-config-preset:base.json5#0.9.0)"
ERROR: Failed to read repository information for "mapfish/mapfish-print": Error: config-validation
       "error": {
         "name": "Error",
         "message": "config-validation",
         "stack": "Error: config-validation\n    at fetchPreset (/app/node_modules/renovate/dist/config/presets/index.js:191:23)\n    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n    at async Object.resolveConfigPresets (/app/node_modules/renovate/dist/config/presets/index.js:140:39)\n    at async mergeRenovateConfig (/app/node_modules/renovate/dist/workers/repository/init/merge.js:213:61)\n    at async getRepoConfig (/app/node_modules/renovate/dist/workers/repository/init/config.js:13:14)\n    at async initRepo (/app/node_modules/renovate/dist/workers/repository/init/index.js:48:14)\n    at async renovateRepo (/app/node_modules/@jamietanna/renovate-graph/dist/vendored-renovate-workers.js:94:14)\n    at async retrievePackageDataForRepo (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:80:24)\n    at async discoverAndProcessThroughGitHubAppWithCallback (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:234:41)\n    at async discoverAndProcessThroughGitHubApp (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:200:12)\n    at async /app/node_modules/@jamietanna/renovate-graph/dist/executable.js:56:9"
       }
DEBUG: defaultWritePackageDataCallback called for local/mapfish/mapfish-print
       "key": {"platform": "local", "organisation": "mapfish", "repo": "mapfish-print"}
ERROR: defaultWritePackageDataCallback was called for local/mapfish/mapfish-print, but there was an error: Error: config-validation
       "key": {"platform": "local", "organisation": "mapfish", "repo": "mapfish-print"},
       "error": {
         "validationError": "Cannot find preset's package (github>camptocamp/gs-renovate-config-preset:base.json5#0.9.0)",
         "message": "config-validation",
         "stack": "Error: config-validation\n    at fetchPreset (/app/node_modules/renovate/dist/config/presets/index.js:191:23)\n    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n    at async Object.resolveConfigPresets (/app/node_modules/renovate/dist/config/presets/index.js:140:39)\n    at async mergeRenovateConfig (/app/node_modules/renovate/dist/workers/repository/init/merge.js:213:61)\n    at async getRepoConfig (/app/node_modules/renovate/dist/workers/repository/init/config.js:13:14)\n    at async initRepo (/app/node_modules/renovate/dist/workers/repository/init/index.js:48:14)\n    at async renovateRepo (/app/node_modules/@jamietanna/renovate-graph/dist/vendored-renovate-workers.js:94:14)\n    at async retrievePackageDataForRepo (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:80:24)\n    at async discoverAndProcessThroughGitHubAppWithCallback (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:234:41)\n    at async discoverAndProcessThroughGitHubApp (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:200:12)\n    at async /app/node_modules/@jamietanna/renovate-graph/dist/executable.js:56:9"
       }
ERROR: config-validation
       "error": {
         "validationError": "Cannot find preset's package (github>camptocamp/gs-renovate-config-preset:base.json5#0.9.0)",
         "message": "config-validation",
         "stack": "Error: config-validation\n    at fetchPreset (/app/node_modules/renovate/dist/config/presets/index.js:191:23)\n    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n    at async Object.resolveConfigPresets (/app/node_modules/renovate/dist/config/presets/index.js:140:39)\n    at async mergeRenovateConfig (/app/node_modules/renovate/dist/workers/repository/init/merge.js:213:61)\n    at async getRepoConfig (/app/node_modules/renovate/dist/workers/repository/init/config.js:13:14)\n    at async initRepo (/app/node_modules/renovate/dist/workers/repository/init/index.js:48:14)\n    at async renovateRepo (/app/node_modules/@jamietanna/renovate-graph/dist/vendored-renovate-workers.js:94:14)\n    at async retrievePackageDataForRepo (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:80:24)\n    at async discoverAndProcessThroughGitHubAppWithCallback (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:234:41)\n    at async discoverAndProcessThroughGitHubApp (/app/node_modules/@jamietanna/renovate-graph/dist/index.js:200:12)\n    at async /app/node_modules/@jamietanna/renovate-graph/dist/executable.js:56:9"
       }