Modify Jira Workflow condition "No Open Reviews" maybe using scriptRunner?

Brent Webster
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
August 7, 2014

I have Jira 5.2.11 integrated with Crucible 3.0.3 but I want to enforce the process that a Jira workflow transition will not be available unless there is at least one review associated/linked with the Jira issues and all linked reviews must be closed. I know about the two builtin conditions:

1/ "No Open Reviews" condition but the condition won't failed if no reviews are linked to the Jira issue.

2/ "Unreviewed Code" condition doesn't help because I allow for patch files to be used not just changesets.

I'm familiar with writing groovy scripts with scriptRunner so I just wanted to find the original Atlassian source code for this condition. I downloaded the 5.2.11 source zip file from MyAtlassian account but had no luck finding(greping) the source code.

A // Does that source zip contain all the source or do I download other associated zip files?

B // If someone else has a similar groovy script that can extract the reviews associated with a jira issue then that would be great.

Thanks Brent

1 answer

1 accepted

2 votes
Answer accepted
Brent Webster
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
August 21, 2014

My solution as a workflow validator:

// Validator will check that at least one review is associated with this issue
// and all this issue's associated reviews must be closed.
import com.atlassian.jira.ComponentManager;
import com.atlassian.plugin.PluginAccessor

ComponentManager componentManager = ComponentManager.getInstance();
PluginAccessor pluginAccessor = componentManager.getPluginAccessor();
Class reviewManagerClass = pluginAccessor.getClassLoader().findClass("com.atlassian.jirafisheyeplugin.domain.crucible.ReviewManager");
Class reviewListClass = pluginAccessor.getClassLoader().findClass("com.atlassian.jirafisheyeplugin.domain.crucible.ReviewList");
Class reviewClass = pluginAccessor.getClassLoader().findClass("com.atlassian.jirafisheyeplugin.domain.crucible.Review");

def reviewManager = componentManager.getOSGiComponentInstanceOfType(reviewManagerClass);
def list = reviewManager.getReviewsForIssue(issue);
if (list.hasErrors()) {
  log.error("<<BW>> Error retrieving reviews for ReviewsCompleteCondition (" + issue.getKey() + ").");
  return false;
} else if ( list.getReviews().isEmpty() ) {
  return false;
} else {
  for (def review : list.getReviews()) {
    if (review.isOpen()) {
      // all reviews must be closed
      return false;
    }
  }
}
return true;

Janos-Andras Fekete-Novak March 28, 2016

This solution doesn't work with JIRA 7. (No JiraFisheye plugin)

Do you have any solution that would work with the JIRA Development Integration plugin? Thanks!

Suggest an answer

Log in or Sign up to answer