Skip to main content
Example scripts
arrow icon
To homepage
Bitbucket
Data centre icon
Data Center

Repository Report

Tags
Created 1 year ago, Updated 3 month(s) ago
App in script
ScriptRunner For Bitbucket
ScriptRunner For Bitbucket
by Adaptavist
Compatibility
compatibility bullet
Bitbucket (6.0 - 7.17)
compatibility bullet
ScriptRunner For Bitbucket (7.10.0)
Language |
groovy
import com.atlassian.bitbucket.project.Project
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.bitbucket.util.PageUtils
import com.atlassian.sal.api.component.ComponentLocator
import groovy.xml.MarkupBuilder

def final PAGE_SIZE = 1000

def projectService = ComponentLocator.getComponent(ProjectService)
def repositoryService = ComponentLocator.getComponent(RepositoryService)
def refService = ComponentLocator.getComponent(RefService)

def allProjects = PageUtils.toStream(projectService.&findAll, PAGE_SIZE).collect { it as Project }

def tagsByProject = allProjects.collect { project ->
    def repos = PageUtils.toStream({ pageRequest ->
        repositoryService.findByProjectKey(project.key, pageRequest)
    }, PAGE_SIZE).collect { it as Repository }

    def repoTags = repos.collectEntries { repo ->
        def tags = PageUtils.toStream({ pageRequest ->
            refService.getTags(new RepositoryTagsRequest.Builder(repo).build(), pageRequest)
        }, PAGE_SIZE)*.displayId

        [(repo.name): tags]
    }

    [
            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)
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

writer.toString()
Having an issue with this script?
Report it here