is there a way to close an Epic (or a Story) when all linked issue are closed?
Please suggest
Hi Vashim,
You can use Automation for Jira addon: https://marketplace.atlassian.com/apps/1215460/automation-for-jira?hosting=server&tab=overview
Hi @vashim shekh,
If you have scriptrunner plugin already, then below script will work for you
import com.atlassian.jira.ComponentManager;import com.atlassian.jira.component.ComponentAccessor;import com.atlassian.jira.issue.CustomFieldManager;import com.atlassian.jira.issue.fields.CustomField;import com.atlassian.jira.issue.IssueManager;import com.atlassian.jira.issue.MutableIssue;import com.atlassian.jira.issue.Issue; import com.atlassian.jira.user.ApplicationUser;import com.atlassian.jira.bc.issue.IssueServiceimport com.atlassian.jira.component.ComponentAccessorimport com.atlassian.jira.bc.issue.search.SearchServiceimport com.atlassian.jira.issue.IssueInputParametersImplimport com.atlassian.jira.web.bean.PagerFilterdef currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()def issueManager = ComponentAccessor.issueManagerIssueService issueService = ComponentAccessor.getIssueService()def linkManager = ComponentAccessor.getIssueLinkManager()def searchService = ComponentAccessor.getComponent(SearchService.class)def actionId = 41 // change this to the step that you want the issues to be transitioned todef transitionValidationResultdef transitionResultdef epicLink = ComponentAccessor.customFieldManager.getCustomFieldObjectByName("Epic Link")def epic = issue.getCustomFieldValue(epicLink) as Stringif(epic){ def issueE = issueManager.getIssueObject(epic); def jqlSearch = "\"Epic Link\" = ${issueE.key}" def allDone = true SearchService.ParseResult parseResult = searchService.parseQuery(currentUser, jqlSearch) if (parseResult.isValid()) { def searchResult = searchService.search(currentUser, parseResult.getQuery(), PagerFilter.getUnlimitedFilter()) def issues = searchResult.issues.collect {issueManager.getIssueObject(it.id)} issues.each { i -> if (i.getResolution().name == 'Unresolved'){ allDone = false } } } if(issueE.getStatus().name != "Done" && allDone) { transitionValidationResult = issueService.validateTransition(currentUser, issueE.id, actionId,new IssueInputParametersImpl()) if (transitionValidationResult.isValid()) { transitionResult = issueService.transition(currentUser, transitionValidationResult) if (transitionResult.isValid()) { log.warn("Transitioned issue $issue through action $actionId") } else { log.warn("Transition result is not valid") } }else{ log.warn("The transitionValidation is not valid") } }}
BR,Leo
It looks like you're new here. Sign in or register to get started.