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

Subscribers

People subscribed via source and target branches

to status/vote changes: