Skip to main content
Book your demo
Example scripts
To homepage
Jira
Data centre icon
Data Center

Send Release Notes to Project Stakeholders

Features
Listeners
Created 2 year(s) ago, Updated 3 month(s) ago
App in script
ScriptRunner For Jira
ScriptRunner For Jira
by Adaptavist
Compatibility
compatibility bullet
Jira (8.0 - 8.6)
compatibility bullet
ScriptRunner For Jira (5.6.14)
Language |
groovy
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.project.VersionReleaseEvent
import com.atlassian.jira.security.roles.ProjectRoleManager
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.web.bean.PagerFilter
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.metainf.jira.plugin.emailissue.api.EmailService
import com.metainf.jira.plugin.emailissue.api.EmailDefinitionApi
import com.metainf.jira.plugin.emailissue.action.EmailOptions

@WithPlugin("com.metainf.jira.plugin.emailissue")

@PluginModule EmailService emailService

// Get the released version from the associated event
final version = (event as VersionReleaseEvent).version
final project = version.project
//Name of the template to use
final templateName = "Release Notes"
//Role send notification to
final projectRoleToNotify = 'Administrators'

//Get reference to Jira API
def projectRoleManager = ComponentAccessor.getComponent(ProjectRoleManager)
def issueManager = ComponentAccessor.issueManager
def user = ComponentAccessor.jiraAuthenticationContext.loggedInUser
def searchService = ComponentAccessor.getComponent(SearchService)

// Determine the project role members to send email to
def projectRole = projectRoleManager.getProjectRole(projectRoleToNotify)
def recipientsTo = projectRoleManager.getProjectRoleActors(projectRole, project).users*.emailAddress

// Find issues for the version being released
def jqlString = "fixVersion = ${version.id} ORDER BY issuetype, priority DESC, key ASC"
def parseResult = searchService.parseQuery(user, jqlString)
if (!parseResult.valid) {
    log.error("Invalid JQL: ${jqlString}")
    return
}

def searchResult = searchService.search(user, parseResult.query, PagerFilter.unlimitedFilter)
def issuesInVersion = searchResult.results.collect { issueManager.getIssueObject(it.id) }

// Compose parameters for Email This Issue
def email = new EmailDefinitionApi()
email.to = recipientsTo
email.emailOptions = new EmailOptions()
email.emailOptions.emailFormat = 'html'
email.emailTemplate = templateName

// Payload is a key-value pair to populate email templates
def payload = [issues: issuesInVersion, version: version]
email.payload = payload

// Send the email
try {
    emailService.sendEmail(email)
} catch (Exception e) {
    log.error("An exception was thrown: ${e.message}")
}
Having an issue with this script?
Report it here