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")