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

Remove All Unused Issue Type Screen Schemes

Created 1 year ago, Updated 2 month(s) ago
App in script
ScriptRunner For Jira
ScriptRunner For Jira
by Adaptavist
Compatibility
compatibility bullet
Jira (8.0 - 8.19)
compatibility bullet
ScriptRunner For Jira (7.10.0)
Language |
groovy
/*
We need issueTypeScreenSchemeManager to go through each scheme and check if it is assigned to the project.
If not, delete it.
*/

import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.scriptrunner.canned.util.OutputFormatter

def issueTypeScreenSchemeManager = ComponentAccessor.getIssueTypeScreenSchemeManager()
def defaultIssueTypeScreenScheme = issueTypeScreenSchemeManager.defaultScheme

// Schemes in this list will be ignored when the script runs.
// Add the full name into the list to not delete it, even if it is unused.
// Adding a partial name (e.g. "TEST") will keep schemes that contain
// the partial name (e.g. the 2nd and 3rd schemes will be kept the example below).
// Useful if there is a naming convention in place
// in the instance for similar schemes.
def unusedSchemeNamesToIgnore = [
        'JRA: Software Development Issue Type Screen Scheme',
        'TEST: Software Development Issue Type Screen Scheme',
        'TESTTWO: Software Development Issue Type Screen Scheme']

def deletedIssueTypeScreenSchemes = []
def errorIssueTypeScreenSchemes = [:]

issueTypeScreenSchemeManager.issueTypeScreenSchemes.each {
    try {
        if (it == defaultIssueTypeScreenScheme || unusedSchemeNamesToIgnore.contains(it.name)) {
            // Do not delete the default scheme or a scheme for an excluded project
            return
        }

        if (it.projects.size() == 0) {
            // Remove any associations with screen schemes
            issueTypeScreenSchemeManager.removeIssueTypeSchemeEntities(it)

            // Remove the issue type screen scheme
            issueTypeScreenSchemeManager.removeIssueTypeScreenScheme(it)
            deletedIssueTypeScreenSchemes.add(it.name)
        }
    } catch (Exception e) {
        errorIssueTypeScreenSchemes.put(it.name, e.getMessage())
    }
}

OutputFormatter.markupBuilder {
    h2('Issue Type Screen Schemes Report')
    !deletedIssueTypeScreenSchemes && !errorIssueTypeScreenSchemes && p('No unused issue type screen schemes found')
    if (deletedIssueTypeScreenSchemes) {
        h3('Deleted Issue Type Screen Schemes:')
        ul {
            deletedIssueTypeScreenSchemes.each {
                li(it)
            }
        }
    }
    if (errorIssueTypeScreenSchemes) {
        h3('Errors:')
        table(class: 'aui') {
            thead {
                tr {
                    th('Issue Type Screen Scheme Name')
                    th('Error')
                }
            }
            tbody {
                errorIssueTypeScreenSchemes.each { screenScheme, error ->
                    tr {
                        td(screenScheme)
                        td(error)

                    }
                }
            }
        }
    }
}
Having an issue with this script?
Report it here