Just a heads up: On March 24, 2025, starting at 4:30pm CDT / 19:30 UTC, the site will be undergoing scheduled maintenance for a few hours. During this time, the site might be unavailable for a short while. Thanks for your patience.

×
Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

Get build status of master branch in ScriptRunner

Borislav Stoilov
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
June 25, 2024

Hello, I am creating a merge check that will block the merge button in case there is a ongoing build on master.

I am trying to do this in script runner but since its running in Groovy sandbox I can't perform http request to the bitbucket rest API and fetch the status.

How can I achieve this??

1 answer

0 votes

Hi @Borislav Stoilov 

 

 

A custom Merge Check with this script should do the job :

````

import com.atlassian.bitbucket.hook.repository.RepositoryHookResult
import com.atlassian.bitbucket.build.BuildState
import com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketPageUtils
import com.atlassian.bitbucket.build.status.RepositoryBuildStatus
import com.atlassian.bitbucket.repository.Ref
import com.atlassian.bitbucket.repository.RefService
import com.atlassian.bitbucket.repository.ResolveRefRequest
import com.atlassian.bitbucket.build.status.BuildStatusRepositorySearchRequest
import com.atlassian.sal.api.component.ComponentLocator
import com.atlassian.bitbucket.build.status.RepositoryBuildStatusService
import com.atlassian.bitbucket.repository.Branch
import static com.atlassian.bitbucket.repository.StandardRefType.BRANCH


def repositoryBuildStatusService = ComponentLocator.getComponent(RepositoryBuildStatusService)
def refService = ComponentLocator.getComponent(RefService)

def resolveRefRequest = new ResolveRefRequest.Builder(mergeRequest.pullRequest.toRef.repository)
.type(BRANCH)
.refId(mergeRequest.pullRequest.toRef.id)
.build()

def branch = refService.resolveRef(resolveRefRequest) as Branch
log.info("Will scan for builds on branch ${branch}")


def buildSearchRequest = new BuildStatusRepositorySearchRequest.Builder(mergeRequest.pullRequest.toRef.repository)
.ref(branch as Ref)
.build()

Iterable<RepositoryBuildStatus> builds = BitbucketPageUtils.pagedIterable(repositoryBuildStatusService.&search, buildSearchRequest)
def buildInProgrsess = false

log.info("found ${builds.size()} builds")
builds.each {
if (it.state == BuildState.INPROGRESS) {
buildInProgrsess = true
log.info("Blocked by Build on commit ${it.commit} with status ${it.state}")
return
}
}

if (buildInProgrsess) {
RepositoryHookResult.rejected("Rejected because build is in progress on destination branch", "Detailed information about merge rejection.")
}


````

 

 

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events