2001-08-22 18:43:42 -04:00
|
|
|
|
PEP: 101
|
|
|
|
|
Title: Doing Python Releases 101
|
|
|
|
|
Version: $Revision$
|
|
|
|
|
Last-Modified: $Date$
|
2008-01-17 19:31:21 -05:00
|
|
|
|
Author: barry@python.org (Barry A. Warsaw), guido@python.org (Guido van Rossum)
|
2001-08-22 18:43:42 -04:00
|
|
|
|
Status: Active
|
|
|
|
|
Type: Informational
|
|
|
|
|
Created: 22-Aug-2001
|
|
|
|
|
Post-History:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Abstract
|
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Making a Python release is a thrilling and crazy process. You've heard
|
|
|
|
|
the expression "herding cats"? Imagine trying to also saddle those
|
|
|
|
|
purring little creatures up, and ride them into town, with some of their
|
|
|
|
|
buddies firmly attached to your bare back, anchored by newly sharpened
|
|
|
|
|
claws. At least they're cute, you remind yourself.
|
|
|
|
|
|
|
|
|
|
Actually, no that's a slight <wink> exaggeration. The Python release
|
|
|
|
|
process has steadily improved over the years and now, with the help of our
|
|
|
|
|
amazing community, is really not to difficult. This PEP attempts to
|
|
|
|
|
collect, in one place, all the steps needed to make a Python release. It
|
|
|
|
|
is organized as a recipe and you can actually print this out and check
|
|
|
|
|
items off as you complete them.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
How to Make A Release
|
|
|
|
|
|
|
|
|
|
Here are the steps taken to make a Python release. Some steps are
|
|
|
|
|
more fuzzy than others because there's little that can be
|
|
|
|
|
automated (e.g. writing the NEWS entries). Where a step is
|
2008-01-17 19:31:21 -05:00
|
|
|
|
usually performed by An Expert, the role of that expert is given.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
Otherwise, assume the step is done by the Release Manager (RM),
|
2008-01-17 19:31:21 -05:00
|
|
|
|
the designated person performing the release. The roles and their
|
2008-05-08 19:52:56 -04:00
|
|
|
|
current experts are:
|
2008-01-17 19:31:21 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
* RM = Release Manager: Barry Warsaw
|
2008-01-17 19:31:21 -05:00
|
|
|
|
* WE = Windows: Martin von Loewis
|
|
|
|
|
* ME = Mac: Ronald Oussoren
|
|
|
|
|
* DE = Documentation: Fred Drake
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
|
|
|
|
XXX: We should include a dependency graph to illustrate the steps
|
|
|
|
|
that can be taken in parallel, or those that depend on other
|
|
|
|
|
steps.
|
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
As much as possible, the release steps are automated and guided by the
|
|
|
|
|
release script, which is available in the Python sandbox. The release
|
|
|
|
|
script is currently being maintained by the RM:
|
|
|
|
|
|
|
|
|
|
http://svn.python.org/view/sandbox/trunk/release/
|
|
|
|
|
|
2001-08-22 18:43:42 -04:00
|
|
|
|
We use the following conventions in the examples below. Where a
|
2008-01-17 19:31:21 -05:00
|
|
|
|
release number is given, it is of the form X.YaZ, e.g. 2.6a3 for
|
|
|
|
|
Python 2.6 alpha 3, where "a" == alpha, "b" == beta, "c" ==
|
2003-07-31 10:21:07 -04:00
|
|
|
|
release candidate.
|
|
|
|
|
|
|
|
|
|
Final releases are named "releaseXY". The branch tag is
|
|
|
|
|
"releaseXY-maint" because this will point to the long lived
|
|
|
|
|
maintenance branch. The fork tag on the trunk is
|
2001-12-21 15:47:12 -05:00
|
|
|
|
"releaseXY-fork". If a micro release number is used, then we'll
|
|
|
|
|
say X.Y.MaZ.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-04-03 21:19:32 -04:00
|
|
|
|
This helps by performing several automatic editing steps, and guides you
|
|
|
|
|
to perform some manual editing steps.
|
2008-02-21 07:00:38 -05:00
|
|
|
|
|
2003-07-24 22:34:02 -04:00
|
|
|
|
___ Impose a check-in freeze. Send a message to
|
2008-05-08 19:52:56 -04:00
|
|
|
|
python-dev@python.org (Py3: and python-3000@python.org) telling people
|
|
|
|
|
not to make any check-ins on the tree until further notice.
|
|
|
|
|
|
|
|
|
|
At this point, nobody except the RM or his duly assigned agents should
|
|
|
|
|
make any commits to the branches. The assigned agents are either from
|
|
|
|
|
the list above or by coordination as necessary. If a checkin needs to
|
|
|
|
|
be made, make sure to state in the checkin comment that the change was
|
|
|
|
|
approved. If the RM screwed up and some desperate last minute change to
|
|
|
|
|
the branch is necessary, it can mean extra work for others. So try to
|
|
|
|
|
avoid this!
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
The RM has full authority to revert any unapproved commits.
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
|
|
|
|
___ Log into irc.freenode.net and join the #python-dev channel.
|
|
|
|
|
|
|
|
|
|
You probably need to coordinate with other people around the
|
|
|
|
|
world. This IRC channel is where we've arranged to meet.
|
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Check to see if there are any showstopper bugs.
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Go to http://bugs.python.org and look for any open bugs that can block
|
|
|
|
|
this release. You're looking at the Priority of the open bugs for the
|
|
|
|
|
release you're making; here are the relevant definitions:
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
release blocker - Stops the release dead in its tracks. You may not
|
|
|
|
|
make a release with any open blocker bugs.
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
critical - Important bugs that may become blockers for the next
|
|
|
|
|
release. You can make alpha and beta releases with open critical
|
|
|
|
|
bugs, but you may not make a final release with open critical bugs.
|
2003-12-04 19:45:14 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Review the release blockers and either resolve them, bump them down to
|
|
|
|
|
critical, or stop the release and ask for community assistance. If
|
|
|
|
|
you're making a final release, do the same with any open crticial bugs.
|
2005-09-28 00:21:36 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Check the stable buildbots.
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Go to http://www.python.org/dev/buildbot/stable/
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
(the trailing slash is required). Look at the buildbots for the release
|
|
|
|
|
you're making. Ignore any that are offline (or inform the community so
|
|
|
|
|
they can be restarted). If what remains are green buildbots, you're
|
|
|
|
|
good to go. If you have non-offline red buildbots, you may want to hold
|
|
|
|
|
up the release until they are fixed. Review the problems and use your
|
|
|
|
|
judgement, taking into account whether you are making an alpha, beta, or
|
|
|
|
|
final release.
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Bump version numbers via the release script.
|
2001-09-07 14:58:47 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
.../sandbox/release/release.py --bump X.YaZ
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
This automates updating various release numbers, but you will have to
|
|
|
|
|
modify a few files manually. If your $EDITOR environment variable is
|
|
|
|
|
set up correctly, release.py will pop up editor windows with the files
|
|
|
|
|
you need to edit.
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Most importantly is to update the Misc/NEWS file, however in recent
|
|
|
|
|
years, this has become easier as the community is responsible for most
|
|
|
|
|
of the content of this file. You should only need to review the text
|
|
|
|
|
for sanity, and update the release date with today's date.
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
If the minor (middle) digit of the version number changes, you will be
|
|
|
|
|
prompted to update some additional files:
|
2008-03-01 13:36:30 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ The LICENSE file. Add the pending version to the list of releases,
|
|
|
|
|
and be sure to check the release dates.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ There's a copy of the license in Doc/license.rst; the DE usually
|
|
|
|
|
takes care of that, but it's good to double check this.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Doc/tutorial/interpreter.rst (3 references to '[Pp]ython26', one
|
|
|
|
|
to 'Python 2.6').
|
2001-09-07 14:58:47 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Doc/tutorial/stdlib.rst and Doc/tutorial/stdlib2.rst, which have
|
|
|
|
|
each one reference to '[Pp]ython26'.
|
2001-09-07 14:58:47 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Check the years on the copyright notice. If the last release
|
|
|
|
|
was some time last year, add the current year to the copyright
|
|
|
|
|
notice in several places:
|
2003-09-21 21:11:35 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ README
|
|
|
|
|
___ LICENSE (make sure to change on trunk and the branch)
|
|
|
|
|
___ Python/getcopyright.c
|
|
|
|
|
___ Doc/README.txt (at the end)
|
|
|
|
|
___ Doc/copyright.rst
|
|
|
|
|
___ Doc/license.rst
|
|
|
|
|
___ PC/python_nt.rc sets up the DLL version resource for Windows
|
|
|
|
|
(displayed when you right-click on the DLL and select
|
|
|
|
|
Properties).
|
|
|
|
|
___ The license.ht file for the distribution on the website
|
|
|
|
|
contains what purports to be an HTML-ized copy of the LICENSE
|
|
|
|
|
file from the distribution. BROKEN
|
2003-09-21 21:11:35 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ For major releases (e.g. 2.6 final), move any historical "what's
|
|
|
|
|
new" entries from Misc/NEWS to Misc/HISTORY.
|
2003-09-21 21:11:35 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Check with the IDLE maintainer to be sure that
|
|
|
|
|
Lib/idlelib/NEWS.txt has been similarly updated.
|
2002-01-10 10:41:21 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
(XXX Who is the IE (i.e. Idle Expert)?
|
2002-12-30 20:30:28 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ For a final release, edit the first paragraph of
|
|
|
|
|
Doc/whatsnew/X.Y.rst to include the actual release date; e.g. "Python
|
|
|
|
|
2.5 was released on August 1, 2003." There's no need to edit this for
|
|
|
|
|
alpha or beta releases. Note that Andrew Kuchling often takes care of
|
|
|
|
|
this.
|
2008-01-17 19:31:21 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Tag and/or branch the tree for release X.YaZ
|
2008-01-17 19:31:21 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
If you're releasing an alpha/beta/release candidate, you will just tag
|
|
|
|
|
the tree. If you are releasing a final release, you will both tag the
|
|
|
|
|
trunk and create the long-lived maintenance branch.
|
2008-03-02 01:51:20 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
.../sandbox/release/release.py --tag X.YaZ
|
2002-12-30 20:30:28 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Practically speaking, we tag and branch just before making the
|
|
|
|
|
release. Branching too early causes too much merging work.
|
2003-01-02 11:33:18 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
When making a major release (e.g., for 2.6), you should branch.
|
|
|
|
|
To create a _branch_ (e.g., release26-maint), do the following:
|
2006-02-11 13:28:49 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
.../sandbox/release/release.py --branch X.Y.Z
|
2003-01-02 11:33:18 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ If you just made the release branch, check out a clean version
|
|
|
|
|
into a new directory. You'll be doing a lot of work in this
|
|
|
|
|
directory and you want to keep it straight from your trunk working
|
|
|
|
|
directory. E.g.
|
2006-02-11 13:28:49 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
% svn co \
|
|
|
|
|
svn+ssh://pythondev@svn.python.org/python/branches/release26-maint
|
2003-01-02 12:24:01 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ cd release26-maint # cd into the branch directory.
|
2003-01-02 11:33:18 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ XXX If this is a release candidate, mail Sean <jafo@tummy.com>
|
|
|
|
|
noting the impending release, so that RPMs can be built and tested.
|
2001-10-24 19:18:46 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ XXX At this point, the DE will create the formatted versions of the
|
2003-09-29 23:46:52 -04:00
|
|
|
|
documentation and push the appropriate files out to their FTP
|
|
|
|
|
locations on www.python.org. The HTML format is used to build
|
|
|
|
|
the HTML Help format for the Windows installer, but the RM
|
|
|
|
|
doesn't need this to build the source distribution. The HTML
|
|
|
|
|
Help format will typically be generated by whoever builds the
|
|
|
|
|
Windows installer.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-01-17 19:31:21 -05:00
|
|
|
|
Once the DE is done, there can be no further checkins on the
|
2003-09-29 23:46:52 -04:00
|
|
|
|
branch in the Doc/ directory -- not even by the RM.
|
2001-11-16 16:30:25 -05:00
|
|
|
|
|
2003-09-30 00:35:01 -04:00
|
|
|
|
Building the documentation is done using the Makefile in the
|
2008-03-02 01:51:20 -05:00
|
|
|
|
Doc/ directory. Use these commands to build the formatted
|
|
|
|
|
documentation packages:
|
|
|
|
|
|
|
|
|
|
$ make clean
|
2008-05-08 19:52:56 -04:00
|
|
|
|
$ make distribution
|
2008-03-02 01:51:20 -05:00
|
|
|
|
|
|
|
|
|
The packages in build/distribution can be installed on the
|
|
|
|
|
FTP server using commands like these:
|
|
|
|
|
|
|
|
|
|
$ VERSION=`python tools/sphinxext/patchlevel.py`
|
2006-03-29 01:59:43 -05:00
|
|
|
|
$ TARGET=/data/python-releases/doc/$VERSION
|
|
|
|
|
$ ssh dinsdale.python.org mkdir $TARGET
|
2008-03-02 01:51:20 -05:00
|
|
|
|
$ scp build/distribution/* dinsdale.python.org:$TARGET
|
2003-09-30 00:35:01 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ XXX For final releases, publish the documentation on python.org.
|
2006-10-25 00:15:39 -04:00
|
|
|
|
This must be done by someone with write access to the pydotorg
|
|
|
|
|
repository.
|
2003-10-02 11:39:21 -04:00
|
|
|
|
|
|
|
|
|
Start by creating a new directory and filling it with the
|
|
|
|
|
standard boilerplate. $VERSION is the same as for uploading the
|
|
|
|
|
documentation, above; $OLDVERSION is the most recently published
|
|
|
|
|
version on the site.
|
|
|
|
|
|
|
|
|
|
$ cd .../pydotorg/doc/
|
2006-10-25 00:15:39 -04:00
|
|
|
|
$ svn mkdir $VERSION $VERSION/download
|
2003-10-02 11:39:21 -04:00
|
|
|
|
$ cd $OLDVERSION
|
2006-10-25 00:15:39 -04:00
|
|
|
|
$ svn cp content.{html,rst,yml} index.yml nav.yml ../$VERSION
|
|
|
|
|
$ cd download
|
|
|
|
|
$ svn cp content.{html,rst,yml} index.yml nav.yml ../$VERSION/download
|
|
|
|
|
$ cd ../../$VERSION
|
|
|
|
|
|
|
|
|
|
In $VERSION/content.rst and $VERSION/download/content.rst, change:
|
|
|
|
|
|
|
|
|
|
- in the header at the top of the page, update to reflect
|
|
|
|
|
the version number and release date
|
|
|
|
|
- if the minor release number changed (for example, from 2.5
|
|
|
|
|
to 2.6), the title and link to the "What's New" document
|
|
|
|
|
(search for "whatsnew")
|
|
|
|
|
- make sure all the documents included in the package are listed
|
|
|
|
|
|
|
|
|
|
In $VERSION/index.yml and $VERSION/download/index.yml, change
|
|
|
|
|
the version number in the title.
|
|
|
|
|
|
|
|
|
|
In versions/content.rst, add an entry for the new version near
|
|
|
|
|
the top.
|
|
|
|
|
|
|
|
|
|
Use the "rst2html" command (commonly installed with docutils) to
|
|
|
|
|
ensure that the .rst files can be formatted without errors.
|
2003-10-02 11:39:21 -04:00
|
|
|
|
|
2006-09-22 00:54:25 -04:00
|
|
|
|
Log into dinsdale.python.org using SSH and unpack a copy of the
|
2003-10-02 11:39:21 -04:00
|
|
|
|
documentation into place:
|
|
|
|
|
|
2006-09-22 00:54:25 -04:00
|
|
|
|
# on dinsdale:
|
|
|
|
|
$ cd /data/ftp.python.org/pub/www.python.org/doc
|
|
|
|
|
$ bzip2 -dc /data/python-releases/doc/$VERSION/html-$VERSION.tar.bz2 \
|
|
|
|
|
| tar xf -
|
2003-10-02 11:39:21 -04:00
|
|
|
|
$ mv Python-Docs-$VERSION $VERSION
|
2003-10-06 11:24:25 -04:00
|
|
|
|
$ find $VERSION -type d | xargs chmod g+s
|
2003-10-02 11:39:21 -04:00
|
|
|
|
|
2006-10-25 00:15:39 -04:00
|
|
|
|
Now head back to your pydotorg checkout and commit the changes
|
|
|
|
|
so the site will be updated:
|
2003-10-02 11:39:21 -04:00
|
|
|
|
|
2006-10-25 00:15:39 -04:00
|
|
|
|
$ svn commit -m \
|
|
|
|
|
"Add website content for Python $VERSION documentation."
|
2003-10-02 11:39:21 -04:00
|
|
|
|
|
|
|
|
|
Point your browser at this URL and check it out:
|
|
|
|
|
|
|
|
|
|
http://www.python.org/doc/$VERSION/
|
|
|
|
|
|
2006-10-25 00:15:39 -04:00
|
|
|
|
There is one more change that may need to happen in the
|
|
|
|
|
top-level doc/ directory of the website content. This should
|
|
|
|
|
happen as soon as the release announcement has been made. The
|
|
|
|
|
required actions are described in a separate step of this
|
|
|
|
|
checklist.
|
2003-09-30 00:35:01 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ XXX Ping Neal Norwitz (or anyone else with access to the PSF box
|
2008-01-17 19:31:21 -05:00
|
|
|
|
which runs the automated builds) to fix conflicts that arise
|
|
|
|
|
in the checked out working areas.
|
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ XXX The WE builds the Windows helpfile, using (in Doc/) either
|
|
|
|
|
|
2008-03-02 01:51:20 -05:00
|
|
|
|
$ make htmlhelp (on Unix)
|
|
|
|
|
|
|
|
|
|
or
|
2003-09-30 00:49:33 -04:00
|
|
|
|
|
2008-03-02 01:51:20 -05:00
|
|
|
|
> make.bat htmlhelp (on Windows)
|
2003-09-30 00:49:33 -04:00
|
|
|
|
|
2008-03-02 01:51:20 -05:00
|
|
|
|
to create suitable input for HTML Help Workshop in
|
|
|
|
|
build/htmlhelp. HTML Help Workshop is then fired up on the
|
|
|
|
|
created python26.hhp file, finally resulting in an
|
|
|
|
|
python26.chm file. He then copies the file into the Doc
|
|
|
|
|
directories of the build trees (once for each target architecture).
|
2001-10-24 19:18:46 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ XXX The WE then generates Windows installer files for each Windows
|
|
|
|
|
target architecture (for Python 2.6, this means x86
|
2006-09-10 12:56:11 -04:00
|
|
|
|
and AMD64). He has one checkout tree per target architecture,
|
2008-05-08 19:52:56 -04:00
|
|
|
|
and builds the pcbuild.sln project for the appropriate
|
2006-09-10 12:56:11 -04:00
|
|
|
|
architecture. He then edits Tools/msi/config.py to update
|
2008-05-09 08:28:07 -04:00
|
|
|
|
full_current_version, sets snapshot to False and runs msi.py with
|
|
|
|
|
ActivePython 2.5 or Python 2.5 with pywin32.
|
2006-09-10 12:56:11 -04:00
|
|
|
|
For that to work, the following prerequisites must be met:
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-01-17 19:31:21 -05:00
|
|
|
|
- PC\icons.mak must have been run with nmake.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2006-09-10 12:56:11 -04:00
|
|
|
|
- The cmd.exe window in which this is run must have Cygwin/bin
|
|
|
|
|
in its path (atleast for x86).
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2006-09-10 12:56:11 -04:00
|
|
|
|
- The cmd.exe window must have MS compiler tools for the target
|
|
|
|
|
architecture in its path (VS 2003 for x86, the platform
|
2008-01-17 19:31:21 -05:00
|
|
|
|
SDK for AMD64).
|
2006-09-10 12:56:11 -04:00
|
|
|
|
|
2008-05-09 08:28:07 -04:00
|
|
|
|
- The cmd.exe window must also have cabarc.exe from the CAB SDK
|
|
|
|
|
in its path.
|
|
|
|
|
|
2008-01-17 19:31:21 -05:00
|
|
|
|
The WE checksums the files (*.msi and *.chm), uploads them to
|
2006-10-25 00:15:39 -04:00
|
|
|
|
some place in the net, and emails you the location and md5sums.
|
2001-10-24 19:18:46 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ XXX Sean Reifschneider grabs the HTML and uses this to build the
|
2003-09-21 21:01:46 -04:00
|
|
|
|
Linux RPMs. Sean performs his Red Hat magic, generating a set
|
|
|
|
|
of RPMs. He uploads these files to python.org. He then sends
|
|
|
|
|
the RM a notice which includes the location and MD5 checksum of
|
|
|
|
|
the RPMs.
|
|
|
|
|
|
2003-07-24 22:34:02 -04:00
|
|
|
|
___ Time to build the source tarball. If you created a branch, be
|
|
|
|
|
sure to cd to your working directory for the branch. E.g.
|
2008-05-08 19:52:56 -04:00
|
|
|
|
|
|
|
|
|
% cd .../python-26
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-01-17 19:31:21 -05:00
|
|
|
|
___ Do a "svn update ; svn status" in this directory.
|
2001-10-24 19:18:46 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
You should not see any files. I.e. you better not have any uncommitted
|
|
|
|
|
changes in your working directory, but you may pick up some of the
|
|
|
|
|
expert's last minute changes.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-01-17 19:31:21 -05:00
|
|
|
|
___ If you've seen updates to existing files, update the svn tag:
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
.../sandbox/release/release.py --tag X.YaZ
|
2001-10-24 19:18:46 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Use the release script to create the gzip and bz2 tarballs, md5
|
|
|
|
|
checksums, and gpg signature files.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
.../sandbox/release/release.py --export X.YaZ
|
2003-07-24 22:34:02 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
This will leave all the relevant files in a subdirectory called 'dist'.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2001-10-24 19:18:46 -04:00
|
|
|
|
___ Now you want to perform the very important step of checking the
|
2001-08-22 18:43:42 -04:00
|
|
|
|
tarball you just created, to make sure a completely clean,
|
|
|
|
|
virgin build passes the regression test. Here are the best
|
|
|
|
|
steps to take:
|
|
|
|
|
|
|
|
|
|
% cd /tmp
|
2008-01-17 19:31:21 -05:00
|
|
|
|
% tar zxvf ~/Python-2.6c2.tgz # tar xjvf ~/Python-2.6c2.tar.bz2
|
|
|
|
|
% cd Python-2.6c2
|
2001-08-22 18:43:42 -04:00
|
|
|
|
% ls
|
|
|
|
|
(Do things look reasonable?)
|
|
|
|
|
% ./configure
|
|
|
|
|
(Loads of configure output)
|
|
|
|
|
% make test
|
|
|
|
|
(Do all the expected tests pass?)
|
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
If you're feeling lucky and have some time to kill, or if you are making
|
|
|
|
|
a release candidate or final release, run the full test suite:
|
2003-07-29 19:31:14 -04:00
|
|
|
|
|
|
|
|
|
% make TESTOPTS='-u all' test
|
|
|
|
|
|
2001-08-22 18:43:42 -04:00
|
|
|
|
If the tests pass, then you can feel good that the tarball is
|
2001-10-24 19:18:46 -04:00
|
|
|
|
fine. If some of the tests fail, or anything else about the
|
2001-08-22 18:43:42 -04:00
|
|
|
|
freshly unpacked directory looks weird, you better stop now and
|
|
|
|
|
figure out what the problem is.
|
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ For the extra paranoid, do a completely clean test of the
|
|
|
|
|
release. This includes downloading the tarball from
|
|
|
|
|
www.python.org.
|
|
|
|
|
|
|
|
|
|
___ Make sure the md5 checksums match. Then unpack the tarball,
|
|
|
|
|
and do a clean make test.
|
|
|
|
|
|
|
|
|
|
% make distclean
|
|
|
|
|
% ./configure
|
|
|
|
|
% make test
|
|
|
|
|
|
|
|
|
|
To ensure that the regression test suite passes. If not, you
|
|
|
|
|
screwed up somewhere!
|
|
|
|
|
|
2008-03-01 13:36:30 -05:00
|
|
|
|
___ Upload the tar files to dinsdale.python.org using scp.
|
2003-07-29 19:31:14 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Now we're waiting for the scp to dinsdale to finish. Da de da,
|
|
|
|
|
da de dum, hmm, hmm, dum de dum.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Now you need to go to dinsdale.python.org and move all the files
|
|
|
|
|
in place over there. Our policy is that every Python version gets its
|
|
|
|
|
own directory, but each directory may contain several releases. We keep
|
|
|
|
|
all old releases, moving them into a "prev" subdirectory when we have a
|
|
|
|
|
new release.
|
2002-01-10 11:22:46 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
So, there's a directory called "2.6" which contains Python-2.5a2.exe and
|
|
|
|
|
Python-2.6a2.tgz, along with a "prev" subdirectory containing
|
|
|
|
|
Python-2.6a1.msi, Python-2.6a1.tgz, Python-2.6a1.tar.bz2, etc.
|
2002-01-10 11:22:46 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ On dinsdale, cd /data/ftp.python.org/pub/python/X.Y[.Z]
|
|
|
|
|
creating it if necessary.
|
2008-01-17 19:31:21 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Move the previous release files to a directory called 'prev'
|
|
|
|
|
creating the directory if necessary (make sure the directory has
|
|
|
|
|
g+ws bits on). If this is the first alpha release of a new Python
|
|
|
|
|
version, skip this step.
|
2001-09-07 14:58:47 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
For pre-releases (alpha, beta, rc), don't move things into a 'prev'
|
|
|
|
|
directory, You'll move everything in there when the final release
|
|
|
|
|
comes out.
|
2001-09-07 14:58:47 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Move the .tgz, tar.bz2, and .msi files to this directory. Make
|
|
|
|
|
sure they are world readable. They should also be group writable,
|
|
|
|
|
and group-owned by webmaster.
|
2002-04-11 10:30:51 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ md5sum the files and make sure they got uploaded intact.
|
2001-09-07 14:58:47 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Now it's time to twiddle the web site.
|
2001-09-07 14:58:47 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
To do these steps, you must have the permission to edit the website. If you
|
|
|
|
|
don't have that, ask someone on pydotorg@python.org for the proper
|
|
|
|
|
permissions. It's insane for you not to have it.
|
2001-09-07 14:58:47 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
I'm not going to go into the details of building the site or pushing it
|
|
|
|
|
live. Plenty of people on pydotorg can help you, and there's a good README
|
|
|
|
|
once you get the branch. All the directories below are named relative to
|
|
|
|
|
the data subdirectory unless otherwise noted.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
This page will probably come in handy:
|
2003-07-25 09:54:43 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
http://docutils.sourceforge.net/docs/user/rst/quickref.html
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
None of the web site updates are automated by release.py.
|
|
|
|
|
|
|
|
|
|
___ Build the basic site.
|
|
|
|
|
|
|
|
|
|
In the top directory, do an `svn update` to get the latest code. In the
|
|
|
|
|
build subdirectory, do `make` to build the site. Do `make serve` to
|
|
|
|
|
start service the pages on localhost:8005. Hit that url to see the site
|
|
|
|
|
as it is right now. At any time you can re-run `make` to update the
|
|
|
|
|
local site. You don't have to restart the server.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Don't `svn commit` until you're all done!
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ If this is the first release for this version (even a new patch
|
|
|
|
|
version), you'll need to create a subdirectory inside download/releases
|
|
|
|
|
to hold the new version files. It's probably a good idea to copy an
|
|
|
|
|
existing recent directory and twiddle the files in there for the new
|
|
|
|
|
version number.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Add a news section item to the front page by editing newsindex.yml. The
|
|
|
|
|
format should be pretty self evident.
|
2001-09-07 14:58:47 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Edit download/releases/content.ht to update the version numbers for
|
|
|
|
|
this release. There are a bunch of places you need to touch:
|
2001-09-07 14:58:47 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ The subdirectory name as the first element in the Nav rows.
|
|
|
|
|
___ Possibly the Releases section, and possibly in the experimental
|
|
|
|
|
releases section if this is an alpha, beta or release candidate.
|
2001-09-07 14:58:47 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Update the version specific pages.
|
2001-12-14 23:00:17 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ cd to download/releases/X.Y.Z
|
|
|
|
|
___ Edit the version numbers in content.ht
|
|
|
|
|
___ Copy the new .asc files into place
|
|
|
|
|
___ Update the md5 checksums
|
2001-12-21 15:47:12 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Copy Misc/NEWS to download/releases/X.Y.Z/NEWS.txt
|
|
|
|
|
___ Copy Lib/idlelib/NEWS.txt to download/releases/X.Y.Z/IDLENEWS.txt
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Note, you don't have to copy the actual .tgz or tar.bz2 tarballs into
|
|
|
|
|
this directory because they only live on dinsdale in the ftp directory.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ When everything looks good, `svn commit` in the data directory. This
|
|
|
|
|
will trigger the live site to update itself, and at that point the
|
|
|
|
|
release is live.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Now it's time to write the announcement for the mailing lists. This is the
|
|
|
|
|
fuzzy bit because not much can be automated. You can use an earlier
|
|
|
|
|
announcement as a template, but edit it for content!
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Once the announcement is ready, send it to the following
|
2001-08-22 18:43:42 -04:00
|
|
|
|
addresses:
|
|
|
|
|
|
|
|
|
|
python-list@python.org
|
|
|
|
|
python-announce@python.org
|
|
|
|
|
python-dev@python.org
|
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ XXX Mention the release as the most recent stable one in
|
2006-02-04 05:34:32 -05:00
|
|
|
|
pydotorg:doc/faq/general.ht (section "How stable is
|
|
|
|
|
Python?")
|
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ XXX Make the last change to the documentation area on
|
2003-10-02 11:39:21 -04:00
|
|
|
|
python.org. (Remember those from the documentation items above?
|
|
|
|
|
It's time now.)
|
|
|
|
|
|
2006-10-25 00:15:39 -04:00
|
|
|
|
The "current" symlink needs to be updated if this release is the
|
|
|
|
|
highest-versioned release. Log in to dinsdale.python.org, and
|
|
|
|
|
update a symlink in the doc/ tree:
|
2003-10-02 11:39:21 -04:00
|
|
|
|
|
2006-10-25 00:15:39 -04:00
|
|
|
|
# on dinsdale:
|
|
|
|
|
$ cd /data/ftp.python.org/pub/www.python.org/doc/
|
2003-10-02 11:39:21 -04:00
|
|
|
|
$ rm current && ln -s $VERSION current
|
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Now it's time to do some cleaning up. These steps are very important!
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2003-07-29 20:09:36 -04:00
|
|
|
|
___ If you made a non-maintenance branch, be sure to merge it into
|
2008-05-08 19:52:56 -04:00
|
|
|
|
the trunk! Now that we've released this branch, we don't need it any
|
|
|
|
|
more. We've already tagged it so we can always reproduce it. Note that
|
|
|
|
|
merging branches is a bit of a black art, but here's what's worked for
|
|
|
|
|
us.
|
2003-07-29 20:09:36 -04:00
|
|
|
|
|
|
|
|
|
NOTE: If this was an X.Y major release, we will be using this as
|
|
|
|
|
the maintenance branch for a long time to come.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Check out a completely clean, virgin working directory of the
|
|
|
|
|
trunk, by doing this in the directory that is the parent of
|
|
|
|
|
your branch working directory python-XYaZ:
|
|
|
|
|
% svn co \
|
|
|
|
|
svn+ssh://pythondev@svn.python.org/python/trunk python-clean
|
2001-12-14 23:00:17 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Run a diff against your branch by doing this in the common
|
|
|
|
|
parent directory containing both python-clean and python-XYaZ:
|
|
|
|
|
% diff -r python-clean python-26a2 | grep ^diff | grep -v /.svn/ \
|
|
|
|
|
> /tmp/diffcmd.sh
|
2001-12-14 23:00:17 -05:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Edit diffcmd.sh to get rid of files that you know don't have
|
|
|
|
|
important changes. You're looking for files that have updates
|
|
|
|
|
in the branch that haven't made it to the trunk.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Generally you can ignore any changes to the Doc or Mac
|
|
|
|
|
subdirectories, or any changes to Windows related files. The
|
|
|
|
|
sub-RMs for those parts will take care of any necessary merges
|
|
|
|
|
from the branch to the trunk.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
If you've been diligent about merging changes from the trunk
|
|
|
|
|
into the branch, there shouldn't be many of these files.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Edit /tmp/diffcmd.sh, changing all the -r's into -u's. Run
|
|
|
|
|
the /tmp/diffcmd.sh command like so:
|
|
|
|
|
% sh /tmp/diffcmd.sh > /tmp/pydiff.txt
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Attempt to patch your python-clean working directory. Do this
|
|
|
|
|
first, noting that --dry-run does not actually apply any
|
|
|
|
|
patches, it just makes sure that the patch command runs
|
|
|
|
|
successfully to completion:
|
|
|
|
|
% patch -p1 --dry-run < /tmp/pydiff.txt
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ If this goes well, run it again, taking out the --dry-run
|
|
|
|
|
option. If this fails, or if it prompts you for a file to
|
|
|
|
|
patch, try using -p0 instead of -p1. Otherwise, your diff
|
|
|
|
|
command was messed up, so try again.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ cd to python-clean and do a "svn commit". Use as your log
|
|
|
|
|
message something like "Merging the rXYaZ-maint tag back into
|
|
|
|
|
the trunk".
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Do the guided post-release steps with the release script.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
.../sandbox/release/release.py --done X.YaZ
|
2001-10-24 19:18:46 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
Review and commit these changes.
|
2001-10-24 19:18:46 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
___ Send email to python-dev (Py3: and python-3000) informing them that the
|
|
|
|
|
branch has been unfrozen.
|
2001-09-08 01:17:56 -04:00
|
|
|
|
|
|
|
|
|
|
2001-08-22 18:43:42 -04:00
|
|
|
|
What Next?
|
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
__ Verify! Pretend you're a user: download the files from python.org, and
|
|
|
|
|
make Python from it. This step is too easy to overlook, and on several
|
|
|
|
|
occasions we've had useless release files. Once a general server problem
|
|
|
|
|
caused mysterious corruption of all files; once the source tarball got
|
|
|
|
|
built incorrectly; more than once the file upload process on SF truncated
|
|
|
|
|
files; and so on.
|
|
|
|
|
|
|
|
|
|
__ Rejoice. Drink. Be Merry. Write a PEP like this one. Or be
|
|
|
|
|
like unto Guido and take A Vacation.
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2008-05-08 19:52:56 -04:00
|
|
|
|
You've just made a Python release!
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2001-10-29 10:53:04 -05:00
|
|
|
|
|
|
|
|
|
Final Release Notes
|
|
|
|
|
|
2006-09-10 13:16:23 -04:00
|
|
|
|
The Final release of any major release, e.g. Python 2.5 final, has
|
2001-10-29 10:53:04 -05:00
|
|
|
|
special requirements, specifically because it will be one of the
|
|
|
|
|
longest lived releases (i.e. betas don't last more than a couple
|
|
|
|
|
of weeks, but final releases can last for years!).
|
|
|
|
|
|
|
|
|
|
For this reason we want to have a higher coordination between the
|
2008-01-17 19:31:21 -05:00
|
|
|
|
three major releases: Windows, Mac, and source. So we add this
|
|
|
|
|
extra step to the release process for a final release:
|
2001-10-29 10:53:04 -05:00
|
|
|
|
|
2008-01-17 19:31:21 -05:00
|
|
|
|
___ Hold up the final release until the WE and ME approve, or until we
|
2001-10-29 10:53:04 -05:00
|
|
|
|
lose patience <wink>.
|
2001-10-24 19:18:46 -04:00
|
|
|
|
|
2001-08-22 18:43:42 -04:00
|
|
|
|
|
2001-09-08 01:17:56 -04:00
|
|
|
|
Windows Notes
|
|
|
|
|
|
2006-09-10 13:07:43 -04:00
|
|
|
|
Windows has a MSI installer, various flavors of Windows have
|
2001-10-25 01:19:19 -04:00
|
|
|
|
"special limitations", and the Windows installer also packs
|
|
|
|
|
precompiled "foreign" binaries (Tcl/Tk, expat, etc). So Windows
|
|
|
|
|
testing is tiresome but very necessary.
|
|
|
|
|
|
2008-01-17 19:31:21 -05:00
|
|
|
|
Concurrent with uploading the installer, the WE installs Python
|
2006-09-10 13:07:43 -04:00
|
|
|
|
from it twice: once into the default directory suggested by the
|
2001-10-25 01:19:19 -04:00
|
|
|
|
installer, and later into a directory with embedded spaces in its
|
|
|
|
|
name. For each installation, he runs the full regression suite
|
2006-09-10 13:07:43 -04:00
|
|
|
|
from a DOS box, and both with and without -0. For maintenance
|
|
|
|
|
release, he also tests whether upgrade installations succeed.
|
2001-10-25 01:19:19 -04:00
|
|
|
|
|
|
|
|
|
He also tries *every* shortcut created under Start -> Menu -> the
|
|
|
|
|
Python group. When trying IDLE this way, you need to verify that
|
|
|
|
|
Help -> Python Documentation works. When trying pydoc this way
|
|
|
|
|
(the "Module Docs" Start menu entry), make sure the "Start
|
|
|
|
|
Browser" button works, and make sure you can search for a random
|
2008-01-17 19:31:21 -05:00
|
|
|
|
module (like "random" <wink>) and then that the "go to selected"
|
|
|
|
|
button works.
|
2001-10-25 01:19:19 -04:00
|
|
|
|
|
|
|
|
|
It's amazing how much can go wrong here -- and even more amazing
|
|
|
|
|
how often last-second checkins break one of these things. If
|
|
|
|
|
you're "the Windows geek", keep in mind that you're likely the
|
|
|
|
|
only person routinely testing on Windows, and that Windows is
|
|
|
|
|
simply a mess.
|
|
|
|
|
|
2006-09-10 13:07:43 -04:00
|
|
|
|
Repeat the testing for each target architecture. On XP/2003, try
|
|
|
|
|
both an Admin and a plain User (not Power User) account. If you
|
|
|
|
|
can, also test the installer on Windows 9x.
|
2001-10-25 01:19:19 -04:00
|
|
|
|
|
|
|
|
|
WRT Step 5 above (verify the release media), since by the time
|
2008-01-17 19:31:21 -05:00
|
|
|
|
release files are ready to download the WE has generally run many
|
2001-10-25 01:19:19 -04:00
|
|
|
|
Windows tests on the installer he uploaded, he usually doesn't do
|
|
|
|
|
anything for Step 5 except a full byte-comparison ("fc /b" if
|
|
|
|
|
using a Windows shell) of the downloaded file against the file he
|
|
|
|
|
uploaded.
|
2001-09-08 01:17:56 -04:00
|
|
|
|
|
|
|
|
|
|
2001-08-22 18:43:42 -04:00
|
|
|
|
Copyright
|
|
|
|
|
|
|
|
|
|
This document has been placed in the public domain.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Local Variables:
|
|
|
|
|
mode: indented-text
|
|
|
|
|
indent-tabs-mode: nil
|
|
|
|
|
End:
|