geoserver

Форк
0
/
jira_release.py 
129 строк · 3.9 Кб
1
import sys, optparse, getpass
2
import SOAPpy, SOAPpy.Types
3

4
class JIRA(object):
5

6
  def __init__(self, jira_host, proj, user, passwd):
7
    self.proj = proj
8
    self.soap = SOAPpy.WSDL.Proxy(
9
      '%s/rpc/soap/jirasoapservice-v2?wsdl'%jira_host)
10
    self.auth = self.soap.login(user, passwd)
11

12

13
  def list_methods(self):
14
    for m in self.soap.methods.keys():
15
      print m
16
  
17
  def describe_method(self, name):
18
     m = self.soap.methods[name]
19
     for p in m.inparams:
20
       print p.name.ljust(10), p.type 
21

22
  def list_versions(self):
23
    versions = self.soap.getVersions(self.auth, self.proj)
24
    return [v.name for v in versions]
25

26
  def is_version_released(self, name):
27
    versions = self.soap.getVersions(self.auth, self.proj)
28
    for v in versions:
29
       if v.name == name:
30
         return v.released
31
   
32
  def get_version_id(self, name):
33
    """
34
    Return the id for a named version, returning None if no such version exists.
35
    """
36
    versions = self.soap.getVersions(self.auth, self.proj)
37
    for v in versions:
38
       if v.name == name:
39
         return v.id
40
   
41
  def create_version(self, name):
42
    """
43
    Creates a new version with the specified name.
44
    """
45
    self.soap.addVersion(self.auth, self.proj, {'name': name})
46

47
  def get_open_issues(self, ver_name):
48
    """
49
    Returns keys for unresolved/open issues for the specified version name.
50
    """
51
    jql = 'project = %s and status in (Open, "In Progress", Reopened) and fixVersion = "%s"' % (self.proj, ver_name)
52
    n = SOAPpy.Types.intType(500)
53
    issues = self.soap.getIssuesFromJqlSearch(self.auth, jql, n)
54
    return [i.key for i in issues]
55
      
56
  def set_fixed_version(self, issue, ver_name):
57
    """
58
    Sets the fixVersion for an issue
59
    """
60
    ver_id = self.get_version_id(ver_name)
61
    if ver_id:
62
      self.soap.updateIssue(self.auth, issue, 
63
       [{'id': 'fixVersions', 'values': [ver_id]}])
64

65
  def release_version(self, ver_name):
66
     self.soap.releaseVersion(self.auth, self.proj,
67
       {'name': ver_name, "released": True})
68

69
if __name__ == "__main__":
70
  
71
  p = optparse.OptionParser('Usage: %prog [options] version next_version')
72
  p.add_option('-j', '--host', dest='host', default='https://osgeo-org.atlassian.net', 
73
    help='JIRA host, default is atlassian') 
74
  p.add_option('-k', '--key', dest='key', default='GEOS',
75
    help='JIRA project key, default is GEOS') 
76
  p.add_option('-u', '--user', dest='user', default=getpass.getuser(), 
77
    help='JIRA user, default is current OS user')
78
  p.add_option('-p', '--passwd', dest='passwd', 
79
    help='JIRA password')
80
  p.add_option('-v', '--verbose', dest='verbose', action='store_true',
81
    help='Verbose flag')
82

83
  opts, args = p.parse_args()
84
  if len(args) < 2:
85
     p.error('Must specify version to release and next version')
86

87
  opts = vars(opts)
88
  jira = JIRA(opts['host'], opts['key'], opts['user'], opts['passwd'])
89

90
  verbose = opts['verbose']
91
  ver = args[0]
92
  next_ver = args[1]  
93

94
  ver_id = jira.get_version_id(ver)
95
  if not ver_id:
96
     sys.exit('Version %s does not exist in JIRA' % ver)
97

98
  if jira.is_version_released(ver) == True:
99
     print 'Version %s is already released in JIRA, exiting' % ver
100
     sys.exit(0)
101

102
  if not jira.get_version_id(next_ver): 
103
     # create id
104
     print 'creating version %s in JIRA' % next_ver
105
     jira.create_version(next_ver)
106

107
  if not jira.get_version_id(next_ver):
108
     sys.exit('Unable to create version %s in JIRA' % next_ver)
109

110
  # move over all open issues from old to new
111
  x = 0
112
  while x < 100:
113
    issues = jira.get_open_issues(ver)
114
    if len(issues) == 0:
115
      break
116

117
    for i in jira.get_open_issues(ver):
118
       if verbose == True:
119
         print 'Setting fix version of %s to %s' % (i, next_ver)
120
       jira.set_fixed_version(i, next_ver)
121
    x += 1
122

123
  # check all versions were moved
124
  if len(jira.get_open_issues(ver)) > 0:
125
    sys.exit('Unable to move back all issues to version %s' % next_ver)
126

127
  # mark the version as released
128
  print 'Releasing %s (%s) in JIRA' % (ver, ver_id)
129
  jira.release_version(ver) 
130

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.