Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-68354

FATAL: Error while retrieving pull request merge hash : org.kohsuke.github.HttpException

    XMLWordPrintable

Details

    Description

      Hello there,

      we facing an issue after updating our GitHub Enterprise Server to 3.4.1 yesterday.

      We have about 100 Jenkins Instances - deployed as Pods in kubernetes - with the same basic configuration and plugins and one which has a special configuration, cause the organisation uses submodule, i will talk about this later.

      The Problem appears only on this one special Instance and we can not locate why.

      The Error appears during the repo-scan, while retrieving the hash of an open pull request.
      Repo-Scan Log:

      [...]
        23 branches were processed
      
        Checking pull-requests...
      
        Getting remote pull requests...
      
          Checking pull request #2693
            'Jenkinsfile' found
      
      ERROR: [Wed Apr 27 10:49:39 CEST 2022] Could not fetch branches from source org.jenkinsci.plugins.github_branch_source.GitHubSCMNavigator::https://github.mycompany.de/api/v3::<my-github-org>::<repo>
      [Wed Apr 27 10:49:39 CEST 2022] Finished branch indexing. Indexing took 3.4 sec
      FATAL: Error while retrieving pull request 2693 merge hash : org.kohsuke.github.HttpException: 
      Finished: FAILURE

      > Organisation and Repo with dummy values replaced.
      There is no further Stacktrace or Log this is the only information about the error we got. So we are completly stucked at the moment. And requesting some help, to understand whats happing.

      The special Instance has two SSH-Agent-Slaves and a additional SCMTrait for Submodules. Normally the builds on our cloudbased Jenkins (we call it Leeroy ) spawns a Pod where the artifacts will be build. The special Instance is only using the slaves.

      May be another detail: The Repos in this organisation are mostly "private" and some of the repos has more than >6000 Commits. They are really large.

      Can someone explain, whats happing in the step of retriving the pr-hash?

      Some more details:

      For the Auth between GitHub ES and Jenkins, we use an GitHub App with the following access:
      > Read access to members, metadata, and pull requests 
      > Read and write access to checks, code, and commit statuses 
      > Repository access: All repositories

      We configure our github-plugin during startup in a Groovy Script:

       def scmNavigator = new GitHubSCMNavigator(githubApiUrl, organizationName, github_credential, github_credential)
              
              
                            scmNavigator.setTraits([
              
              
                                new BranchDiscoveryTrait(true, true), // build ALL branches
              
              
                                new OriginPullRequestDiscoveryTrait(1), // build PR-Merge on Pull Requests
              
              
                                new ForkPullRequestDiscoveryTrait(1, new ForkPullRequestDiscoveryTrait.TrustPermission()), // only build PR-Merge of users with write access to the repository
              
              
                                new jenkins.plugins.git.traits.LocalBranchTrait(), // check out target branch
              
              
                                new jenkins.plugins.git.traits.GitLFSPullTrait(), // perform git lfs pull after clone
              
              
                                new jenkins.plugins.git.traits.CleanAfterCheckoutTrait(), // perform clean after checkout
              
              
                                new jenkins.plugins.git.traits.RefSpecsSCMSourceTrait( // add ref specs for HEAD and tags
              
              
                                    "+refs/heads/*:refs/remotes/@{remote}/*",
              
              
                                    "+refs/tags/*:refs/tags/*"
              
              
                                ),
              
              
                                new jenkins.scm.impl.trait.WildcardSCMSourceFilterTrait(
              
              
                                    config.init.GIT_REPO_INCLUDES ?: "*",
              
              
                                    config.init.GIT_REPO_EXCLUDES ?: ""
              
              
                                ),
              
              
                                new jenkins.scm.impl.trait.WildcardSCMHeadFilterTrait(
              
              
                                    config.init.GIT_BRANCH_INCLUDES ?: "*",
              
              
                                    config.init.GIT_BRANCH_EXCLUDES ?: ""
              
              
                                )
              
              
                            ]);
              
              
                
      
              
              
                            if(config.init.GIT_ADD_SUBMODULE_BEHAVIOUR != null && config.init.GIT_ADD_SUBMODULE_BEHAVIOUR != ''){
              
              
                                if(config.init.GIT_ADD_SUBMODULE_BEHAVIOUR == 'true'){
              
              
                                    def scmTraits = scmNavigator.getTraits() as java.util.ArrayList
              
              
                                    scmTraits.add(
              
              
                                        new jenkins.plugins.git.traits.SubmoduleOptionTrait( // perform a submodule checkout within the normal scm checkout
              
              
                                            new hudson.plugins.git.extensions.impl.SubmoduleOption(
              
              
                                                false, true, false, '', 1, true
              
              
                                            )
              
              
                                        )
              
              
                                    );
              
              
                                    scmNavigator.setTraits(scmTraits);
              
              
                                }
              
              
                            }
              
              
                
      
              
              
                            job.getSCMNavigators().add(scmNavigator)
              
              
                
      
              
              
                            def pruneDeadBranches = true
              
              
                            def daysToKeep = 0
              
              
                            def numToKeep = 1
              
              
                            job.setOrphanedItemStrategy(new com.cloudbees.hudson.plugins.folder.computed.DefaultOrphanedItemStrategy(pruneDeadBranches, daysToKeep, numToKeep))
              
              
                            
              
              
                            def projectFactory = new org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProjectFactory()
              
              
                            projectFactory.scriptPath = config.init.JENKINSFILE_NAME ?: 'Jenkinsfile'
              
              
                            job.getProjectFactories().add(projectFactory)
              
              
                
      
              
              
                            job.buildStrategies.add(
              
              
                                new jenkins.branch.buildstrategies.basic.ChangeRequestBuildStrategyImpl(true) // ignore merge revision changes where the only difference is the target branch revision
              
              
                            )
              
              
                
      
              
              
                            // scan repository now
              
              
                            job.scheduleBuild2(0)
              
              
                
      
              
              
                            // configure automatic branch build behaviour
              
              
                            def automaticBranchBuilds = config.init.ENABLE_AUTOMATIC_BRANCH_BUILDS
              
              
                            logger.info("automatic branch builds: '${automaticBranchBuilds}'")
              
              
                            if (automaticBranchBuilds == null || automaticBranchBuilds.toString().trim() == 'false') {
              
              
                                logger.info("automatic branch builds are DISABLED")
              
              
                            } else if(automaticBranchBuilds.toString().trim() == 'true') {
              
              
                                logger.info("automatic branch builds ENABLED for ALL BRANCHES")
              
              
                                job.buildStrategies.add(new jenkins.branch.buildstrategies.basic.BranchBuildStrategyImpl())
              
              
                            } else {
              
              
                                logger.info("automatic branch builds ENABLED for branch pattern ${automaticBranchBuilds}")
              
              
                                job.buildStrategies.add(
              
              
                                    new jenkins.branch.buildstrategies.basic.NamedBranchBuildStrategyImpl([
              
              
                                            new jenkins.branch.buildstrategies.basic.NamedBranchBuildStrategyImpl.RegexNameFilter(
              
              
                                                automaticBranchBuilds,
              
              
                                                true
              
              
                                            )
              
              
                                        ]
              
              
                                    )
              
              
                                )
              
              
                            }

      Jenkins Version: 2.334
      github-branch-source-plugin Version: 2.11.4

      Hopefully someone can help us and thanks in advance

      Attachments

        Activity

          "Error while retrieving pull request" might be thrown from https://github.com/jenkinsci/github-branch-source-plugin/blob/91207e9f9b4aaacacebfba238368cdee00bcf8ed/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java#L1743-L1747. It has got the commit ID of the merge from a pull request object in the GitHub API and then asks the GitHub API about the commit object.

          GHRepository.getCommit(String sha1) is defined in https://github.com/hub4j/github-api/blob/github-api-1.122/src/main/java/org/kohsuke/github/GHRepository.java#L1794-L1813

          GitHubClient.logRequest https://github.com/hub4j/github-api/blob/abf5a6db1b81250625ca6d350aeff9021b89db41/src/main/java/org/kohsuke/github/GitHubClient.java#L473-L477 would write to the "org.kohsuke.github.GitHubClient" logger. If you enable FINE logging for that or for the whole "org.kohsuke.github" package in Jenkins, then perhaps you'll see the failing request.

          kon Kalle Niemitalo added a comment - "Error while retrieving pull request" might be thrown from https://github.com/jenkinsci/github-branch-source-plugin/blob/91207e9f9b4aaacacebfba238368cdee00bcf8ed/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java#L1743-L1747 . It has got the commit ID of the merge from a pull request object in the GitHub API and then asks the GitHub API about the commit object. GHRepository.getCommit(String sha1) is defined in https://github.com/hub4j/github-api/blob/github-api-1.122/src/main/java/org/kohsuke/github/GHRepository.java#L1794-L1813 GitHubClient.logRequest https://github.com/hub4j/github-api/blob/abf5a6db1b81250625ca6d350aeff9021b89db41/src/main/java/org/kohsuke/github/GitHubClient.java#L473-L477 would write to the "org.kohsuke.github.GitHubClient" logger. If you enable FINE logging for that or for the whole "org.kohsuke.github" package in Jenkins, then perhaps you'll see the failing request.
          mfizia Marc Fizia added a comment - - edited

          Thanks kon for the advice, the real error seems like a wrong header:

          Apr 27, 2022 1:32:29 PM FINE org.kohsuke.github.GitHubClientGitHub API request [anonymous]: GET https://github.mycompany.de/api/v3/rate_limit
          Apr 27, 2022 1:32:29 PM FINEST org.kohsuke.github.GitHubClientMissing or malformed X-RateLimit header: 
          java.lang.NumberFormatException: X-RateLimit-Limit: null
          	at org.kohsuke.github.connector.GitHubConnectorResponse.parseInt(GitHubConnectorResponse.java:157)
          	at org.kohsuke.github.GitHubClient.noteRateLimit(GitHubClient.java:594)
          	at org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:385)
          	at org.kohsuke.github.GitHubClient.getRateLimit(GitHubClient.java:230)
          	at org.kohsuke.github.GitHubClient.rateLimit(GitHubClient.java:285)
          	at org.kohsuke.github.GitHubRateLimitChecker.checkRateLimit(GitHubRateLimitChecker.java:124)
          	at org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:383)
          	at org.kohsuke.github.GitHubClient.fetch(GitHubClient.java:121)
          	at org.kohsuke.github.GitHubClient.checkApiUrlValidity(GitHubClient.java:323)
          	at org.kohsuke.github.GitHub.checkApiUrlValidity(GitHub.java:1239)
          	at org.jenkinsci.plugins.github_branch_source.ApiRateLimitChecker.verifyConnection(ApiRateLimitChecker.java:197)
          	at org.jenkinsci.plugins.github_branch_source.Connector$GitHubConnection.verifyConnection(Connector.java:736)
          	at org.jenkinsci.plugins.github_branch_source.Connector.connect(Connector.java:398)
          	at org.jenkinsci.plugins.github_branch_source.GitHubSCMSource.retrieveActions(GitHubSCMSource.java:2000)
          	at jenkins.scm.api.SCMSource.fetchActions(SCMSource.java:848)
          	at jenkins.branch.MultiBranchProject.computeChildren(MultiBranchProject.java:598)
          	at com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.updateChildren(ComputedFolder.java:278)
          	at com.cloudbees.hudson.plugins.folder.computed.FolderComputation.run(FolderComputation.java:166)
          	at jenkins.branch.MultiBranchProject$BranchIndexing.run(MultiBranchProject.java:1032)
          	at hudson.model.ResourceController.execute(ResourceController.java:101)
          	at hudson.model.Executor.run(Executor.java:442)
          
          Apr 27, 2022 1:32:29 PM FINE org.kohsuke.github.GitHubClient/rate_limit returned 404 Not Found.
          Apr 27, 2022 1:32:29 PM FINEST org.kohsuke.github.GitHubClientRate limit now: GHRateLimit {core {remaining=999999, limit=1000000, resetDate=Wed Apr 27 13:32:59 CEST 2022}, search {remaining=999999, limit=1000000, resetDate=Thu Jan 01 01:00:00 CET 1970}, graphql {remaining=999999, limit=1000000, resetDate=Thu Jan 01 01:00:00 CET 1970}, integrationManifest {remaining=999999, limit=1000000, resetDate=Thu Jan 01 01:00:00 CET 1970}}
           

          Every API-Call leads in this Stacktrace. We will check the API Changelog of Github, maybe there is something changed.

          I will give you another information about the PR who crashes - maybe it's too large:

          It's the sync between two release-trains, where 10 People working together with proprietary Software and it's source-files (mostly XML).
          Two smaller one's could be scanned and get's listed in the Jenkins UI. Could this be possible?

          EDIT: We found out, that's /rate_limit isn't enabled on GitHub Enterprise. Is this really needed? Or could it stay off and we need to configure Jenkins for being disabled.

          EDIT 2: It is confusing.
          The `org.kohsuke.github.GitHubClient` tries evertime it calls the GitHub Api to "note" the ratelimit - also when it's disabled per Jenkins Global GitHub Api Strategy.

           

          mfizia Marc Fizia added a comment - - edited Thanks kon for the advice, the real error seems like a wrong header: Apr 27, 2022 1:32:29 PM FINE org.kohsuke.github.GitHubClientGitHub API request [anonymous]: GET https: //github.mycompany.de/api/v3/rate_limit Apr 27, 2022 1:32:29 PM FINEST org.kohsuke.github.GitHubClientMissing or malformed X-RateLimit header: java.lang.NumberFormatException: X-RateLimit-Limit: null at org.kohsuke.github.connector.GitHubConnectorResponse.parseInt(GitHubConnectorResponse.java:157) at org.kohsuke.github.GitHubClient.noteRateLimit(GitHubClient.java:594) at org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:385) at org.kohsuke.github.GitHubClient.getRateLimit(GitHubClient.java:230) at org.kohsuke.github.GitHubClient.rateLimit(GitHubClient.java:285) at org.kohsuke.github.GitHubRateLimitChecker.checkRateLimit(GitHubRateLimitChecker.java:124) at org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:383) at org.kohsuke.github.GitHubClient.fetch(GitHubClient.java:121) at org.kohsuke.github.GitHubClient.checkApiUrlValidity(GitHubClient.java:323) at org.kohsuke.github.GitHub.checkApiUrlValidity(GitHub.java:1239) at org.jenkinsci.plugins.github_branch_source.ApiRateLimitChecker.verifyConnection(ApiRateLimitChecker.java:197) at org.jenkinsci.plugins.github_branch_source.Connector$GitHubConnection.verifyConnection(Connector.java:736) at org.jenkinsci.plugins.github_branch_source.Connector.connect(Connector.java:398) at org.jenkinsci.plugins.github_branch_source.GitHubSCMSource.retrieveActions(GitHubSCMSource.java:2000) at jenkins.scm.api.SCMSource.fetchActions(SCMSource.java:848) at jenkins.branch.MultiBranchProject.computeChildren(MultiBranchProject.java:598) at com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.updateChildren(ComputedFolder.java:278) at com.cloudbees.hudson.plugins.folder.computed.FolderComputation.run(FolderComputation.java:166) at jenkins.branch.MultiBranchProject$BranchIndexing.run(MultiBranchProject.java:1032) at hudson.model.ResourceController.execute(ResourceController.java:101) at hudson.model.Executor.run(Executor.java:442) Apr 27, 2022 1:32:29 PM FINE org.kohsuke.github.GitHubClient/rate_limit returned 404 Not Found. Apr 27, 2022 1:32:29 PM FINEST org.kohsuke.github.GitHubClientRate limit now: GHRateLimit {core {remaining=999999, limit=1000000, resetDate=Wed Apr 27 13:32:59 CEST 2022}, search {remaining=999999, limit=1000000, resetDate=Thu Jan 01 01:00:00 CET 1970}, graphql {remaining=999999, limit=1000000, resetDate=Thu Jan 01 01:00:00 CET 1970}, integrationManifest {remaining=999999, limit=1000000, resetDate=Thu Jan 01 01:00:00 CET 1970}} Every API-Call leads in this Stacktrace. We will check the API Changelog of Github, maybe there is something changed. I will give you another information about the PR who crashes - maybe it's too large: It's the sync between two release-trains, where 10 People working together with proprietary Software and it's source-files (mostly XML). Two smaller one's could be scanned and get's listed in the Jenkins UI. Could this be possible? EDIT: We found out, that's /rate_limit isn't enabled on GitHub Enterprise. Is this really needed? Or could it stay off and we need to configure Jenkins for being disabled. EDIT 2: It is confusing. The `org.kohsuke.github.GitHubClient` tries evertime it calls the GitHub Api to "note" the ratelimit - also when it's disabled per Jenkins Global GitHub Api Strategy.  
          kon Kalle Niemitalo added a comment - - edited

          https://github.com/hub4j/github-api/ is packaged for Jenkins in the GitHub API plugin. Which version of that are you using?

          The newest GitHub API plugin version appears to be 1.303-400.v35c2d8258028, which uses version 1.303 of the github-api library. In that version, the noteRateLimit method is defined in https://github.com/hub4j/github-api/blob/github-api-1.303/src/main/java/org/kohsuke/github/GitHubClient.java#L591-L602. It catches and logs NumberFormatException. Because the method does not propagate this exception to its caller, it cannot be the cause of your problem. Likewise, the GitHubClient.getRateLimit() method expects some GitHub Enterprise servers to return HTTP status 404 and handles it: https://github.com/hub4j/github-api/blob/github-api-1.303/src/main/java/org/kohsuke/github/GitHubClient.java#L220-L243

          The size of the pull request however could be a problem. It would be good to find out whether GitHub Enterprise returns an error status in HTTP or whether the HTTP response is so large that it exceeeds some quota at the HTTP client side.

          kon Kalle Niemitalo added a comment - - edited https://github.com/hub4j/github-api/ is packaged for Jenkins in the GitHub API plugin. Which version of that are you using? The newest GitHub API plugin version appears to be 1.303-400.v35c2d8258028, which uses version 1.303 of the github-api library. In that version, the noteRateLimit method is defined in https://github.com/hub4j/github-api/blob/github-api-1.303/src/main/java/org/kohsuke/github/GitHubClient.java#L591-L602 . It catches and logs NumberFormatException. Because the method does not propagate this exception to its caller, it cannot be the cause of your problem. Likewise, the GitHubClient.getRateLimit() method expects some GitHub Enterprise servers to return HTTP status 404 and handles it: https://github.com/hub4j/github-api/blob/github-api-1.303/src/main/java/org/kohsuke/github/GitHubClient.java#L220-L243 The size of the pull request however could be a problem. It would be good to find out whether GitHub Enterprise returns an error status in HTTP or whether the HTTP response is so large that it exceeeds some quota at the HTTP client side.
          mfizia Marc Fizia added a comment - - edited

          Thanks for the infos about the rate limit, but forget about the rate_limit,

          I found out, that the large PR is the only PR, which could not resolved:

          Got some new PRs with one commit and they got scanned and hook correctly.

          GitHub crashes with HTTP 500 when the plugin tries to retrieve the hash:

          https://github.mycompany.de/api/v3/repos/<org>/<repo>/commits/90b...f6a55

          Found this using Postman using an API Token.
          The Plugin never mention the HTTP 500...

          We will take a look at the logs of GitHub Enterprise. I keep you updated.

          So you could be right with your guess:

          The size of the pull request however could be a problem. It would be good to find out whether GitHub Enterprise returns an error status in HTTP or whether the HTTP response is so large that it exceeeds some quota at the HTTP client side.

          mfizia Marc Fizia added a comment - - edited Thanks for the infos about the rate limit, but forget about the rate_limit, I found out, that the large PR is the only PR, which could not resolved: Got some new PRs with one commit and they got scanned and hook correctly. GitHub crashes with HTTP 500 when the plugin tries to retrieve the hash: https: //github.mycompany.de/api/v3/repos/<org>/<repo>/commits/90b...f6a55 Found this using Postman using an API Token. The Plugin never mention the HTTP 500... We will take a look at the logs of GitHub Enterprise. I keep you updated. So you could be right with your guess: The size of the pull request however could be a problem. It would be good to find out whether GitHub Enterprise returns an error status in HTTP or whether the HTTP response is so large that it exceeeds some quota at the HTTP client side.

          https://docs.github.com/en/rest/commits/commits#get-a-commit seems to be the documentation for the failing https://github.mycompany.de/api/v3/repos/<org>/<repo>/commits/90b...f6a55 URL. A similar URL for a merge commit in a public repository, https://api.github.com/repos/jenkinsci/github-branch-source-plugin/commits/91207e9f9b4aaacacebfba238368cdee00bcf8ed returns a JSON object whose "files" property is an array of modified files with patches. Perhaps this array grows so large that it triggers the 500 HTTP status in GitHub Enterprise. However, the GitHub Branch Source plugin seems to use the GHCommit instance only to call commit.getParentSHA1s() so it doesn't really need the list of files at all. I wonder if there is a way to tell GitHub to omit the list of files from the response and avoid the error.

          kon Kalle Niemitalo added a comment - https://docs.github.com/en/rest/commits/commits#get-a-commit seems to be the documentation for the failing https://github.mycompany.de/api/v3/repos/ <org>/<repo>/commits/90b...f6a55 URL. A similar URL for a merge commit in a public repository, https://api.github.com/repos/jenkinsci/github-branch-source-plugin/commits/91207e9f9b4aaacacebfba238368cdee00bcf8ed returns a JSON object whose "files" property is an array of modified files with patches. Perhaps this array grows so large that it triggers the 500 HTTP status in GitHub Enterprise. However, the GitHub Branch Source plugin seems to use the GHCommit instance only to call commit.getParentSHA1s() so it doesn't really need the list of files at all. I wonder if there is a way to tell GitHub to omit the list of files from the response and avoid the error.
          kon Kalle Niemitalo added a comment - - edited

          It seems the list of parent commits of the pull request merge is available via the GraphQL API like this

          {
            repository(owner: "jenkinsci", name: "github-branch-source-plugin") {
              pullRequest(number: 282) {
                potentialMergeCommit {
                  parents(first: 3) {
                    edges {
                      node {
                        oid
                      }
                    }
                  }
                }
              }
            }
          }
          

          Response:

          {
            "data": {
              "repository": {
                "pullRequest": {
                  "potentialMergeCommit": {
                    "parents": {
                      "edges": [
                        {
                          "node": {
                            "oid": "91207e9f9b4aaacacebfba238368cdee00bcf8ed"
                          }
                        },
                        {
                          "node": {
                            "oid": "f05335472f21d4269ba006cf8fa320b917cf106a"
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
          

          Or by specifying the merge commit ID in the request:

          {
            repository(owner: "jenkinsci", name: "github-branch-source-plugin") {
              object(oid: "098ebc2df50b0b9748103b9bfbba9f26f7f9a1e9") {
                ... on Commit {
                  parents(first: 3) {
                    edges {
                      node {
                        oid
                      }
                    }
                  }
                }
              }
            }
          }
          

          Response:

          {
            "data": {
              "repository": {
                "object": {
                  "parents": {
                    "edges": [
                      {
                        "node": {
                          "oid": "91207e9f9b4aaacacebfba238368cdee00bcf8ed"
                        }
                      },
                      {
                        "node": {
                          "oid": "f05335472f21d4269ba006cf8fa320b917cf106a"
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
          

          However, I don't know how difficult it would be to make GitHub Branch Source use GraphQL for this operation, nor whether GitHub Enterprise even supports GraphQL.

          kon Kalle Niemitalo added a comment - - edited It seems the list of parent commits of the pull request merge is available via the GraphQL API like this { repository(owner: "jenkinsci", name: "github-branch-source-plugin") { pullRequest(number: 282) { potentialMergeCommit { parents(first: 3) { edges { node { oid } } } } } } } Response: { "data" : { "repository" : { "pullRequest" : { "potentialMergeCommit" : { "parents" : { "edges" : [ { "node" : { "oid" : "91207e9f9b4aaacacebfba238368cdee00bcf8ed" } }, { "node" : { "oid" : "f05335472f21d4269ba006cf8fa320b917cf106a" } } ] } } } } } } Or by specifying the merge commit ID in the request: { repository(owner: "jenkinsci", name: "github-branch-source-plugin") { object(oid: "098ebc2df50b0b9748103b9bfbba9f26f7f9a1e9") { ... on Commit { parents(first: 3) { edges { node { oid } } } } } } } Response: { "data" : { "repository" : { "object" : { "parents" : { "edges" : [ { "node" : { "oid" : "91207e9f9b4aaacacebfba238368cdee00bcf8ed" } }, { "node" : { "oid" : "f05335472f21d4269ba006cf8fa320b917cf106a" } } ] } } } } } However, I don't know how difficult it would be to make GitHub Branch Source use GraphQL for this operation, nor whether GitHub Enterprise even supports GraphQL.
          mfizia Marc Fizia added a comment - - edited

          So we are two steps forward and maybe we know the root cause of the problem:

          Our proprietary software development tool encodes special characters like Ü to %00dc in folder and filenames. So on the file system you will found something like that: "%00dcbergreifend" or "foo%002dbar" for Übergreifend or foo-bar.

          We found a strange Stacktrace while searching the http 500 in the unicorn.logs of GitHub for the following API-Call:

          https://github.mycompany.de/api/v3/repos/<org>/<repo>/commits/90b...f6a55 

          The stracktrace was from the GitHub UI:

          2022-04-27 07:22:42 - AddressableMonkeyPatches::NulNotAllowed - https://github.mycompany.de/<org>/<repo>/blob/9e971...889d5/foo/bar/%00dcbergreifend/.info contains `%00`. Please adjust the `parse` callsite to rescue `Addressable::URI::InvalidURIError` and reject the URI:
                  /github/lib/addressable_monkey_patches.rb:32:in `parse'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/addressable-2.8.0/lib/addressable/uri.rb:624:in `encode'
                  /github/app/api/serializer.rb:312:in `encode'
                  /github/app/api/serializer.rb:102:in `diff_url'
                  /github/app/api/serializer/repositories_dependency.rb:624:in `condensed_diff_entry_hash'
                  /github/app/api/serializer/git_data_dependency.rb:127:in `block in git_commit_hash'
                  /github/app/api/serializer/git_data_dependency.rb:126:in `each'
                  /github/app/api/serializer/git_data_dependency.rb:126:in `git_commit_hash'
                  /github/app/api/serializer.rb:201:in `block in track_serialization'
                  /github/lib/github/lazy_dogstats.rb:75:in `time'
                  /github/app/api/serializer.rb:200:in `track_serialization'
                  /github/app/api/serializer.rb:194:in `serialize'
                  /github/app/api/app/delivery_dependency.rb:101:in `block in deliver'
                  /github/app/api/instrument_segment.rb:129:in `call'
                  /github/app/api/app/delivery_dependency.rb:100:in `deliver'
                  /github/app/api/instrument_segment.rb:53:in `block in deliver'
                  /github/app/api/instrument_segment.rb:129:in `call'
                  /github/app/api/instrument_segment.rb:52:in `deliver'
                  /github/app/api/repository_commits.rb:211:in `block (2 levels) in <class:RepositoryCommits>'
                  /github/app/api/app/helpers_dependency.rb:197:in `delivering_raw_diff_content'
                  /github/app/api/repository_commits.rb:164:in `block in <class:RepositoryCommits>'
                  /github/app/api/app/open_api.rb:131:in `block in build_annotating_block'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1675:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1675:in `block in compile!'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1013:in `block (3 levels) in route!'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1032:in `route_eval'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1013:in `block (2 levels) in route!'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1061:in `block in process_route'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1059:in `catch'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1059:in `process_route'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1011:in `block in route!'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1008:in `each'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1008:in `route!'       /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1129:in `block in dispatch!'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `block in invoke'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `catch'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `invoke'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1124:in `dispatch!'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:939:in `block in call!'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `block in invoke'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `catch'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `invoke'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:939:in `call!'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:929:in `call'
                  /github/lib/permission_cache.rb:13:in `block in call'
                  /github/lib/permission_cache.rb:86:in `enable'
                  /github/lib/permission_cache.rb:13:in `call'
                  /github/app/api/middleware/database_selection.rb:30:in `block in call_with_db_selection'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/activerecord-7.1.0.alpha.e8db48f/lib/active_record/connection_handling.rb:374:in `with_role_and_shard'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/activerecord-7.1.0.alpha.e8db48f/lib/active_record/connection_handling.rb:156:in `connected_to'
                  /github/lib/github/config/mysql.rb:146:in `connected_to'
                  /github/lib/database_selector.rb:67:in `read_from_replica'
                  /github/lib/database_selector.rb:56:in `read_from_database'
                  /github/app/api/middleware/database_selection.rb:39:in `select_database'
                  /github/app/api/middleware/database_selection.rb:30:in `call_with_db_selection'
                  /github/app/api/middleware/database_selection.rb:20:in `call'
                  /github/lib/github/limiters/middleware.rb:54:in `call'
                  /github/app/api/middleware/limiting.rb:42:in `block in call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/scrolls-0.9.3/lib/scrolls/logger.rb:221:in `with_context'
                  /github/lib/github/logger.rb:44:in `log_context'
                  /github/lib/github/service_mapping.rb:100:in `push_service_mapping_context'
                  /github/app/api/middleware/limiting.rb:41:in `call'
                  /github/lib/github/limiters/middleware.rb:136:in `call'
                  /github/app/api/middleware/limiting.rb:42:in `block in call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/scrolls-0.9.3/lib/scrolls/logger.rb:221:in `with_context'
                  /github/lib/github/logger.rb:44:in `log_context'
                  /github/lib/github/service_mapping.rb:100:in `push_service_mapping_context'
                  /github/app/api/middleware/limiting.rb:41:in `call'
                  /github/app/api/middleware/cors.rb:50:in `call'
                  /github/app/api/middleware/enforce_media_type.rb:40:in `call'
                  /github/app/api/middleware/request_authentication_fingerprint.rb:30:in `call'
                  /github/app/api/middleware/route_finder.rb:43:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/actionpack-7.1.0.alpha.e8db48f/lib/action_dispatch/middleware/executor.rb:14:in `call'
                  /github/lib/guarded_executor.rb:9:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/null_logger.rb:11:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/head.rb:12:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:216:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1991:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1542:in `block in call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1769:in `synchronize'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1542:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/conditional_get.rb:27:in `call'
                  /github/lib/github/routers/api.rb:57:in `call'
                  /github/app/models/experiment_cache.rb:10:in `block in call'
                  /github/app/models/experiment_cache.rb:33:in `enable'
                  /github/app/models/experiment_cache.rb:10:in `call'
                  /github/lib/search/aggregator/middleware.rb:15:in `block in call'
                  /github/lib/search/aggregator.rb:22:in `aggregate'
                  /github/lib/search/aggregator/middleware.rb:14:in `call'
                  /github/lib/github/hydro_middleware.rb:71:in `call'
                  /github/lib/rack/request_logger.rb:22:in `call'
                  /github/lib/rack/request_id.rb:41:in `call'
                  /github/lib/rack/server_id.rb:18:in `call'
                  /github/lib/rack/malformed_request_handler.rb:11:in `call'
                  /github/lib/github/enterprise/middleware.rb:102:in `call'
                  /github/lib/github/enterprise/middleware.rb:48:in `proxy_call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/session/abstract/id.rb:266:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/session/abstract/id.rb:266:in `context'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/session/abstract/id.rb:260:in `call'
                  /github/lib/github/enterprise/middleware.rb:64:in `call'
                  /github/lib/github/timeout_middleware.rb:201:in `call'
                  /github/lib/github/request_timer_middleware.rb:14:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:74:in `block in call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `each'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `call'
                  /github/lib/github/banned_ips_middleware.rb:34:in `call'
                  /github/lib/flipper/middleware/overrider.rb:64:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/flipper-0.17.2/lib/flipper/middleware/memoizer.rb:62:in `memoized_call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/flipper-0.17.2/lib/flipper/middleware/memoizer.rb:40:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/flipper-0.17.2/lib/flipper/middleware/setup_env.rb:35:in `call'
                  /github/lib/platform/middleware/batch_loading.rb:17:in `call'
                  /github/lib/github/cache/reset_middleware.rb:20:in `call'
                  /github/lib/github/middleware/stats.rb:26:in `call'
                  /github/lib/rack/process_utilization.rb:1090:in `call'
                  /github/lib/github/allocation_tracer_middleware.rb:97:in `call'
                  /github/lib/github/flamegraph_middleware.rb:20:in `call'
                  /github/lib/github/line_profiler_middleware.rb:18:in `call'
                  /github/lib/github/invalid_parameters_middleware.rb:14:in `call'
                  /github/lib/github/buffered_stats_middleware.rb:19:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/secure_headers-6.3.0/lib/secure_headers/middleware.rb:11:in `call'
                  /github/lib/github/context_middleware.rb:15:in `call'
                  /github/lib/github/lazy_memcache.rb:54:in `call'
                  /github/lib/github/lazy_dogstats.rb:30:in `block in call'
                  /github/lib/github/config/stats.rb:83:in `with_dogstats'
                  /github/lib/github/lazy_dogstats.rb:29:in `call'
                  /github/lib/github/middleware/after_response.rb:17:in `block in call'
                  /github/lib/github/config/after_response.rb:50:in `with_after_response'
                  /github/lib/github/middleware/after_response.rb:16:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/iopromise-0.1.5/lib/iopromise/rack/context_middleware.rb:14:in `block in call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/iopromise-0.1.5/lib/iopromise/cancel_context.rb:28:in `with_new_context'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/iopromise-0.1.5/lib/iopromise/rack/context_middleware.rb:13:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/failbot-2.9.1/lib/failbot/middleware.rb:16:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/config.rb:19:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/runtime.rb:22:in `call'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:634:in `process_client'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:732:in `worker_loop'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:143:in `start'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/unicorn-6.0.0/bin/unicorn:128:in `<top (required)>'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/bootsnap-1.9.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:60:in `load'
                  /github/vendor/gems/2.7.1/ruby/2.7.0/gems/bootsnap-1.9.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:60:in `load'
                  /github/bin/unicorn:15:in `<main>'
          

          I changed the folders-name to "Übergreifend" and commited it. Jenkins starts to build the PR after this. I reprocused this behaviour in a fresh repo with files and folders starting, ending and containing this special form of encoding. We will open a ticket to GitHub and the Dev-Team of our proprietary Softwaredevelopment-Tool. Maybe we can fix it soon.

          kon Thanks for your help. The large PR is running after excluding the encoded characters. Maybe there is no need to change the API-Call to GraphQL.

          P.s.: I will close this ticket, and link the GitHub Issue Ticket, as soon as possible.

          mfizia Marc Fizia added a comment - - edited So we are two steps forward and maybe we know the root cause of the problem: Our proprietary software development tool encodes special characters like Ü to %00dc in folder and filenames. So on the file system you will found something like that: " %00dc bergreifend" or "foo %002d bar" for Ü bergreifend or foo - bar . We found a strange Stacktrace while searching the http 500 in the unicorn.log s of GitHub for the following API-Call: https: //github.mycompany.de/api/v3/repos/<org>/<repo>/commits/90b...f6a55 The stracktrace was from the GitHub UI: 2022-04-27 07:22:42 - AddressableMonkeyPatches::NulNotAllowed - https: //github.mycompany.de/<org>/<repo>/blob/9e971...889d5/foo/bar/%00dcbergreifend/.info contains `%00`. Please adjust the `parse` callsite to rescue `Addressable::URI::InvalidURIError` and reject the URI: /github/lib/addressable_monkey_patches.rb:32:in `parse' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/addressable-2.8.0/lib/addressable/uri.rb:624:in `encode' /github/app/api/serializer.rb:312:in `encode' /github/app/api/serializer.rb:102:in `diff_url' /github/app/api/serializer/repositories_dependency.rb:624:in `condensed_diff_entry_hash' /github/app/api/serializer/git_data_dependency.rb:127:in `block in git_commit_hash' /github/app/api/serializer/git_data_dependency.rb:126:in `each' /github/app/api/serializer/git_data_dependency.rb:126:in `git_commit_hash' /github/app/api/serializer.rb:201:in `block in track_serialization' /github/lib/github/lazy_dogstats.rb:75:in `time' /github/app/api/serializer.rb:200:in `track_serialization' /github/app/api/serializer.rb:194:in `serialize' /github/app/api/app/delivery_dependency.rb:101:in `block in deliver' /github/app/api/instrument_segment.rb:129:in `call' /github/app/api/app/delivery_dependency.rb:100:in `deliver' /github/app/api/instrument_segment.rb:53:in `block in deliver' /github/app/api/instrument_segment.rb:129:in `call' /github/app/api/instrument_segment.rb:52:in `deliver' /github/app/api/repository_commits.rb:211:in `block (2 levels) in < class: RepositoryCommits>' /github/app/api/app/helpers_dependency.rb:197:in `delivering_raw_diff_content' /github/app/api/repository_commits.rb:164:in `block in < class: RepositoryCommits>' /github/app/api/app/open_api.rb:131:in `block in build_annotating_block' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1675:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1675:in `block in compile!' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1013:in `block (3 levels) in route!' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1032:in `route_eval' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1013:in `block (2 levels) in route!' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1061:in `block in process_route' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1059:in ` catch ' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1059:in `process_route' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1011:in `block in route!' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1008:in `each' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1008:in `route! ' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1129:in `block in dispatch!' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `block in invoke' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in ` catch ' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `invoke' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1124:in `dispatch!' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:939:in `block in call!' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `block in invoke' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in ` catch ' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `invoke' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:939:in `call!' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:929:in `call' /github/lib/permission_cache.rb:13:in `block in call' /github/lib/permission_cache.rb:86:in `enable' /github/lib/permission_cache.rb:13:in `call' /github/app/api/middleware/database_selection.rb:30:in `block in call_with_db_selection' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/activerecord-7.1.0.alpha.e8db48f/lib/active_record/connection_handling.rb:374:in `with_role_and_shard' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/activerecord-7.1.0.alpha.e8db48f/lib/active_record/connection_handling.rb:156:in `connected_to' /github/lib/github/config/mysql.rb:146:in `connected_to' /github/lib/database_selector.rb:67:in `read_from_replica' /github/lib/database_selector.rb:56:in `read_from_database' /github/app/api/middleware/database_selection.rb:39:in `select_database' /github/app/api/middleware/database_selection.rb:30:in `call_with_db_selection' /github/app/api/middleware/database_selection.rb:20:in `call' /github/lib/github/limiters/middleware.rb:54:in `call' /github/app/api/middleware/limiting.rb:42:in `block in call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/scrolls-0.9.3/lib/scrolls/logger.rb:221:in `with_context' /github/lib/github/logger.rb:44:in `log_context' /github/lib/github/service_mapping.rb:100:in `push_service_mapping_context' /github/app/api/middleware/limiting.rb:41:in `call' /github/lib/github/limiters/middleware.rb:136:in `call' /github/app/api/middleware/limiting.rb:42:in `block in call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/scrolls-0.9.3/lib/scrolls/logger.rb:221:in `with_context' /github/lib/github/logger.rb:44:in `log_context' /github/lib/github/service_mapping.rb:100:in `push_service_mapping_context' /github/app/api/middleware/limiting.rb:41:in `call' /github/app/api/middleware/cors.rb:50:in `call' /github/app/api/middleware/enforce_media_type.rb:40:in `call' /github/app/api/middleware/request_authentication_fingerprint.rb:30:in `call' /github/app/api/middleware/route_finder.rb:43:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/actionpack-7.1.0.alpha.e8db48f/lib/action_dispatch/middleware/executor.rb:14:in `call' /github/lib/guarded_executor.rb:9:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/null_logger.rb:11:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/head.rb:12:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:216:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1991:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1542:in `block in call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1769:in `synchronize' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1542:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/conditional_get.rb:27:in `call' /github/lib/github/routers/api.rb:57:in `call' /github/app/models/experiment_cache.rb:10:in `block in call' /github/app/models/experiment_cache.rb:33:in `enable' /github/app/models/experiment_cache.rb:10:in `call' /github/lib/search/aggregator/middleware.rb:15:in `block in call' /github/lib/search/aggregator.rb:22:in `aggregate' /github/lib/search/aggregator/middleware.rb:14:in `call' /github/lib/github/hydro_middleware.rb:71:in `call' /github/lib/rack/request_logger.rb:22:in `call' /github/lib/rack/request_id.rb:41:in `call' /github/lib/rack/server_id.rb:18:in `call' /github/lib/rack/malformed_request_handler.rb:11:in `call' /github/lib/github/enterprise/middleware.rb:102:in `call' /github/lib/github/enterprise/middleware.rb:48:in `proxy_call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/session/ abstract /id.rb:266:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/session/ abstract /id.rb:266:in `context' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/session/ abstract /id.rb:260:in `call' /github/lib/github/enterprise/middleware.rb:64:in `call' /github/lib/github/timeout_middleware.rb:201:in `call' /github/lib/github/request_timer_middleware.rb:14:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:74:in `block in call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `each' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `call' /github/lib/github/banned_ips_middleware.rb:34:in `call' /github/lib/flipper/middleware/overrider.rb:64:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/flipper-0.17.2/lib/flipper/middleware/memoizer.rb:62:in `memoized_call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/flipper-0.17.2/lib/flipper/middleware/memoizer.rb:40:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/flipper-0.17.2/lib/flipper/middleware/setup_env.rb:35:in `call' /github/lib/platform/middleware/batch_loading.rb:17:in `call' /github/lib/github/cache/reset_middleware.rb:20:in `call' /github/lib/github/middleware/stats.rb:26:in `call' /github/lib/rack/process_utilization.rb:1090:in `call' /github/lib/github/allocation_tracer_middleware.rb:97:in `call' /github/lib/github/flamegraph_middleware.rb:20:in `call' /github/lib/github/line_profiler_middleware.rb:18:in `call' /github/lib/github/invalid_parameters_middleware.rb:14:in `call' /github/lib/github/buffered_stats_middleware.rb:19:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/secure_headers-6.3.0/lib/secure_headers/middleware.rb:11:in `call' /github/lib/github/context_middleware.rb:15:in `call' /github/lib/github/lazy_memcache.rb:54:in `call' /github/lib/github/lazy_dogstats.rb:30:in `block in call' /github/lib/github/config/stats.rb:83:in `with_dogstats' /github/lib/github/lazy_dogstats.rb:29:in `call' /github/lib/github/middleware/after_response.rb:17:in `block in call' /github/lib/github/config/after_response.rb:50:in `with_after_response' /github/lib/github/middleware/after_response.rb:16:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/iopromise-0.1.5/lib/iopromise/rack/context_middleware.rb:14:in `block in call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/iopromise-0.1.5/lib/iopromise/cancel_context.rb:28:in `with_new_context' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/iopromise-0.1.5/lib/iopromise/rack/context_middleware.rb:13:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/failbot-2.9.1/lib/failbot/middleware.rb:16:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/config.rb:19:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/rack-2.2.3/lib/rack/runtime.rb:22:in `call' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:634:in `process_client' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:732:in `worker_loop' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:143:in `start' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/unicorn-6.0.0/bin/unicorn:128:in `<top (required)>' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/bootsnap-1.9.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:60:in `load' /github/vendor/gems/2.7.1/ruby/2.7.0/gems/bootsnap-1.9.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:60:in `load' /github/bin/unicorn:15:in `<main>' I changed the folders-name to "Übergreifend" and commited it. Jenkins starts to build the PR after this. I reprocused this behaviour in a fresh repo with files and folders starting, ending and containing this special form of encoding. We will open a ticket to GitHub and the Dev-Team of our proprietary Softwaredevelopment-Tool. Maybe we can fix it soon. kon Thanks for your help. The large PR is running after excluding the encoded characters. Maybe there is no need to change the API-Call to GraphQL. P.s.: I will close this ticket, and link the GitHub Issue Ticket, as soon as possible.

          People

            Unassigned Unassigned
            mfizia Marc Fizia
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: