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

It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

Scriptrunner list of tags

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?

1 answer

Hi @Mikita_Makarenka 

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?

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

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)

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

Ok, very luckily, this is the case. Thank you.

@Robert Giddings _Adaptavist_ 
Hello, Robert
Is there any updates on that release?

Hi @Никита Макаренко ,

I believe it will be released around mid-December.

Kind regards,

Robert Giddings

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

Suggest an answer

Log in or Sign up to answer
TAGS
Community showcase
Published in Confluence Cloud

🎨 Add some visual life to your templates

Hi Atlassian Community, My name is Avni Barman, and I am a Product Manager on the Confluence Cloud team. Based on feedback from you, we are giving admins more power to create templates that a...

129 views 1 4
Read article

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you