Merge branch 'master' of github.com:python/peps
This commit is contained in:
commit
952c4b8601
|
@ -1,7 +1,5 @@
|
|||
PEP: 12
|
||||
Title: Sample reStructuredText PEP Template
|
||||
Version: $Revision$
|
||||
Last-Modified: $Date$
|
||||
Author: David Goodger <goodger@python.org>,
|
||||
Barry Warsaw <barry@python.org>
|
||||
Status: Active
|
||||
|
|
217
pep-0101.txt
217
pep-0101.txt
|
@ -2,14 +2,16 @@ PEP: 101
|
|||
Title: Doing Python Releases 101
|
||||
Version: $Revision$
|
||||
Last-Modified: $Date$
|
||||
Author: barry@python.org (Barry Warsaw), guido@python.org (Guido van Rossum)
|
||||
Author: Barry Warsaw <barry@python.org>, Guido van Rossum <guido@python.org>
|
||||
Status: Active
|
||||
Type: Informational
|
||||
Content-Type: text/x-rst
|
||||
Created: 22-Aug-2001
|
||||
Post-History:
|
||||
|
||||
|
||||
Abstract
|
||||
========
|
||||
|
||||
Making a Python release is a thrilling and crazy process. You've heard
|
||||
the expression "herding cats"? Imagine trying to also saddle those
|
||||
|
@ -25,6 +27,7 @@ Abstract
|
|||
items off as you complete them.
|
||||
|
||||
Things You'll Need
|
||||
==================
|
||||
|
||||
As a release manager there are a lot of resources you'll need to access.
|
||||
Here's a hopefully-complete list.
|
||||
|
@ -75,6 +78,7 @@ Things You'll Need
|
|||
or may not be called ``python-cabal``. Bug Barry about this.
|
||||
|
||||
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.
|
||||
|
@ -91,7 +95,7 @@ How to Make A Release
|
|||
* DE = Docs: Georg Brandl <georg@python.org> (Central Europe)
|
||||
* IE = Idle Expert: Terry Reedy <tjreedy@udel.edu> (US)
|
||||
|
||||
NOTE: It is highly recommended that the RM contact the Experts the day
|
||||
.. note:: It is highly recommended that the RM contact the Experts the day
|
||||
before the release. Because the world is round and everyone lives
|
||||
in different timezones, the RM must ensure that the release tag is
|
||||
created in enough time for the Experts to cut binary releases.
|
||||
|
@ -119,26 +123,29 @@ How to Make A Release
|
|||
This helps by performing several automatic editing steps, and guides you
|
||||
to perform some manual editing steps.
|
||||
|
||||
___ Log into irc.freenode.net and join the #python-dev channel.
|
||||
- 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.
|
||||
|
||||
___ Check to see if there are any showstopper bugs.
|
||||
- Check to see if there are any showstopper bugs.
|
||||
|
||||
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:
|
||||
|
||||
release blocker - Stops the release dead in its tracks. You may not
|
||||
release blocker
|
||||
Stops the release dead in its tracks. You may not
|
||||
make any release with any open release blocker bugs.
|
||||
|
||||
deferred blocker - Doesn't block this release, but it will block a
|
||||
deferred blocker
|
||||
Doesn't block this release, but it will block a
|
||||
future release. You may not make a final or
|
||||
candidate release with any open deferred blocker
|
||||
bugs.
|
||||
|
||||
critical - Important bugs that should be fixed, but which does not block
|
||||
critical
|
||||
Important bugs that should be fixed, but which does not block
|
||||
a release.
|
||||
|
||||
Review the release blockers and either resolve them, bump them down to
|
||||
|
@ -146,7 +153,7 @@ How to Make A Release
|
|||
you're making a final or candidate release, do the same with any open
|
||||
deferred.
|
||||
|
||||
___ Check the stable buildbots.
|
||||
- Check the stable buildbots.
|
||||
|
||||
Go to http://buildbot.python.org/all/waterfall
|
||||
|
||||
|
@ -158,7 +165,7 @@ How to Make A Release
|
|||
use your judgement, taking into account whether you are making an alpha,
|
||||
beta, or final release.
|
||||
|
||||
___ Make a release clone.
|
||||
- Make a release clone.
|
||||
|
||||
On a fork of the cpython repository on GitHub, create a release branch
|
||||
within it (called the "release clone" from now on). You can use the same
|
||||
|
@ -169,7 +176,7 @@ How to Make A Release
|
|||
tagging the release, and you will use it to share with the other experts
|
||||
for making the binaries.
|
||||
|
||||
___ Notify all committers by sending email to python-committers@python.org.
|
||||
- Notify all committers by sending email to python-committers@python.org.
|
||||
|
||||
Since we're now working with a distributed version control system, there
|
||||
is no need to stop everyone from pushing to the main repo; you'll just
|
||||
|
@ -179,37 +186,37 @@ How to Make A Release
|
|||
clone was made, as later commits won't make it into the release without
|
||||
extra effort.
|
||||
|
||||
___ Make sure the current branch of your release clone is the branch you
|
||||
- Make sure the current branch of your release clone is the branch you
|
||||
want to release from. (``git status``)
|
||||
|
||||
___ Run ``blurb release <version>`` specifying the version number
|
||||
- Run ``blurb release <version>`` specifying the version number
|
||||
(e.g. ``blurb release 3.4.7rc1``). This merges all the recent news
|
||||
blurbs into a single file marked with this release's version number.
|
||||
|
||||
___ Check the docs for markup errors.
|
||||
- Check the docs for markup errors.
|
||||
|
||||
cd to the Doc directory and run ``make suspicious``. If any markup
|
||||
errors are found, fix them.
|
||||
|
||||
___ Regenerate Lib/pydoc-topics.py.
|
||||
- Regenerate Lib/pydoc-topics.py.
|
||||
|
||||
While still in the Doc directory, run ``make pydoc-topics``. Then copy
|
||||
``build/pydoc-topics/topics.py`` to ``../Lib/pydoc_data/topics.py``.
|
||||
|
||||
___ Commit your changes to pydoc_topics.py
|
||||
- Commit your changes to pydoc_topics.py
|
||||
(and any fixes you made in the docs).
|
||||
|
||||
___ Consider running autoconf using the currently accepted standard version
|
||||
- Consider running autoconf using the currently accepted standard version
|
||||
in case ``configure`` or other autoconf-generated files were last
|
||||
committed with a newer or older version and may contain spurious or
|
||||
harmful differences. Currently, autoconf 2.69 is our de-facto standard.
|
||||
if there are differences, commit them.
|
||||
|
||||
___ Make sure the SOURCE_URI in ``Doc/tools/extensions/pyspecific.py``
|
||||
- Make sure the SOURCE_URI in ``Doc/tools/extensions/pyspecific.py``
|
||||
points to the right branch in the git repository (or ``default`` for
|
||||
unstable releases of the default branch).
|
||||
|
||||
___ Bump version numbers via the release script.
|
||||
- Bump version numbers via the release script.
|
||||
|
||||
$ .../release-tools/release.py --bump X.Y.ZaN
|
||||
|
||||
|
@ -228,38 +235,38 @@ How to Make A Release
|
|||
content of this file. You should only need to review the text for
|
||||
sanity, and update the release date with today's date.
|
||||
|
||||
___ Make sure all changes have been committed. (``release.py --bump``
|
||||
- Make sure all changes have been committed. (``release.py --bump``
|
||||
doesn't check in its changes for you.)
|
||||
|
||||
___ Check the years on the copyright notice. If the last release
|
||||
- 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:
|
||||
|
||||
___ README
|
||||
___ LICENSE (make sure to change on trunk and the branch)
|
||||
___ Python/getcopyright.c
|
||||
___ Doc/copyright.rst
|
||||
___ Doc/license.rst
|
||||
___ PC/python_ver_rc.h sets up the DLL version resource for Windows
|
||||
- README
|
||||
- LICENSE (make sure to change on trunk and the branch)
|
||||
- Python/getcopyright.c
|
||||
- Doc/copyright.rst
|
||||
- Doc/license.rst
|
||||
- PC/python_ver_rc.h sets up the DLL version resource for Windows
|
||||
(displayed when you right-click on the DLL and select
|
||||
Properties). This isn't a C include file, it's a Windows
|
||||
"resource file" include file.
|
||||
|
||||
___ Check with the IE (if there is one <wink>) to be sure that
|
||||
- Check with the IE (if there is one <wink>) to be sure that
|
||||
Lib/idlelib/NEWS.txt has been similarly updated.
|
||||
|
||||
___ For a final major release, edit the first paragraph of
|
||||
- For a final major 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.
|
||||
|
||||
___ Do a "git status" in this directory.
|
||||
- Do a "git status" in this directory.
|
||||
|
||||
You should not see any files. I.e. you better not have any uncommitted
|
||||
changes in your working directory.
|
||||
|
||||
___ Tag the release for X.Y.ZaN.
|
||||
- Tag the release for X.Y.ZaN.
|
||||
|
||||
$ .../release-tools/release.py --tag X.Y.ZaN
|
||||
|
||||
|
@ -267,39 +274,39 @@ How to Make A Release
|
|||
release tag in the repo is signed with your gpg key. When prompted
|
||||
choose the private key you use for signing release tarballs etc.
|
||||
|
||||
___ If this is a final major release, branch the tree for X.Y.
|
||||
- If this is a final major release, branch the tree for X.Y.
|
||||
|
||||
This section has not yet been updated for GitHub-based releases!
|
||||
|
||||
When making a major release (e.g., for 3.2), you must create the
|
||||
long-lived maintenance branch.
|
||||
|
||||
___ Note down the current revision ID of the tree.
|
||||
- Note down the current revision ID of the tree.
|
||||
|
||||
$ hg identify
|
||||
|
||||
___ First, set the original trunk up to be the next release.
|
||||
- First, set the original trunk up to be the next release.
|
||||
|
||||
$ .../release-tools/release.py --bump 3.3a0
|
||||
|
||||
___ Edit all version references in the README
|
||||
- Edit all version references in the README
|
||||
|
||||
___ Move any historical "what's new" entries from Misc/NEWS to
|
||||
- Move any historical "what's new" entries from Misc/NEWS to
|
||||
Misc/HISTORY.
|
||||
|
||||
___ Edit Doc/tutorial/interpreter.rst (2 references to '[Pp]ython3x',
|
||||
- Edit Doc/tutorial/interpreter.rst (2 references to '[Pp]ython3x',
|
||||
one to 'Python 3.x', also make the date in the banner consistent).
|
||||
|
||||
___ Edit Doc/tutorial/stdlib.rst and Doc/tutorial/stdlib2.rst, which
|
||||
- Edit Doc/tutorial/stdlib.rst and Doc/tutorial/stdlib2.rst, which
|
||||
have each one reference to '[Pp]ython3x'.
|
||||
|
||||
___ Add a new whatsnew/3.x.rst file (with the comment near the top
|
||||
- Add a new whatsnew/3.x.rst file (with the comment near the top
|
||||
and the toplevel sections copied from the previous file) and
|
||||
add it to the toctree in whatsnew/index.rst.
|
||||
|
||||
___ Update the version number in configure.ac and re-run autoconf.
|
||||
- Update the version number in configure.ac and re-run autoconf.
|
||||
|
||||
___ Update the version numbers for the Windows builds in PC/ and
|
||||
- Update the version numbers for the Windows builds in PC/ and
|
||||
PCbuild/, which have references to python32.
|
||||
|
||||
$ find PC/ PCbuild/ -type f | xargs sed -i 's/python32/python33/g'
|
||||
|
@ -307,32 +314,32 @@ How to Make A Release
|
|||
$ hg mv -f PC/python32stub.def PC/python33stub.def
|
||||
$ hg mv -f PC/python32gen.py PC/python33gen.py
|
||||
|
||||
___ Commit these changes to the default branch.
|
||||
- Commit these changes to the default branch.
|
||||
|
||||
___ Now, go back to the previously noted revision and make the
|
||||
- Now, go back to the previously noted revision and make the
|
||||
maintenance branch *from there*.
|
||||
|
||||
$ hg update deadbeef # revision ID noted down before
|
||||
$ hg branch 3.2
|
||||
|
||||
___ When you want to push back your new branch to the main CPython
|
||||
- When you want to push back your new branch to the main CPython
|
||||
repository, the new branch name must be added to the "allow-branches"
|
||||
hook configuration, which protects against stray named branches being
|
||||
pushed. Login to hg.python.org and edit (as the "hg" user)
|
||||
``/data/hg/repos/cpython/.hg/hgrc`` to that effect.
|
||||
|
||||
___ Do another "git status" in this directory.
|
||||
- Do another "git status" in this directory.
|
||||
|
||||
You should not see any files. I.e. you better not have any uncommitted
|
||||
changes in your working directory.
|
||||
|
||||
___ For a final major release, Doc/tools/static/version_switch.js
|
||||
- For a final major release, Doc/tools/static/version_switch.js
|
||||
must be updated in all maintained branches, so that the new maintenance
|
||||
branch is not "dev" anymore and there is a new "dev" version.
|
||||
Also, update Doc/tools/templates/indexsidebar.html in all maintained
|
||||
branches.
|
||||
|
||||
___ Time to build the source tarball. Use the release script to create
|
||||
- Time to build the source tarball. Use the release script to create
|
||||
the source gzip and xz tarballs,
|
||||
documentation tar and zip files, and gpg signature files.
|
||||
|
||||
|
@ -342,10 +349,10 @@ How to Make A Release
|
|||
tarballs and signatures in a subdirectory called 'X.Y.ZaN/src', and the
|
||||
built docs in 'X.Y.ZaN/docs' (for final releases).
|
||||
|
||||
___ Now you want to perform the very important step of checking the
|
||||
- Now you want to perform the very important step of checking the
|
||||
tarball you just created, to make sure a completely clean,
|
||||
virgin build passes the regression test. Here are the best
|
||||
steps to take:
|
||||
steps to take::
|
||||
|
||||
$ cd /tmp
|
||||
$ tar xvf /path/to/your/release/clone/<version>//Python-3.2rc2.tgz
|
||||
|
@ -369,7 +376,7 @@ How to Make A Release
|
|||
freshly unpacked directory looks weird, you better stop now and
|
||||
figure out what the problem is.
|
||||
|
||||
___ Push your commits to the remote release branch in your GitHub fork.
|
||||
- Push your commits to the remote release branch in your GitHub fork.::
|
||||
|
||||
# Do a dry run first.
|
||||
$ git push --dry-run origin
|
||||
|
@ -379,15 +386,15 @@ How to Make A Release
|
|||
$ git push origin
|
||||
$ git push --tags origin
|
||||
|
||||
___ Notify the experts that they can start building binaries.
|
||||
- Notify the experts that they can start building binaries.
|
||||
|
||||
___ STOP STOP STOP STOP STOP STOP STOP STOP
|
||||
- STOP STOP STOP STOP STOP STOP STOP STOP
|
||||
|
||||
At this point you must receive the "green light" from other experts in
|
||||
order to create the release. There are things you can do while you wait
|
||||
though, so keep reading until you hit the next STOP.
|
||||
|
||||
___ The WE builds the Windows helpfile, using (in Doc/)
|
||||
- The WE builds the Windows helpfile, using (in Doc/)
|
||||
|
||||
% make.bat htmlhelp (on Windows)
|
||||
|
||||
|
@ -395,7 +402,7 @@ How to Make A Release
|
|||
Help Workshop is then fired up on the created python33.hhp file, finally
|
||||
resulting in an python33.chm file.
|
||||
|
||||
___ The WE then generates Windows installer files for each Windows
|
||||
- The WE then generates Windows installer files for each Windows
|
||||
target architecture (for Python 3.3, this means x86 and AMD64).
|
||||
|
||||
- He has one checkout tree per target architecture, and builds the
|
||||
|
@ -411,7 +418,7 @@ How to Make A Release
|
|||
|
||||
- The WE then edits Tools/msi/config.py (a file only present locally)
|
||||
to update full_current_version and sets snapshot to false. Currently
|
||||
for a release config.py looks like
|
||||
for a release config.py looks like::
|
||||
|
||||
snapshot=0
|
||||
full_current_version="3.3.5rc2"
|
||||
|
@ -422,14 +429,14 @@ How to Make A Release
|
|||
|
||||
- Now he runs msi.py with ActivePython or Python with pywin32.
|
||||
|
||||
The WE checksums the files (*.msi, *.chm, *-pdb.zip), uploads them to
|
||||
The WE checksums the files (``*.msi``, ``*.chm``, ``*-pdb.zip``), uploads them to
|
||||
dl-files.iad1.psf.io together with gpg signature files, and emails you the
|
||||
location and md5sums.
|
||||
|
||||
___ The ME builds Mac installer packages and uploads them to
|
||||
- The ME builds Mac installer packages and uploads them to
|
||||
dl-files.iad1.psf.io together with gpg signature files.
|
||||
|
||||
___ scp or rsync all the files built by ``release.py --export``
|
||||
- scp or rsync all the files built by ``release.py --export``
|
||||
to your home directory on dl-files.iad1.psf.io.
|
||||
|
||||
While you're waiting for the files to finish uploading, you can continue
|
||||
|
@ -437,39 +444,39 @@ How to Make A Release
|
|||
and/or python-committers to download the files as they finish uploading
|
||||
so that they can test them on their platforms as well.
|
||||
|
||||
___ Now you need to go to dl-files.iad1.psf.io and move all the files in place
|
||||
- Now you need to go to dl-files.iad1.psf.io and move all the files in place
|
||||
over there. Our policy is that every Python version gets its own
|
||||
directory, but each directory contains all releases of that version.
|
||||
|
||||
___ On dl-files.iad1.psf.io, cd /srv/www.python.org/ftp/python/X.Y.Z
|
||||
- On dl-files.iad1.psf.io, cd /srv/www.python.org/ftp/python/X.Y.Z
|
||||
creating it if necessary. Make sure it is owned by group 'downloads'
|
||||
and group-writable.
|
||||
|
||||
___ Move the release .tgz, and .tar.xz files into place, as well as the
|
||||
- Move the release .tgz, and .tar.xz files into place, as well as the
|
||||
.asc GPG signature files. The Win/Mac binaries are usually put there
|
||||
by the experts themselves.
|
||||
|
||||
Make sure they are world readable. They should also be group
|
||||
writable, and group-owned by downloads.
|
||||
|
||||
___ Use ``gpg --verify`` to make sure they got uploaded intact.
|
||||
- Use ``gpg --verify`` to make sure they got uploaded intact.
|
||||
|
||||
___ If this is a final or rc release: Move the doc zips and tarballs to
|
||||
- If this is a final or rc release: Move the doc zips and tarballs to
|
||||
/srv/www.python.org/ftp/python/doc/X.Y.Z, creating the directory
|
||||
if necessary, and adapt the "current" symlink in .../doc to point to
|
||||
that directory. Note though that if you're releasing a maintenance
|
||||
release for an older version, don't change the current link.
|
||||
|
||||
___ If this is a final or rc release (even a maintenance release), also
|
||||
- If this is a final or rc release (even a maintenance release), also
|
||||
unpack the HTML docs to /srv/docs.python.org/release/X.Y.Z[rcA] on
|
||||
docs.iad1.psf.io. Make sure the files are in group "docs" and are
|
||||
group-writeable. If it is a release of a security-fix-only version,
|
||||
tell the DE to build a version with the "version switcher"
|
||||
and put it there.
|
||||
|
||||
___ Let the DE check if the docs are built and work all right.
|
||||
- Let the DE check if the docs are built and work all right.
|
||||
|
||||
___ If this is a final major release: Tell the DE to adapt redirects for
|
||||
- If this is a final major release: Tell the DE to adapt redirects for
|
||||
docs.python.org/X.Y in the Apache config for docs.python.org, update
|
||||
the script Doc/tools/dailybuild.py to point to the right
|
||||
stable/development branches, and to install it and make the initial
|
||||
|
@ -477,7 +484,7 @@ How to Make A Release
|
|||
updated. In general, please don't touch things in the toplevel
|
||||
/srv/docs.python.org/ directory unless you know what you're doing.
|
||||
|
||||
___ Note both the documentation and downloads are behind a caching CDN. If
|
||||
- Note both the documentation and downloads are behind a caching CDN. If
|
||||
you change archives after downloading them through the website, you'll
|
||||
need to purge the stale data in the CDN like this:
|
||||
|
||||
|
@ -488,11 +495,11 @@ How to Make A Release
|
|||
|
||||
$ curl -X PURGE https://www.python.org/ftp/python/2.7.5/
|
||||
|
||||
___ For the extra paranoid, do a completely clean test of the release.
|
||||
- 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.
|
||||
and do a clean make test.::
|
||||
|
||||
$ make distclean
|
||||
$ ./configure
|
||||
|
@ -516,9 +523,9 @@ How to Make A Release
|
|||
|
||||
None of the web site updates are automated by release.py.
|
||||
|
||||
___ Log in to http://www.python.org/admin .
|
||||
- Log in to http://www.python.org/admin .
|
||||
|
||||
___ If this is the first release for this version (even a new patch
|
||||
- If this is the first release for this version (even a new patch
|
||||
version), you'll need to create a "page" for the version.
|
||||
Find the "Pages" section and click on "Add", then fill in the
|
||||
form.
|
||||
|
@ -530,10 +537,10 @@ How to Make A Release
|
|||
Reuse the same page for all pre-releases, changing the version
|
||||
number and the documentation as you go.
|
||||
|
||||
___ If this isn't the first release for a version, open the existing
|
||||
- If this isn't the first release for a version, open the existing
|
||||
"page" for editing and update it to the new release. Don't save yet!
|
||||
|
||||
___ Now create a new "release" for the release. Currently "Releases" are
|
||||
- Now create a new "release" for the release. Currently "Releases" are
|
||||
sorted under "Downloads".
|
||||
|
||||
Again, the easiest thing is probably to copy fields from
|
||||
|
@ -549,13 +556,13 @@ How to Make A Release
|
|||
|
||||
The page's ID number is the last field; here it is 1232.
|
||||
|
||||
___ Note that by convention, the "Content" on the page and
|
||||
- Note that by convention, the "Content" on the page and
|
||||
the "Content" on the release are the same, *except* the
|
||||
"page" has a section on where to download the software.
|
||||
|
||||
___ "Save" the release.
|
||||
- "Save" the release.
|
||||
|
||||
___ Populate the release with the downloadable files.
|
||||
- Populate the release with the downloadable files.
|
||||
|
||||
Your friend and mine, Georg Brandl, made a lovely tool
|
||||
called "add-to-pydotorg.py". You can find it in the
|
||||
|
@ -581,12 +588,12 @@ How to Make A Release
|
|||
(It's best to update add-to-pydotorg.py when file types
|
||||
are removed, too.)
|
||||
|
||||
___ If this is a final release...
|
||||
- If this is a final release:
|
||||
|
||||
___ Add the new version to `https://www.python.org/doc/versions/` and
|
||||
- Add the new version to `https://www.python.org/doc/versions/` and
|
||||
remove the current version from any 'in development' section.
|
||||
|
||||
___ For X.Y.Z, edit all the previous X.Y releases' page(s) to
|
||||
- For X.Y.Z, edit all the previous X.Y releases' page(s) to
|
||||
point to the new release. This includes the content field of the
|
||||
`Downloads -> Releases` entry for the release::
|
||||
|
||||
|
@ -595,38 +602,39 @@ How to Make A Release
|
|||
|
||||
And, for those releases having separate release page entries
|
||||
(phasing these out?), update those pages as well,
|
||||
e.g. `download/releases/x.y.z::
|
||||
e.g. `download/releases/x.y.z`::
|
||||
|
||||
Note: Python x.y.m has been superseded by
|
||||
`Python x.y.n </download/releases/x.y.n/>`_.
|
||||
|
||||
___ Other steps (other update for new web site)??
|
||||
- Other steps (other update for new web site)??
|
||||
|
||||
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!
|
||||
|
||||
___ STOP STOP STOP STOP STOP STOP STOP STOP
|
||||
- STOP STOP STOP STOP STOP STOP STOP STOP
|
||||
|
||||
___ Have you gotten the green light from the WE?
|
||||
- Have you gotten the green light from the WE?
|
||||
|
||||
___ Have you gotten the green light from the DE?
|
||||
- Have you gotten the green light from the DE?
|
||||
|
||||
|
||||
___ Once the announcement is ready, send it to the following
|
||||
- Once the announcement is ready, send it to the following
|
||||
addresses:
|
||||
|
||||
python-list@python.org
|
||||
python-announce@python.org
|
||||
python-dev@python.org
|
||||
|
||||
___ Also post the announcement to `The Python Insider blog
|
||||
<http://blog.python.org>`_. To add a new entry, go to
|
||||
- Also post the announcement to
|
||||
`The Python Insider blog <http://blog.python.org>`_.
|
||||
To add a new entry, go to
|
||||
`your Blogger home page, here. <https://www.blogger.com/home>`_
|
||||
|
||||
Now it's time to do some cleaning up. These steps are very important!
|
||||
|
||||
___ If the branch is not yet in "security fixes only mode", temporarily
|
||||
- If the branch is not yet in "security fixes only mode", temporarily
|
||||
disable others' pushes to the branch in the main cpython
|
||||
repo and bypass the normal status checks. Go to the
|
||||
Settings -> Branches page:
|
||||
|
@ -643,7 +651,7 @@ How to Make A Release
|
|||
permitted to push to the branch. So for "security fixes only"
|
||||
branches, this step is a no-op.)
|
||||
|
||||
___ Merge your release clone into the main development repo:
|
||||
- Merge your release clone into the main development repo::
|
||||
|
||||
# Pristine copy of the upstream repo branch.
|
||||
$ git clone --branch X.Y git@github.com:python/cpython.git merge
|
||||
|
@ -657,13 +665,13 @@ How to Make A Release
|
|||
# Commit any changes.
|
||||
$ git commit -m '...'
|
||||
|
||||
___ Do the guided post-release steps with the release script.
|
||||
- Do the guided post-release steps with the release script.
|
||||
|
||||
$ .../release-tools/release.py --done X.Y.ZaN
|
||||
|
||||
Review and commit these changes.
|
||||
|
||||
___ Commit and push to the main repo.
|
||||
- Commit and push to the main repo.::
|
||||
|
||||
# Do a dry run first.
|
||||
$ git push --dry-run
|
||||
|
@ -673,7 +681,7 @@ How to Make A Release
|
|||
$ git push
|
||||
$ git push --tags
|
||||
|
||||
___ If you made temporary changes to the permissions for the branch on GitHub,
|
||||
- If you made temporary changes to the permissions for the branch on GitHub,
|
||||
undo those temporary changes now.
|
||||
https://github.com/python/cpython/settings/branches/
|
||||
|
||||
|
@ -683,46 +691,48 @@ How to Make A Release
|
|||
(Again, this doesn't apply to "security fixes only" branches. This step,
|
||||
too, is a no-op for those branches.)
|
||||
|
||||
___ You can delete the remote release clone, or simply reuse it for the next
|
||||
- You can delete the remote release clone, or simply reuse it for the next
|
||||
release.
|
||||
|
||||
___ Send email to python-committers informing them that the release has been
|
||||
- Send email to python-committers informing them that the release has been
|
||||
published.
|
||||
|
||||
___ Update any release PEPs (e.g. 361) with the release dates.
|
||||
- Update any release PEPs (e.g. 361) with the release dates.
|
||||
|
||||
___ Update the tracker at https://bugs.python.org:
|
||||
- Update the tracker at https://bugs.python.org:
|
||||
|
||||
___ Flip all the deferred blocker issues back to release blocker
|
||||
- Flip all the deferred blocker issues back to release blocker
|
||||
for the next release.
|
||||
|
||||
___ Add version X.Y+1 as when version X.Y enters alpha.
|
||||
- Add version X.Y+1 as when version X.Y enters alpha.
|
||||
|
||||
___ Change non-doc RFEs to version X.Y+1 when version X.Y enters beta.
|
||||
- Change non-doc RFEs to version X.Y+1 when version X.Y enters beta.
|
||||
|
||||
___ Update 'behavior' issues from versions that your release make
|
||||
- Update 'behavior' issues from versions that your release make
|
||||
unsupported to the next supported version.
|
||||
|
||||
___ Review open issues, as this might find lurking showstopper bugs,
|
||||
- Review open issues, as this might find lurking showstopper bugs,
|
||||
besides reminding people to fix the easy ones they forgot about.
|
||||
|
||||
|
||||
What Next?
|
||||
==========
|
||||
|
||||
___ Verify! Pretend you're a user: download the files from python.org, and
|
||||
* 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
|
||||
* Rejoice. Drink. Be Merry. Write a PEP like this one. Or be
|
||||
like unto Guido and take A Vacation.
|
||||
|
||||
You've just made a Python release!
|
||||
|
||||
|
||||
Windows Notes
|
||||
=============
|
||||
|
||||
Windows has a MSI installer, various flavors of Windows have
|
||||
"special limitations", and the Windows installer also packs
|
||||
|
@ -755,11 +765,12 @@ Windows Notes
|
|||
|
||||
|
||||
Copyright
|
||||
=========
|
||||
|
||||
This document has been placed in the public domain.
|
||||
|
||||
|
||||
|
||||
..
|
||||
Local Variables:
|
||||
mode: indented-text
|
||||
indent-tabs-mode: nil
|
||||
|
|
12
pep-0549.rst
12
pep-0549.rst
|
@ -11,7 +11,7 @@ Post-History: 4-Sep-2017
|
|||
|
||||
|
||||
Abstract
|
||||
--------
|
||||
========
|
||||
|
||||
Python's descriptor protocol requires that descriptors
|
||||
be members of the *type* of an object. This PEP proposes
|
||||
|
@ -20,7 +20,7 @@ Abstract
|
|||
would permit using properties in modules.
|
||||
|
||||
Rationale
|
||||
---------
|
||||
=========
|
||||
|
||||
Python's descriptor protocol guides programmers towards
|
||||
elegant API design. If your class supports a data-like
|
||||
|
@ -60,7 +60,7 @@ Rationale
|
|||
currently only forsees this as being useful for module objects.
|
||||
|
||||
Implementation
|
||||
--------------
|
||||
==============
|
||||
|
||||
The basic idea is simple: modify the ``tp_descr_get`` and ``tp_descr_set``
|
||||
functions exposed by ``PyModule_Type`` to inspect the attribute interacted
|
||||
|
@ -86,20 +86,20 @@ Implementation
|
|||
is set is on ``PyProperty_Type``.
|
||||
|
||||
Prototype
|
||||
---------
|
||||
=========
|
||||
|
||||
A prototype of this functionality is under development
|
||||
at GitHub [github]_.
|
||||
|
||||
Acknowledgements
|
||||
----------------
|
||||
================
|
||||
|
||||
Armin Rigo essentially proposed this mechanism when presented
|
||||
with the idea of "module properties", and educated the author
|
||||
both on the complexities of the problem and the proper solution.
|
||||
|
||||
References
|
||||
----------
|
||||
==========
|
||||
|
||||
.. [github]
|
||||
https://github.com/larryhastings/cpython/tree/module-properties
|
||||
|
|
Loading…
Reference in New Issue