浏览代码

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.
Baptiste Mispelon 1 月之前
父节点
当前提交
08dae5bd46
共有 1 个文件被更改,包括 60 次插入66 次删除
  1. 60 66
      docs/internals/howto-release-django.txt

+ 60 - 66
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.
 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.
 #. Proofread the release notes, looking for organization and writing errors.
    Draft a blog post and email announcement.
    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
 #. Verify package(s) signatures, check if they can be installed, and ensure
    minimal functionality.
    minimal functionality.
 
 
 #. Upload the new version(s) to PyPI.
 #. 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.
 #. 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.
 There are a lot of details, so please read on.
 
 
@@ -65,7 +71,6 @@ permissions.
   * hashing tools (typically ``md5sum``, ``sha1sum``, and ``sha256sum`` on
   * hashing tools (typically ``md5sum``, ``sha1sum``, and ``sha256sum`` on
     Linux, or ``md5`` and ``shasum`` on macOS)
     Linux, or ``md5`` and ``shasum`` on macOS)
   * python
   * python
-  * ssh
 
 
 * A GPG key pair. Ensure that the private part of this key is securely stored.
 * 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
   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
        rest_hostname = https://rest.api.transifex.com
        token = # API token
        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 the Django admin on ``djangoproject.com`` as a "Site maintainer".
 
 
 * Access to create a post in the `Django Forum - Announcements category
 * 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
 * Access to the ``django-security`` repo in GitHub. Among other things, this
   provides access to the pre-notification distribution list (needed for
   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
    #. Otherwise, make sure the classifier is set to
       ``Development Status :: 5 - Production/Stable``.
       ``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
    .. 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``.
 #. 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
 #. 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:
 #. Generate the hashes of the release packages:
 
 
@@ -521,8 +531,8 @@ issuing **multiple releases**, repeat these steps for each release.
     Release packages
     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
     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:
 Now you're ready to actually put the release out there. To do this:
 
 
-#. Upload the checksum file(s):
-
-   .. code-block:: shell
+#. 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:
 
 
-        $ 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
 #. Test that the release packages install correctly using ``pip``. Here's one
    simple method (this just tests that the binaries are available, that they
    simple method (this just tests that the binaries are available, that they
    install correctly, and that migrations and the development server start, but
    install correctly, and that migrations and the development server start, but
    it'll catch silly mistakes):
    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)
 #. Run the `confirm-release`__ build on Jenkins to verify the checksum file(s)
    (e.g. use ``4.2rc1`` for
    (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/*
        $ 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.
 #. Make the blog post announcing the release live.