0

I have a Board named ASDF, In that board under Relaeses tab I have a Version named: QWER. This version has 3 issues.

I want to change the status of the version to "Released" if all the issues are in "done" state. I don't know how to change the status to "Released".

I am trying to do this using JIRA-Python REST-API. I am also open to CLI method.

gowtham
  • 27
  • 7

1 Answers1

0

The best method for accomplishing this would be via the Jira Automation Plugin. Keep in mind I have no affiliation with this plugin; However, I do have experience using it, and it would suit this purpose perfectly. On to the python-jira solution, keep in mind this will be much more difficult. First you must check that all issues are done, this can be done via:

def version_count_unresolved_issues(self, id):
        """Get the number of unresolved issues for a version.

        :param id: ID of the version to count issues for
        """
        return self._get_json('version/' + id + '/unresolvedIssueCount')['issuesUnresolvedCount']

So we check via some conditional as follows:

if not jira.version_count_unresolved_issues('QWER'):
    jira.move_version(...)

The move_version function looks like:

def move_version(self, id, after=None, position=None):
        """Move a version within a project's ordered version list and return a new version Resource for it.

        One, but not both, of ``after`` and ``position`` must be specified.

        :param id: ID of the version to move
        :param after: the self attribute of a version to place the specified version after (that is, higher in the list)
        :param position: the absolute position to move this version to: must be one of ``First``, ``Last``,
            ``Earlier``, or ``Later``
        """
        data = {}
        if after is not None:
            data['after'] = after
        elif position is not None:
            data['position'] = position

        url = self._get_url('version/' + id + '/move')
        r = self._session.post(
            url, data=json.dumps(data))

        version = Version(self._options, self._session, raw=json_loads(r))
        return version

Regarding your comment take a look at this excerpt from the docs:

from jira import JIRA
import re

# By default, the client will connect to a JIRA instance started from the Atlassian Plugin SDK
# (see https://developer.atlassian.com/display/DOCS/Installing+the+Atlassian+Plugin+SDK for details).
# Override this with the options parameter.
options = {
    'server': 'https://jira.atlassian.com'}
jira = JIRA(options)

You don't pass self anywhere, you simply call the jira instance's functions like so:

jira.version_count_unresolved_issues('QWER')

You don't pass self at all, the jira instance is automatically passed as self behind the scenes, please take a look at the python-jira docs for more information: https://jira.readthedocs.io/en/master/examples.html

Philip DiSarro
  • 1,007
  • 6
  • 9
  • I would like to know what should be passed as an argument for "self". – gowtham Sep 03 '18 at 14:14
  • @gowtham That is a basic principle of Python. You don't explicitly pass `self`, you simply call it on the Jira object. – Philip DiSarro Sep 03 '18 at 20:59
  • I have completed the process of moving the unresolved issues, But i could not understand the actual meaning behind the **after=None, position=None** in the move_version. Can you tell me what the parameters mean by. – gowtham Oct 11 '18 at 15:59