Merge lp:~clint-fewbar/pyjuju/add-release-tool into lp:pyjuju

Proposed by Clint Byrum
Status: Needs review
Proposed branch: lp:~clint-fewbar/pyjuju/add-release-tool
Merge into: lp:pyjuju
Diff against target: 116 lines (+106/-0)
2 files modified
misc/release/release-checklist.txt (+15/-0)
misc/release/release-milestone (+91/-0)
To merge this branch: bzr merge lp:~clint-fewbar/pyjuju/add-release-tool
Reviewer Review Type Date Requested Status
Juju Engineering Pending
Review via email: mp+127095@code.launchpad.net

Description of the change

Release tool and checklist to smooth the release

Release tool and checklist to smooth the release process

https://codereview.appspot.com/6590043/

To post a comment you must log in.
Revision history for this message
Clint Byrum (clint-fewbar) wrote :

Reviewers: mp+127095_code.launchpad.net,

Message:
Please take a look.

Description:
Release tool and checklist to smooth the release

Release tool and checklist to smooth the release process

https://code.launchpad.net/~clint-fewbar/juju/add-release-tool/+merge/127095

(do not edit description out of merge proposal)

Please review this at https://codereview.appspot.com/6590043/

Affected files:
   A [revision details]
   A misc/release/release-checklist.txt
   A misc/release/release-milestone

584. By Clint Byrum

fix to work with releases from trunk

Revision history for this message
Kapil Thangavelu (hazmat) wrote :

Unmerged revisions

584. By Clint Byrum

fix to work with releases from trunk

583. By Clint Byrum

add listing to unreleased milestone

582. By Clint Byrum

Adding release checklist and helper tool

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory 'misc/release'
=== added file 'misc/release/release-checklist.txt'
--- misc/release/release-checklist.txt 1970-01-01 00:00:00 +0000
+++ misc/release/release-checklist.txt 2012-10-09 18:59:59 +0000
@@ -0,0 +1,15 @@
1series branch == lp:juju for trunk releases, lp:juju/$series for stable branch releases
2series ppa == ppa:juju/$series even for trunk releases.
3beeeeer, recommend DogFishHead 60 Minute IPA
4
5[] bump version to New Version in PPA recipe.
6[] bump version to New Version in local checkout of series branch
7[] create New Version tarball
8[] push New Version to series branch
9[] start series ppa builds
10[] create release from milestone in launchpad
11[] run release-milestone $SERIES $MILESTONE --fix-release to close bugs
12[] upload New Version tarball
13[] *TEST*
14[] announce release to appropriate mailing lists
15[] beeeeer..
016
=== added file 'misc/release/release-milestone'
--- misc/release/release-milestone 1970-01-01 00:00:00 +0000
+++ misc/release/release-milestone 2012-10-09 18:59:59 +0000
@@ -0,0 +1,91 @@
1#!/usr/bin/python
2
3import sys
4import argparse
5
6from launchpadlib.launchpad import Launchpad
7
8PROJECT = 'juju'
9INCOMPLETE_STATUSES = [
10 'New',
11 'In Progress',
12 'Confirmed',
13 'Triaged',
14 'Incomplete',
15 ]
16
17
18def handle_tasks(tasks, new_status=None):
19 total = 0
20 for task in tasks:
21 total += 1
22 if new_status:
23 task.status = new_status
24 task.lp_save()
25 print ' %9s (%s): %s' % (task.bug.id, task.status, task.title)
26 return total
27
28
29def main(argv):
30 """ Tool to aid in releasing a milestone of juju """
31
32 parser = argparse.ArgumentParser(description=main.__doc__)
33 parser.add_argument('series',
34 help='series to restrict to')
35 parser.add_argument('milestone',
36 help='milestone or release to handle')
37 parser.add_argument('--fix-release', action='store_true', default=False,
38 help='ensure released bug tasks are marked as such')
39
40 args = parser.parse_args(argv[1:])
41
42 lp = Launchpad.login_with(application_name='Juju Release Updater',
43 launchpadlib_dir='~/.launchpadlib',
44 version='devel',
45 service_root='https://api.launchpad.net/')
46 project = lp.projects[PROJECT]
47 series = project.getSeries(name=args.series)
48 milestone = project.getMilestone(name=args.milestone)
49 release = project.getRelease(version=args.milestone)
50 print 'Series: %s (%s)' % (args.series, series.summary)
51 print 'Milestone: %s (%s) [%s]' % (args.milestone,
52 milestone.title,
53 milestone.date_targeted)
54 if release:
55 print 'Release: %s (%s) [%s]' % (args.milestone,
56 release.display_name,
57 release.date_released)
58 if series.self_link == project.development_focus_link:
59 searchobjs = [project, series]
60 else:
61 searchobjs = [series]
62 total = 0
63 for search_obj in searchobjs:
64 committed_tasks = search_obj.searchTasks(
65 status=['Fix Committed'], milestone=milestone)
66
67 new_status=None
68 if args.fix_release:
69 new_status = 'Fix Released'
70
71 total += handle_tasks(committed_tasks, new_status)
72 if args.fix_release:
73 print ' %d committed bugs marked Fix Released.' % (total)
74 else:
75 print (' %d committed bugs should be moved to Fix Released'
76 % (total))
77 elif args.fix_release:
78 print 'Milestone has not been released, cannot fix!'
79 return 1
80 else:
81 all_tasks = project.searchTasks(status=INCOMPLETE_STATUSES,
82 milestone=milestone)
83 print (' %d bugs need work' % (handle_tasks(all_tasks)))
84 return 0
85
86if __name__ == '__main__':
87 try:
88 sys.exit(main(sys.argv))
89 except RuntimeError, e:
90 print e
91 sys.exit(1)

Subscribers

People subscribed via source and target branches

to status/vote changes: