2 # Moshe -- This seems like 30+ minutes to me!
3 from slides import NumSlide, Slide, Bullet, SubBullet, PRE, URL
4 from twslides import Lecture
8 "Managing the Release of a Large Python Project",
10 Bullet("Networking framework"),
11 Bullet("Other goodies"),
12 Bullet("60,000 lines of code"),
13 Bullet("Things can (and do) go wrong"),
17 Bullet("No compilation (except for native modules)"),
18 Bullet("Simple file-based modules (no registration)"),
19 Bullet("Distutils -- Does the common things"),
21 Slide("Release Procedure -- Steps",
22 Bullet("Increment version in copyright file, README"),
23 Bullet("Tag release"),
24 Bullet("Export from CVS"),
25 Bullet("Rename toplevel directory"),
26 Bullet("Generate API and HOWTO documentation"),
27 Bullet("Create tarballs"),
28 Bullet("Move tarballs to target area"),
29 Bullet("Create Debian packages"),
30 Bullet("Put Debian packages in final place"),
31 Bullet("Upgrade production machine"),
33 Slide("Release Procedure Overview - Documentation",
34 Bullet("Man pages -> Lore"),
35 Bullet("Lore documents -> HTML"),
36 Bullet("Lore documents -> PS/PDF"),
37 Bullet("API documentation -> HTML"),
39 Slide("Release Procedure Overview - Testing",
40 Bullet("Run of the mill unit tests"),
41 Bullet("Acceptance tests of less portable things"),
42 Bullet("Prerelease tests for twistedmatrix.com-specific test"),
43 Bullet("twistedmatrix.com uses latest version -- always!"),
45 Slide("Release Procedure Overview - Debian",
46 Bullet("The Twisted machines use Debian packages"),
47 Bullet("The Twisted machines run latest version"),
48 Bullet("Debian packages are built as part of the release procedure"),
50 Slide("Overview Summary",
52 Bullet("Each can fail", SubBullet(
53 Bullet("Documentation can fail to build"),
54 Bullet("Tests can fail"),
55 Bullet("Debian packages can fail to build")),
57 Bullet("Need robust automated setup"),
59 Slide("Enter Release-Twisted",
60 Bullet("Python program to release Twisted"),
61 Bullet("Key word -- Robust"),
62 Bullet("Based on actions which can undo"),
63 Bullet("Flexible - able to recover a botched build from the middle"),
64 Bullet("Easy - has good defaults"),
66 Slide("Testing - Recap",
67 Bullet("Testing is special - no effect"),
68 Bullet("The more, the better"),
69 Bullet("Harder to automate - machines can't tell right from wrong",
70 SubBullet(Bullet("Except in Hollywood")),
73 Slide("Different Kinds of Tests - Unit Tests",
74 Bullet("Completely automated"),
75 Bullet("Completely machine-verifiable"),
77 Bullet("Must always pass"),
79 Slide("Different Kinds of Tests - Acceptance Tests",
80 Bullet("Interacts with user"),
81 Bullet("Probably works only on Linux"),
82 Bullet("Assumes many client side tools"),
83 Bullet("Exercises many parts of Twisted which are hard in unit tests"),
85 Slide("Acceptance Tests Examples",
86 Bullet("Run Twisted web server, run user-defined web browser"),
87 Bullet("Run mail server, send mail and try to download with pop3"),
88 Bullet("Run IRC server, run user-defined IRC client"),
90 Slide("Different Kinds of Tests - Prerelease Tests",
91 Bullet("TwistedMatrix.com dogfoods"),
92 Bullet("We want to test the dog food"),
93 Bullet("prerelease tests convince us that this version doesn't break "
95 Bullet("Among other things, tests that distributed web works"),
101 Slide("Distutils -- Datafiles",
103 Slide("Distutils -- Conditional compilation",
105 Slide("Distutils -- Conditional compilation woes",
107 Slide("Distutils -- Other woes",
108 Bullet("Versions -- keywords were added later"),
109 Bullet("Icky to do platform dependent stuff"),
111 Slide("release-twistd -- master script",
113 Slide("Commit/rollback",
115 Slide("CVS and tagging",
117 Slide("Debian Packages -- Challenges",
118 Bullet("Versioning: We want 1.0.2alpha4 to precede 1.0.2"),
119 Bullet("Dependencies: Which versions of Python? 2.1? 2.2? 2.3?"),
120 Bullet("Dependencies: Which libc version?"),
122 Slide("Debian Packages -- Solutions",
123 Bullet("Build two sets -- for Debian stable and for Debian unstable"),
124 Bullet("When building on stable, remove python2.3-dev from build"
125 " dependencies", SubBullet(
126 Bullet("This stops the Python 2.3 version from being built")),
128 Bullet("If building a non-final version, name it 1.0.1+1.0.2alpha4"),
129 Bullet("Unstable build is done by sshing into an unstable chroot"),
131 Slide("Windows Releases -- Challenges",
133 Slide("Windows Releases -- Solutions",
135 Slide("Why Not Dependency Management?",
138 Bullet("Distutils does not do enough"),
139 Bullet("Cross compiling is hard"),
140 Bullet("It would be nice if Python had integrated docstring tools"),
141 Bullet("Wheel reinvention is useful"),
143 Slide("Future Directions",
144 Bullet("RPMs for Various Distributions"),
145 Bullet("More automation"),
151 lecture.renderHTML(".", "releasing-%d.html", css="main.css")