github-pr-coverage-status-plugin icon indicating copy to clipboard operation
github-pr-coverage-status-plugin copied to clipboard

Compare coverage against PR base branch instead of master

Open jaredj opened this issue 7 years ago • 8 comments

Not all of our pull requests are opened against a single branch; sometimes we create pull requests against release/hotfix branches. When we do, the coverage change report is not meaningful. What would it take to always compare coverage in a PR branch against the PR's base branch instead?

jaredj avatar Dec 27 '18 16:12 jaredj

I think that smt what we can do, do you know how to get base branch info from github pr?

terma avatar Dec 28 '18 02:12 terma

@terma I don't know offhand but I can research it next week. if I have the time and can get with the program maybe I can make a PR too but no promises :)

jaredj avatar Dec 28 '18 21:12 jaredj

@jaredj, thx, any info about that will be appreciated.

terma avatar Dec 29 '18 00:12 terma

the base branch can be retrieved with the github API:

https://developer.github.com/v3/pulls/#get-a-single-pull-request

in the bit of example response they give the base branch happens to be master:

  "base": {
    "label": "master",
    "ref": "master",
    "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e",
    "user": {
      "login": "octocat",
      "id": 1,
      "node_id": "MDQ6VXNlcjE=",
      "avatar_url": "https://github.com/images/error/octocat_happy.gif",
      "gravatar_id": "",
      "url": "https://api.github.com/users/octocat",
      "html_url": "https://github.com/octocat",
      "followers_url": "https://api.github.com/users/octocat/followers",
      "following_url": "https://api.github.com/users/octocat/following{/other_user}",
      "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
      "organizations_url": "https://api.github.com/users/octocat/orgs",
      "repos_url": "https://api.github.com/users/octocat/repos",
      "events_url": "https://api.github.com/users/octocat/events{/privacy}",
      "received_events_url": "https://api.github.com/users/octocat/received_events",
      "type": "User",
      "site_admin": false
    },

I think ref is what we want.

I'm not sure I'm reading it right but it seems like you're using GHPullRequest.java from the github java API in which case it's maybe as simple as just doing something like:

pr.getHead().getRef()

jaredj avatar Dec 30 '18 23:12 jaredj

@jaredj can you try to use the following params in your pipeline and check if you achieve the expected result? scmVars: [GIT_URL: fullBranchUrl(env.BRANCH_NAME)]]) - for MasterCoverageAction scmVars: [GIT_URL: fullBranchUrl(env.CHANGE_TARGET)]]) - for CompareCoverageAction

def fullBranchUrl(branchName) { return "${scm.getUserRemoteConfigs()[0].getUrl()}/tree/$branchName" }

dmotpan avatar Dec 31 '18 10:12 dmotpan

@dmotpan, works as expected.

Result:

screen shot 2019-02-25 at 9 09 42

Pipeline:

def fullBranchUrl(branchName) { return "${scm.getUserRemoteConfigs()[0].getUrl()}/tree/$branchName" }

pipeline {
  agent none
  stages {
    stage('Code Coverage') {
      agent {node 'nodejs'}
      steps {
        sh 'npm run coverage'
      }
      post {
        success {
          script {
            // commit: record code coverage
            if (env.CHANGE_ID == null) {
              currentBuild.result = 'SUCCESS'
              step([$class: 'MasterCoverageAction', scmVars: [GIT_URL: fullBranchUrl(env.BRANCH_NAME)]])
            }
            // pull request: compare code coverage
            else if (env.CHANGE_ID != null) {
              currentBuild.result = 'SUCCESS'
              step([$class: 'CompareCoverageAction', publishResultAs: 'statusCheck', scmVars: [GIT_URL: fullBranchUrl(env.CHANGE_TARGET)]])
            }
          }
        }
        cleanup {
          cleanWs()
        }
      }
    }
  }
}

anton-yurchenko avatar Feb 25 '19 06:02 anton-yurchenko

Yes, it works for me too! Sorry for the late reply.

Note that (not a big deal) it still calls the comparison branch "master" in the status check even though it's not

jaredj avatar Feb 25 '19 09:02 jaredj

Hi @terma Thanks for your support, How about the progress of this issue?

toanlakaplan avatar Oct 18 '20 10:10 toanlakaplan