Currently, I'm trying to configure "Scriptrunner for bitbucket server" to get a list of tags. Unfortunately, I did not found any solution for that task.
I also tried to find any reference manual for scriptrunner capabilities, but also failed.
Can anyone help me finding the solution?
The documentation for ScriptRunner for Bitbucket can be found here: https://scriptrunner.adaptavist.com/latest/bitbucket/quickstart.html
I have also produced a Script for producing a report of the tags in your Bitbucket instance, which is based on a similar Script found in the docs (https://scriptrunner.adaptavist.com/latest/bitbucket/ScriptConsole.html#_list_all_repository_sizes_by_project) and can be run in the Script Console.
import com.atlassian.bitbucket.project.ProjectService
import com.atlassian.bitbucket.repository.RefService
import com.atlassian.bitbucket.repository.Repository
import com.atlassian.bitbucket.repository.RepositoryService
import com.atlassian.bitbucket.repository.RepositoryTagsRequest
import com.atlassian.sal.api.component.ComponentLocator
import groovy.xml.MarkupBuilder
import static com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketCannedScriptUtils.unlimitedPager
def refService = ComponentLocator.getComponent(RefService)
def repositoryService = ComponentLocator.getComponent(RepositoryService)
def projectService = ComponentLocator.getComponent(ProjectService)
def allProjects = projectService.findAll(unlimitedPager).values
def tagsByProject = allProjects.collect { project ->
def repos = repositoryService.findByProjectKey(project.key, unlimitedPager).values
def repoTags = repos.collectEntries { Repository repo ->
[(repo.name): refService.getTags(new RepositoryTagsRequest.Builder(repo).build(), unlimitedPager).values.collect { tag -> tag.displayId }]
}
[
project : project.name,
repositories: repoTags
]
}
def writer = new StringWriter()
def builder = new MarkupBuilder(writer)
builder.table(class: "aui") {
thead {
tr {
th("Project Name")
th("Repository Name")
th("Tags")
}
}
tbody {
tagsByProject.each { dataRow ->
dataRow.repositories.eachWithIndex { Map.Entry repoRow, i ->
tr {
td {
if (i == 0) {
b(dataRow.project)
}
}
td(repoRow.key)
td {
table {
tbody {
repoRow.value.each { tag ->
tr {
td(tag)
}
}
}
}
}
}
}
}
}
}
return writer.toString()
Please let me know where you where you were planning to use this list of tags, so I can help further?
Kind regards,
Robert Giddings,
Product Manager, ScriptRunner for Bitbucket
Hello, Robert. Thank you for an answer. The idea was to block pull requests, whose target ref does not point to the commit with tag with name "release-*"
Currently, I've tried used your script to write mine (simplified version) and got these errors:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script518.groovy: 12: [Static type checking] - You tried to call a method which is not allowed: com.atlassian.bitbucket.repository.Ref#getLatestCommit() @ line 12, column 18. def targetHash = mergeRequest.pullRequest.toRef.latestCommit ^ Script518.groovy: 14: [Static type checking] - You tried to call a method which is not allowed: com.atlassian.bitbucket.repository.RepositoryTagsRequest$Builder#(com.atlassian.bitbucket.repository.Repository) @ line 14, column 42. gPresent = refService.getTags(new Reposi ^ Script518.groovy: 14: [Static type checking] - You tried to call a method which is not allowed: com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketCannedScriptUtils#getUnlimitedPager() @ line 14, column 91. equest.Builder(repo).build(), unlimitedP ^ Script518.groovy: 14: [Static type checking] - You tried to call a method which is not allowed: com.atlassian.bitbucket.repository.RefService#getTags(com.atlassian.bitbucket.repository.RepositoryTagsRequest,com.atlassian.bitbucket.util.PageRequest) @ line 14, column 23. def validTagPresent = refService.getTags(new RepositoryTagsRequest.Builder(repo).build(), unlimitedPager).values.any { tag -> ^ Script518.groovy: 15: [Static type checking] - You tried to call a method which is not allowed: com.atlassian.bitbucket.repository.Tag#getHash() @ line 15, column 57. th("/refs/tags/release-") && tag.hash = ^ 5 errors
Can you explain how can I avoid them?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Никита Макаренко ,
There are some restrictions to the Bitbucket API when adding merge checks directly to a repository or project, as a repository admin or project admin.
Those API restrictions can cause those
You tried to call a method which is not allowed
errors.
In order to get around those errors, firstly please make sure you are using the latest version of ScriptRunner for Bitbucket as we allow more of the Bitbucket API to be used by project and repository admins, with newer releases of ScriptRunner.
And secondly, if the API is still not available by project or repository admins, a global Bitbucket administrator can add the merge check in the administration area of Bitbucket and then apply it to the projects and repositories you want it applied to.
I hope this helps answer your question?
Kind regards,
Robert Giddings,
Product Manager, ScriptRunner for Bitbucket
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thank you, Robert. I've created a personal repository in Bitbucket and made a first commit there. After that I tried to create my merge check globally for that. The problem, I've met is that I can't see my project in the list view (where I'm supposed to choose the projects, which I wish to apply my merge check to). Can you comment that? Is there any indexation time gap for that list view?
Currently, I have no idea how to apply my merge check to my project, because it is not represented in the list of scriptrunner settings, though other projects are(a lot of them)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Никита Макаренко ,
Do you have over a 1000 projects in your Bitbucket instance?
If so, we are currently working on a fix to the project selection tree to allow for the display of more than a 1000 projects.
When that is released soon, I will update you.
Kind regards,
Robert Giddings,
ScriptRunner for Bitbucket
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Sometime in the next few weeks @Никита Макаренко .
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Никита Макаренко ,
I believe it will be released around mid-December.
Kind regards,
Robert Giddings
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Никита Макаренко ,
I am pleased to tell you that the new Project/Repo selection tree has now been released in version 6.16.0 of ScriptRunner for Bitbucket.
This new version of the tree should now support over a 1000 projects.
Kind regards,
Robert Giddings,
Project Manager, ScriptRunner for Bitbucket
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.