summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBaptiste Mispelon <bmispelon@gmail.com>2025-02-15 13:13:43 +0100
committerNatalia <124304+nessita@users.noreply.github.com>2025-03-18 22:16:01 -0300
commit234478764c5d85fb2e1934082af91a60fa83476d (patch)
treed8e4cf30b758bc446739edefd795859b1d4b6a68
parentc779808c8e580efdcc27d10bda1323c4ea74a8f5 (diff)
[5.2.x] Refs #35980 -- Updated internal docs for artifact upload and release via admin site.
Recent updates to djangoproject.com extended the `Release` model to support uploading and storing artifacts and checksum files. This branch updates the "How to release Django" docs to match the new release flow. Backport of 08dae5bd46a02a2e2798028c83d97b1894beffb8 from main.
-rw-r--r--docs/internals/howto-release-django.txt126
1 files changed, 60 insertions, 66 deletions
diff --git a/docs/internals/howto-release-django.txt b/docs/internals/howto-release-django.txt
index fe0b8368e2..5427ab31c0 100644
--- a/docs/internals/howto-release-django.txt
+++ b/docs/internals/howto-release-django.txt
@@ -1,5 +1,5 @@
=====================
-How is Django Formed?
+How to release Django
=====================
This document explains how to release Django.
@@ -30,20 +30,26 @@ The short version of the steps involved is:
#. Proofread the release notes, looking for organization and writing errors.
Draft a blog post and email announcement.
-#. Update version numbers and create the release package(s).
+#. Update version numbers and create the release artifacts.
-#. Upload the package(s) to the ``djangoproject.com`` server.
+#. Create the new ``Release`` in the admin on ``djangoproject.com``.
+
+ #. Set the proper date but ensure the flag ``is_active`` is disabled.
+ #. Upload the artifacts (tarball, wheel, and checksums).
#. Verify package(s) signatures, check if they can be installed, and ensure
minimal functionality.
#. Upload the new version(s) to PyPI.
-#. Declare the new version in the admin on ``djangoproject.com``.
+#. Enable the ``is_active`` flag for each release in the admin on
+ ``djangoproject.com``.
#. Post the blog entry and send out the email announcements.
-#. Update version numbers post-release.
+#. Update version numbers post-release in stable branch(es).
+
+#. Add stub release notes for the next patch release in ``main`` and backport.
There are a lot of details, so please read on.
@@ -65,7 +71,6 @@ permissions.
* hashing tools (typically ``md5sum``, ``sha1sum``, and ``sha256sum`` on
Linux, or ``md5`` and ``shasum`` on macOS)
* python
- * ssh
* A GPG key pair. Ensure that the private part of this key is securely stored.
The public part needs to be uploaded to your GitHub account, and also to the
@@ -121,15 +126,12 @@ permissions.
rest_hostname = https://rest.api.transifex.com
token = # API token
-* Access to the ``djangoproject.com`` server to upload files (using ``scp``).
-
* Access to the Django admin on ``djangoproject.com`` as a "Site maintainer".
* Access to create a post in the `Django Forum - Announcements category
- <https://forum.djangoproject.com/c/announcements/7>`_ and to send emails to
- the following mailing lists:
-
- * `django-announce <https://groups.google.com/g/django-announce/>`_
+ <https://forum.djangoproject.com/c/announcements/7>`_ and to send emails to
+ the `django-announce <https://groups.google.com/g/django-announce/>`_
+ mailing list.
* Access to the ``django-security`` repo in GitHub. Among other things, this
provides access to the pre-notification distribution list (needed for
@@ -457,25 +459,33 @@ issuing **multiple releases**, repeat these steps for each release.
#. Otherwise, make sure the classifier is set to
``Development Status :: 5 - Production/Stable``.
-#. Tag the release using ``git tag``. For example:
+Building the artifacts
+----------------------
- .. code-block:: shell
+.. admonition:: Optionally use helper scripts
- $ git tag --sign --message="Tag 4.1.1" 4.1.1
+ You can streamline some of the steps below using helper scripts from the Wiki:
- You can check your work running ``git tag --verify <tag>``.
+ * `Release script for versions 5.1 and newer
+ <https://code.djangoproject.com/wiki/ReleaseScript>`_
+ * `Release script for versions 5.0 and older
+ <https://code.djangoproject.com/wiki/ReleaseScript5.0AndOlder>`_
+ * `Test new version script
+ <https://code.djangoproject.com/wiki/ReleaseTestNewVersion>`_
-#. Push your work and the new tag:
+#. Tag the release using ``git tag``. For example:
.. code-block:: shell
- $ git push
- $ git push --tags
+ $ git tag --sign --message="Tag 4.1.1" 4.1.1
+
+ You can check your work running ``git tag --verify <tag>``.
#. Make sure you have an absolutely clean tree by running ``git clean -dfx``.
#. Run ``python -m build`` to generate the release packages. This will create
- the release packages in a ``dist/`` directory.
+ the release artifacts (tarball and wheel) in a ``dist/`` directory. For
+ Django 5.0 or older, you need to run ``make -f extras/Makefile`` instead.
#. Generate the hashes of the release packages:
@@ -521,8 +531,8 @@ issuing **multiple releases**, repeat these steps for each release.
Release packages
================
- https://www.djangoproject.com/m/releases/<<MAJOR VERSION>>/<<RELEASE TAR.GZ FILENAME>>
- https://www.djangoproject.com/m/releases/<<MAJOR VERSION>>/<<RELEASE WHL FILENAME>>
+ https://www.djangoproject.com/download/<<VERSION>>/tarball/
+ https://www.djangoproject.com/download/<<VERSION>>/wheel/
MD5 checksums
=============
@@ -552,55 +562,36 @@ Making the release(s) available to the public
Now you're ready to actually put the release out there. To do this:
-#. Upload the checksum file(s):
+#. Create a new ``Release`` entry in the `djangoproject.com's admin
+ <https://www.djangoproject.com/admin/releases/release/add/>`_. If this is a
+ security release, this should be done 15 minutes before the announced
+ release time, no sooner:
- .. code-block:: shell
-
- $ scp Django-A.B.C.checksum.txt.asc djangoproject.com:/home/www/www/media/pgp/Django-A.B.C.checksum.txt
+ Version
+ Must match the version number as defined in the tarball
+ (``django-<version>.tar.gz``). For example: "5.2", "4.1.1", or "4.2rc1".
- (If this is a security release, what follows should be done 15 minutes
- before the announced release time, no sooner.)
+ Is active
+ Set to False until the release is fully published (last step).
-#. Upload the release package(s) to the djangoproject server, replacing
- A.B. with the appropriate version number, e.g. 4.1 for a 4.1.x release:
+ LTS
+ Enable if the release is part of an :abbr:`LTS (Long Term Support)`
+ branch.
- .. code-block:: shell
+ Dates
+ Set the release date to today. This release will not be published until
+ ``is_active`` is enabled.
- $ scp Django-* djangoproject.com:/home/www/www/media/releases/A.B
+ Artifacts
+ Upload the tarball (``django-<version>.tar.gz``), wheel
+ (``django-<version>-py3-none-any.whl``), and checksum
+ (``django-<version>.checksum.txt.asc``) files created earlier.
#. Test that the release packages install correctly using ``pip``. Here's one
simple method (this just tests that the binaries are available, that they
install correctly, and that migrations and the development server start, but
it'll catch silly mistakes):
-
- .. code-block:: shell
-
- $ RELEASE_VERSION='4.1.1'
- $ MAJOR_VERSION=`echo $RELEASE_VERSION| cut -c 1-3`
-
- $ python -m venv django-pip-tarball
- $ . django-pip-tarball/bin/activate
- $ python -m pip install https://www.djangoproject.com/m/releases/$MAJOR_VERSION/Django-$RELEASE_VERSION.tar.gz
- $ django-admin startproject test_tarball
- $ cd test_tarball
- $ ./manage.py --help # Ensure executable bits
- $ python manage.py migrate
- $ python manage.py runserver
- <CTRL+C>
- $ deactivate
- $ cd .. && rm -rf test_tarball && rm -rf django-pip-tarball
-
- $ python -m venv django-pip-wheel
- $ . django-pip-wheel/bin/activate
- $ python -m pip install https://www.djangoproject.com/m/releases/$MAJOR_VERSION/Django-$RELEASE_VERSION-py3-none-any.whl
- $ django-admin startproject test_wheel
- $ cd test_wheel
- $ ./manage.py --help # Ensure executable bits
- $ python manage.py migrate
- $ python manage.py runserver
- <CTRL+C>
- $ deactivate
- $ cd .. && rm -rf test_wheel && rm -rf django-pip-wheel
+ https://code.djangoproject.com/wiki/ReleaseTestNewVersion.
#. Run the `confirm-release`__ build on Jenkins to verify the checksum file(s)
(e.g. use ``4.2rc1`` for
@@ -615,12 +606,15 @@ Now you're ready to actually put the release out there. To do this:
$ twine upload --repository django dist/*
-#. Go to the `Add release page in the admin`__, enter the new release number
- exactly as it appears in the name of the tarball
- (``Django-<version>.tar.gz``). So for example enter "4.1.1" or "4.2rc1",
- etc. If the release is part of an LTS branch, mark it so.
+#. Update the newly created ``Release`` in the admin in ``djangoproject.com``
+ and enable the ``is_active`` flag.
- __ https://www.djangoproject.com/admin/releases/release/add/
+#. Push your work and the new tag:
+
+ .. code-block:: shell
+
+ $ git push
+ $ git push --tags
#. Make the blog post announcing the release live.