Hi
I need to force developer to create a pull request if they have some changes on code. I need a validator or post function to check the issues if it has any related commits and based on that ask(if validator) for PR creation or open PR creation form (if Post Function) during issue transition.
Are there any plugin or workarounds to achieve this?
Hi Ansar,
I have written own validator learn tutorial from Atlassian Developer site.
@JiraComponent public class CommitValidator implements Validator { private final ValidatorUtils validatorUtils; private final I18nHelper i18n; private final WorkflowActionsBean workflowActionsBean = new WorkflowActionsBean(); private static Logger log = LoggerFactory.getLogger("ru.team365.jira.plugins.jira.workflow.validator"); @Inject public CommitValidator(ValidatorUtils validatorUtils, @ComponentImport I18nHelper i18n) { this.validatorUtils = validatorUtils; this.i18n = i18n; } public void validate(Map transientVars, Map args, PropertySet propertySet) throws InvalidInputException, WorkflowException { Issue issue = (Issue) transientVars.get("issue"); List<Resolution> protectedResolutions = validatorUtils.getResolutions(args); SearchService searchService = ComponentAccessor.getComponent(SearchService.class); User user = ComponentAccessor.getJiraAuthenticationContext().getUser().getDirectoryUser(); String jqlQuery = String.format("issue in (%s) AND issue.property[development].commits > 0", issue.getKey()); SearchService.ParseResult parseResult = searchService.parseQuery(user, jqlQuery); long resultsCount = 0; if (parseResult.isValid()) { try { Query query = parseResult.getQuery(); resultsCount = searchService.searchCount(user, query); if (protectedResolutions.contains(issue.getResolutionObject())) { if (resultsCount == 0) { throw getException(transientVars, IssueFieldConstants.RESOLUTION, "commit-validator.missing.commits"); } } } catch (SearchException e) { log.error("Error running search", e); } } else { log.warn("Error parsing jqlQuery: " + parseResult.getErrors()); } } private InvalidInputException getException(Map transientVars, String field, String key) { InvalidInputException invalidInputException = new InvalidInputException(); if (isFieldOnScreen(transientVars, field)) { invalidInputException.addError(field, i18n.getText(key)); } else { invalidInputException.addError(i18n.getText(key)); } return invalidInputException; } private boolean isFieldOnScreen(Map transientVars, String field) { if (transientVars.containsKey("descriptor") && transientVars.containsKey("actionId")) { WorkflowDescriptor workflowDescriptor = (WorkflowDescriptor) transientVars.get("descriptor"); Integer actionId = (Integer) transientVars.get("actionId"); ActionDescriptor actionDescriptor = workflowDescriptor.getAction(actionId.intValue()); FieldScreen fieldScreen = workflowActionsBean.getFieldScreenForView(actionDescriptor); if (fieldScreen != null) { for (FieldScreenTab tab : fieldScreen.getTabs()) { for (FieldScreenLayoutItem fieldScreenLayoutItem : tab.getFieldScreenLayoutItems()) { if (field.equals(fieldScreenLayoutItem.getFieldId())) { return true; } } } } } return false; } }
Now, it works.
Hi Gonchik
Thanks for your comment, Can you provide more information about it? I'm not familiar enough with scripting in Atlassian products, so I can't resolve errors like this:
The script could not be compiled: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script6.groovy: 1: unable to resolve class Validator @ line 1, column 1. @JiraComponent
Which Validator should I use for runnig this?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Sorry, for my miscommunication.
This is some java plugin not groovy script.
I have used this tutorial http://jiradev.com/workflow-validator.html
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.