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

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

Accepted Answer
2 votes

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;

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
Community showcase
Posted Tuesday in Jira

Looking for anyone who made the switch to Data Center

The Jira Marketing team is putting together an ebook on migrating to Data Center. We're looking for pro tips on how you staffed your project team and organized your Proof of Concept. Share yo...

25 views 0 2
Join discussion

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you