{"title":"How to release Django","version":"6.0","locale":"ga","docname":"internals/howto-release-django","url":"/ga/6.0/internals/howto-release-django/","canonical":"https://djangodocs.dev/ga/6.0/internals/howto-release-django/","summary":"Míníonn an doiciméad seo conas Django a scaoiltear. ** Coinnigh na treoracha seo cothrom le dáta má dhéanann tú athruithe! ** Is é an pointe anseo a bheith…","html":"<h1>How to release Django<a class=\"heading-anchor\" href=\"#how-to-release-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Míníonn an doiciméad seo conas Django a scaoiltear.</p>\n<p>** Coinnigh na treoracha seo cothrom le dáta má dhéanann tú athruithe! ** Is é an pointe anseo a bheith tuairisciúil, gan oiriúnaitheach, mar sin bíodh leisce ort athruithe a shruthlíniú nó a dhéanamh ar shlí eile, ach**nuashonrú an doiciméad seo dá réir sin! **</p>\n<section id=\"overview\">\n<h2>Forbhreathnú<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tá trí chineál eisiúintí ann a d'fhéadfadh go mbeadh ort a dhéanamh:</p>\n<ul class=\"simple\">\n<li><p>Scaoiltí slándála: leochaileacht a nochtadh agus a shocrú De ghnáth beidh dhá nó trí eisiúint chomhuaineach i gceist leis seo - m.sh. 3.2.x, 4.0.x, agus, ag brath ar an uainiú, b'fhéidir 4.1.x.</p></li>\n<li><p>Eisiúintí leagan rialta: scaoileadh deiridh (m.sh. 4.1) nó nuashonrú bugfix (m.sh. 4.1.1).</p></li>\n<li><p>Réamh-eisiúintí: m.sh. 4.2 alfa, béite, nó rc.</p></li>\n</ul>\n<p>Is é an leagan gairid de na céimeanna atá i gceist ná:</p>\n<ol class=\"arabic simple\">\n<li><p>Más scaoileadh slándála é seo, déan an liosta dáilte slándála réamh-fógra seachtain roimh an eisiúint iarbhír.</p></li>\n<li><p>Cruthléigh na nótaí scaoilte, ag lorg earráidí eagraíochta agus scríbhneoireachta. Blagphost agus fógra ríomhphoist a dhréachtú.</p></li>\n<li><p>Update version numbers and create the release artifacts.</p></li>\n<li><p>Create the new <code class=\"docutils literal notranslate\">Release</code> in the admin on <code class=\"docutils literal notranslate\">djangoproject.com</code>.</p>\n<ol class=\"arabic simple\">\n<li><p>Set the proper date but ensure the flag <code class=\"docutils literal notranslate\">is_active</code> is disabled.</p></li>\n<li><p>Upload the artifacts (tarball, wheel, and checksums).</p></li>\n</ol>\n</li>\n<li><p>Fíoraigh sínithe pacáiste/na pacáistí, seiceáil an féidir iad a shuiteáil, agus cinntigh íosta feidhmiúlacht.</p></li>\n<li><p>Uaslódáil an leagan/na leaganacha nua chuig PyPi.</p></li>\n<li><p>Enable the <code class=\"docutils literal notranslate\">is_active</code> flag for each release in the admin on\n<code class=\"docutils literal notranslate\">djangoproject.com</code>.</p></li>\n<li><p>Postáil iontráil an bhlag agus seol amach na fógraí ríomhphoist.</p></li>\n<li><p>Update version numbers post-release in stable branch(es).</p></li>\n<li><p>Add stub release notes for the next patch release in <code class=\"docutils literal notranslate\">main</code> and backport.</p></li>\n</ol>\n<p>Tá go leor sonraí ann, mar sin léigh ar aghaidh le do thoil.</p>\n<aside class=\"admonition-use-the-checklists-app admonition\" id=\"checklist-generator\" role=\"note\">\n<p class=\"admonition-title\">Use the checklists app</p>\n<p>To generate a checklist compiling the tasks described below as relevant to\nthe specific release(s) you are issuing, use the checklists app in the\n<a class=\"reference external\" href=\"https://www.djangoproject.com/admin/checklists/\">project admin</a>. This\npopulates a lot of boilerplate you will need for announcements, CVE\npublication, and hashes for commit messages. By using this app for preparing\nsecurity issue metadata, your peer releasers can check your entries and\nconsult them again in the future. See <a class=\"reference external\" href=\"https://www.djangoproject.com/checklists/release/5.2.4/\">example checklist</a>.</p>\n</aside>\n</section>\n<section id=\"prerequisites\">\n<h2>Riachtanais<a class=\"heading-anchor\" href=\"#prerequisites\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Beidh cúpla rud ag teastáil uait sula dtosaíonn tú. Más é seo do chéad eisiúint, beidh ort comhordú a dhéanamh le scaoilteoir eile chun na rudaí seo go léir a líneáil suas, agus scríobh chuig liosta seoltaí Ops ag iarraidh an rochtain agus na ceadanna riachtanacha.</p>\n<ul>\n<li><p>Timpeallacht Unix leis na huirlisí seo suiteáilte (in ord aibítre):</p>\n<ul class=\"simple\">\n<li><p>bash</p></li>\n<li><p>git</p></li>\n<li><p>GPG</p></li>\n<li><p>déanamh</p></li>\n<li><p>fear</p></li>\n<li><p>uirlisí hashing (de ghnáth <code class=\"docutils literal notranslate\">md5sum ``, `sha1sum</code>, agus <code class=\"docutils literal notranslate\">sha256sum</code> ar Linux, nó <code class=\"docutils literal notranslate\">md5</code> agus shasum` ar macOS)</p></li>\n<li><p>python</p></li>\n</ul>\n</li>\n<li><p>Péire eochair GPG. Cinntigh go bhfuil an chuid príobháideach den eochair seo stóráilte go daingean. Ní mór an chuid poiblí a uaslódáil chuig do chuntas GitHub, agus chuig freastalaí Jenkins a reáchtáil an post “scaoileadh deimhnithe”.</p>\n<aside class=\"admonition-more-than-one-gpg-key admonition\" role=\"note\">\n<p class=\"admonition-title\">Níos mó ná eochair GPG amháin</p>\n<p>Mura bhfuil an eochair is mian leat a úsáid d'eochair shínithe réamhshocraithe, beidh ort -u you&#64;example.com ``a chur le gach ordú sínithe GPG a thaispeántar thíos, áit ar` <a class=\"reference external\" href=\"mailto:you&#37;&#52;&#48;example&#46;com\">you<span>&#64;</span>example<span>&#46;</span>com</a> <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>an seoladh ríomhphoist a bhaineann leis an eochair is mian leat a úsáid.</p>\n</aside>\n</li>\n<li><p>A clean Python virtual environment (Python 3.9+) to build artifacts, with\nthese required Python packages installed:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ python -m pip install build twine\n</code></pre></div>\n</li>\n<li><p>Access to <a class=\"reference external\" href=\"https://pypi.org/project/Django/\">Django's project on PyPI</a> to\nupload binaries, ideally with extra permissions to <a class=\"reference external\" href=\"https://pypi.org/help/#yanked\">yank a release</a> if necessary. Create a project-scoped token\nfollowing the <a class=\"reference external\" href=\"https://pypi.org/help/#apitoken\">official documentation</a>\nand set up your <code class=\"docutils literal notranslate\">$HOME/.pypirc</code> file like this:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"ini\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">~/.pypirc</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Ini</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Ini code\"><code><span class=\"k\">[distutils]</span>\n  <span class=\"na\">index-servers</span> <span class=\"o\">=</span>\n    <span class=\"na\">pypi</span>\n    <span class=\"na\">django</span>\n\n<span class=\"k\">[pypi]</span>\n  <span class=\"na\">username</span> <span class=\"o\">=</span> <span class=\"s\">__token__</span>\n  <span class=\"na\">password</span> <span class=\"o\">=</span> <span class=\"c1\"># User-scoped or project-scoped token, to set as the default.</span>\n\n<span class=\"k\">[django]</span>\n  <span class=\"na\">repository</span> <span class=\"o\">=</span> <span class=\"s\">https://upload.pypi.org/legacy/</span>\n  <span class=\"na\">username</span> <span class=\"o\">=</span> <span class=\"s\">__token__</span>\n  <span class=\"na\">password</span> <span class=\"o\">=</span> <span class=\"c1\"># A project token.</span>\n</code></pre></figure>\n</li>\n<li><p>Access to <a class=\"reference external\" href=\"https://app.transifex.com/django/django/\">Django's project on Transifex</a>, with a Manager role. Generate\nan API Token in the <a class=\"reference external\" href=\"https://app.transifex.com/user/settings/api/\">user setting section</a> and set up your\n<code class=\"docutils literal notranslate\">$HOME/.transifexrc</code> file like this:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"ini\"><figcaption class=\"code-block-caption\"><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>~/.transifexrc ``</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Ini</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Ini code\"><code><span class=\"k\">[https://www.transifex.com]</span>\n  <span class=\"na\">rest_hostname</span> <span class=\"o\">=</span> <span class=\"s\">https://rest.api.transifex.com</span>\n  <span class=\"na\">token</span> <span class=\"o\">=</span> <span class=\"c1\"># API token</span>\n</code></pre></figure>\n</li>\n<li><p>Rochtain ar riarachán Django ar <code class=\"docutils literal notranslate\">djangoproject.com</code> mar “cothabhálaí láithreáin”.</p></li>\n<li><p>Access to create a post in the <a class=\"reference external\" href=\"https://forum.djangoproject.com/c/announcements/7\">Django Forum - Announcements category</a> and to send emails to\nthe <a class=\"reference external\" href=\"https://groups.google.com/g/django-announce/\">django-announce</a>\nmailing list.</p></li>\n<li><p>Rochtain ar an repo `` django-security`` i GitHub. I measc rudaí eile, soláthraíonn sé seo rochtain ar an liosta dáileacháin réamhfhógraí (a theastaíonn le haghaidh tascanna ullmhúcháin um scaoileadh slándála).</p></li>\n<li><p>Access to the Django project on <a class=\"reference external\" href=\"https://readthedocs.org/projects/django/\">Read the Docs</a>.</p></li>\n</ul>\n</section>\n<section id=\"pre-release-tasks\">\n<h2>Tascanna réamhscaoilte<a class=\"heading-anchor\" href=\"#pre-release-tasks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ní mór aire a thabhairt do chúpla earra sula dtosaíonn tú fiú leis an bpróiseas scaoilte. Tosaíonn an stuif seo thart ar sheachtain roimh an scaoileadh; is féidir an chuid is mó de a dhéanamh am ar bith chun an scaoileadh iarbhír.</p>\n<section id=\"or-more-days-before-a-security-release\">\n<h3>10 lá (nó níos mó) roimh scaoileadh slándála<a class=\"heading-anchor\" href=\"#or-more-days-before-a-security-release\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<ol class=\"arabic\">\n<li><p>Reserve one <a class=\"reference external\" href=\"https://www.cve.org/About/Overview/\">CVE ID</a> per security\nissue as follows. (Or, if you lack CNA credentials, email\n<code class=\"docutils literal notranslate\">cna&#64;djangoproject.com</code> with a request.)</p>\n<ul>\n<li><p>Enable virtual environment with <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/cvelib/\">cvelib</a> installed.</p></li>\n<li><p>Export user information:</p>\n<blockquote>\n<div><div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ <span class=\"nb\">export</span> <span class=\"nv\">CVE_USER</span><span class=\"o\">=</span>&lt;user-email&gt;@djangoproject.com <span class=\"nv\">CVE_ORG</span><span class=\"o\">=</span>DSF\n</code></pre></div>\n</div></blockquote>\n</li>\n<li><p>Reserve:</p>\n<blockquote>\n<div><div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ cve --interactive reserve &lt;quantity&gt;\n</code></pre></div>\n</div></blockquote>\n</li>\n</ul>\n</li>\n<li><p>Ginigh an paiste/paistí (príobháideacha) ábhartha ag baint úsáide as <code class=\"docutils literal notranslate\">git format-patch</code>, ceann don bhrainse <code class=\"docutils literal notranslate\">príom</code> agus ceann do gach brainse chobhsaí atá á phaiteáil.</p></li>\n</ol>\n</section>\n<section id=\"a-week-before-a-security-release\">\n<h3>Seachtain roimh scaoileadh slándála<a class=\"heading-anchor\" href=\"#a-week-before-a-security-release\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<ol class=\"arabic\">\n<li><p>Send out pre-notification exactly <strong>one week</strong> before the security release.\nThe template for that email and a list of the recipients are in the private\n<code class=\"docutils literal notranslate\">django-security</code> GitHub wiki. BCC the pre-notification recipients, and be\nsure to include the relevant CVE IDs. Attach all the relevant patches\n(targeting <code class=\"docutils literal notranslate\">main</code> and the stable branches), and sign the email text with\nthe key you'll use for the release, with a command like:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ gpg --clearsign --digest-algo SHA256 prenotification-email.txt\n</code></pre></div>\n</li>\n<li><p><a class=\"reference internal\" href=\"/ga/6.0/internals/security/#security-disclosure\"><span class=\"std std-ref\">Notify django-announce</span></a> of the upcoming\nsecurity release with a general message such as:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>Notice of upcoming Django security releases (3.2.24, 4.2.10 and 5.0.2)\n\nDjango versions 5.0.2, 4.2.10, and 3.2.24 will be released on Tuesday,\nFebruary 6th, 2024 around 1500 UTC. They will fix one security defect\nwith severity &quot;moderate&quot;.\n\nFor details of severity levels, see:\nhttps://docs.djangoproject.com/en/dev/internals/security/#how-django-discloses-security-issues\n</code></pre></div>\n</li>\n<li><p>Prepare issue metadata:\n* Severity\n* Short description\n* Reporter\n* Remediator\n* Reported at\n* Confirmed at (usually date CVE reserved)\n* CWE Problem Type\n* CAPEC Impact Type\n* CVSS (4.0) Score &amp; Vector</p></li>\n</ol>\n</section>\n<section id=\"a-few-days-before-any-release\">\n<h3>Cúpla lá roimh aon scaoileadh<a class=\"heading-anchor\" href=\"#a-few-days-before-any-release\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<ol class=\"arabic\">\n<li><p>As the release approaches, watch Trac to make sure no release blockers are\nleft for the upcoming release. Under exceptional circumstances, such as to\nmeet a pre-determined security release date, a release could still go ahead\nwith an open release blocker. The releaser is trusted with the decision to\nrelease with an open release blocker or to postpone the release date of a\nnon-security release if required.</p></li>\n<li><p>Seiceáil leis na cumaisc eile chun a chinntiú nach bhfuil aon athruithe neamhthiomanta acu don scaoileadh.</p></li>\n<li><p>Léigh na nótaí scaoilte, lena n-áirítear féachaint ar an leagan ar líne chó:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>gabháil aon naisc bhriste &lt;documentation-link-check&gt;`nó earráidí REST, agus déan cinnte go bhfuil an dáta ceart sna nótaí scaoilte.</p></li>\n<li><p>Seiceáil faoi dhó go luann na nótaí scaoilte amlínte míshuaimseartha d'aon APIs a tugadh faoi deara mar atá díscothaithe, agus go luann siad aon athruithe i dtacaíocht leagan Python.</p></li>\n<li><p>Seiceáil faoi dhó go bhfuil nasc ag an innéacs nótaí scaoilte leis na nótaí don eisiúint nua; beidh sé seo i docs/releases/index.txt`.</p></li>\n<li><p>If this is a <a class=\"reference internal\" href=\"/ga/6.0/internals/release-process/#term-Feature-release\"><span class=\"xref std std-term\">feature release</span></a>, ensure translations from Transifex\nhave been integrated.</p>\n<p>In addition to having a configured Transifex account, ensure that the <a class=\"reference external\" href=\"https://developers.transifex.com/docs/cli\">tx\nCLI</a> is available in your\n<code class=\"docutils literal notranslate\">PATH</code>. You can then fetch all translations since a given date by running:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ python scripts/manage_translations.py fetch -v <span class=\"m\">1</span> --since<span class=\"o\">=</span>&lt;some date&gt;\n</code></pre></div>\n<p>To determine a good value for <code class=\"docutils literal notranslate\">--since</code>, check the date of the most recent\ncommit with wording similar to <code class=\"docutils literal notranslate\">Updated translations from Transifex</code> and\nuse a date a few days prior.</p>\n<p>Tógann an t-ordú seo roinnt ama le rith. Nuair a dhéantar é, iniúchadh cúramach ar an aschur le haghaidh earráidí agus/nó rabhaidh Má tá roinnt ann, beidh ort iad a dhífhabhtú agus a réiteach ar bhonn cás ar chás.</p>\n<p>Teastaíonn coigeartú láimhe ó na haistriúcháin a fuarthas le Ar an gcéad dul síos, caithfear na luachanna Po-Revision-Date ``a bhualadh de láimh le go mbeidh siad níos déanaí ná ``Pot-Creation-Date`. Is féidir leat ordú cosúil leis seo a úsáid chun na comhaid <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>.po <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>go léir a nuashonrú mórchóir (comparáid idir an diff i gcoinne an bhrainse chobhsaí ábhartha):</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ git diff --name-only stable/5.0.x <span class=\"p\">|</span> grep <span class=\"s2\">&quot;\\.po&quot;</span>  <span class=\"p\">|</span> xargs sed -ri <span class=\"s2\">&quot;s/PO-Revision-Date: [0-9\\-]+ /PO-Revision-Date: </span><span class=\"k\">$(</span>date -I<span class=\"k\">)</span><span class=\"s2\"> /g&quot;</span>\n</code></pre></div>\n<p>Lastly, commit the changed/added files (both <code class=\"docutils literal notranslate\">.po</code> and <code class=\"docutils literal notranslate\">.mo</code>) and create\na new PR targeting the stable branch of the corresponding release (example\n<a class=\"reference external\" href=\"https://github.com/django/django/pull/16715\">PR updating translations for 4.2</a>).</p>\n<p>Once merged, forward port the changes into <code class=\"docutils literal notranslate\">main</code> (<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/cb27e5b9c0703fb0edd70b2138e3e53a78c9551d\">example commit</a>).</p>\n</li>\n<li><p>&lt;django-admin-manpage&gt;:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Nuashonraigh an leathanach lámhleabhar django-admin <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ <span class=\"nb\">cd</span> docs\n$ make man\n$ man _build/man/django-admin.1  <span class=\"c1\"># do a quick sanity check</span>\n$ cp _build/man/django-admin.1 man/django-admin.1\n</code></pre></div>\n<p>agus ansin an leathanach fear athraithe a thiomnú.</p>\n</li>\n<li><p>If this is the &quot;dot zero&quot; release of a new series, create a new branch from\nthe current stable branch in the <a class=\"reference external\" href=\"https://github.com/django/django-docs-translations\">django-docs-translations</a> repository. For\nexample, when releasing Django 4.2:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ git checkout -b stable/4.2.x origin/stable/4.1.x\n$ git push origin stable/4.2.x:stable/4.2.x\n</code></pre></div>\n</li>\n<li><p>Scríobh an bhlagphost fógra don scaoileadh. Is féidir leat é a iontráil isteach sa riarachán ag am ar bith agus é a mharcáil mar neamhghníomhach. Seo cúpla sampla: <a href=\"#id12\"><span class=\"problematic\" id=\"id13\">`sampla fógra scaoilte slándála `__, `sampla fógra scaoilte rialta `__, `fógra réamh-scaoilte sampla`__</span></a>.</p></li>\n</ol>\n<section id=\"a-few-days-before-a-feature-freeze\">\n<h4>A few days before a feature freeze<a class=\"heading-anchor\" href=\"#a-few-days-before-a-feature-freeze\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>In preparation for the alpha release, the directory\n<code class=\"docutils literal notranslate\">/home/www/www/media/releases/A.B</code> must be created on the djangoproject\nserver.</p>\n<p>Before the feature freeze, a branch targeting <code class=\"docutils literal notranslate\">main</code> must be created to\nprepare for the next feature release. It should be reviewed and approved a few\ndays before the freeze, allowing it to be merged after the stable branch is\ncut. The following items should be addressed in this branch:</p>\n<ol class=\"arabic simple\">\n<li><p>Update the <code class=\"docutils literal notranslate\">VERSION</code> tuple in <code class=\"docutils literal notranslate\">django/__init__.py</code>, incrementing to the\nnext expected release (<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/96700c7b378c592f0b1732302c22af2fd2c87fc6\">example commit</a>).</p></li>\n<li><p>Create a stub release note for the next feature release. Use the stub from\nthe previous feature release or copy the contents from the current version\nand delete most of the contents leaving only the headings\n(<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/9b5ad4056ccf9ff7ea548f72d28eb66c1b4f84cc\">example commit</a>).</p></li>\n<li><p>Remove <code class=\"docutils literal notranslate\">.. versionadded::</code> and <code class=\"docutils literal notranslate\">.. versionchanged::</code> annotations in the\ndocumentation from two releases ago, as well as any remaining older\nannotations. For example, in Django 5.1, notes for 4.2 will be removed\n(<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/9edb7833b89e811eefd94974fb987f4605b0c0d7\">example commit</a>).</p></li>\n<li><p>Remove features that have reached the end of their deprecation cycle,\nincluding their docs and the <code class=\"docutils literal notranslate\">.. deprecated::</code> annotation. Each removal\nshould be done in a separate commit for clarity. In the commit message, add\na <code class=\"docutils literal notranslate\">Refs #XXXXX --</code> prefix linking to the original ticket where the\ndeprecation began if possible. Make sure this gets noted in the removed\nfeatures section in the release notes (<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/f2d9c76aa7096ef3eed675b9eb824858f9dd81e5\">example commit</a>).</p></li>\n<li><p>Increase the default PBKDF2 iterations in\n<code class=\"docutils literal notranslate\">django.contrib.auth.hashers.PBKDF2PasswordHasher</code> by about 20%\n(pick a round number). Run the tests, and update the 3 failing\nhasher tests with the new values. Make sure this gets noted in the\nrelease notes (<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/7288866da4dddf3705148c703421858ec19cdb78\">example commit</a>).</p></li>\n</ol>\n<p>Concrete examples for past feature release bootstrap branches: <a class=\"reference external\" href=\"https://github.com/django/django/pull/18127\">5.2 bootstrap</a>, <a class=\"reference external\" href=\"https://github.com/django/django/pull/17246\">5.1 bootstrap</a>, <a class=\"reference external\" href=\"https://github.com/django/django/pull/16432\">5.0 bootstrap</a>.</p>\n</section>\n</section>\n</section>\n<section id=\"feature-freeze-tasks\">\n<h2>Feature freeze tasks<a class=\"heading-anchor\" href=\"#feature-freeze-tasks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<ol class=\"arabic\">\n<li><p>Remove empty sections from the release notes (<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/9e6e58bad237a80ddd5e3ab8b834cecdaad8455e\">example commit</a>).</p></li>\n<li><p>Build the release notes locally and read them. Make any necessary change\nto improve flow or fix grammar (<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/435bdab93889dae01e71c79598edab10627cc1f9\">example commit</a>).</p></li>\n<li><p>Create a new stable branch from <code class=\"docutils literal notranslate\">main</code>. Be sure to fetch and update\n<code class=\"docutils literal notranslate\">upstream</code> to latest. For example, when feature freezing Django 5.2:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ git fetch upstream\n$ git checkout -b stable/5.2.x upstream/main\n$ git push upstream -u stable/5.2.x:stable/5.2.x\n</code></pre></div>\n<p>At the same time, update the <code class=\"docutils literal notranslate\">django_next_version</code> variable in\n<code class=\"docutils literal notranslate\">docs/conf.py</code> on the stable release branch to point to the new\ndevelopment version. For example, when creating <code class=\"docutils literal notranslate\">stable/5.2.x</code>, set\n<code class=\"docutils literal notranslate\">django_next_version</code> to <code class=\"docutils literal notranslate\">'6.0'</code> on the new stable branch\n(<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/1eb62e5b622ef7fd6e0123d8bbf6662d893d5d08\">example commit</a>).</p>\n</li>\n<li><p>Create <code class=\"docutils literal notranslate\">Release</code> entries for the next version in the <a href=\"#id12\"><span class=\"problematic\" id=\"id14\">`admin`__</span></a> on\n<code class=\"docutils literal notranslate\">djangoproject.com</code>. Add one for each milestone (alpha, beta, rc, and\nfinal), leaving <em>is active</em> unset to mark them as unreleased. Set target\ndates per the agreed schedule, and set the LTS flag if applicable. The\n<code class=\"docutils literal notranslate\">X.Y</code> roadmap page will be available at <code class=\"docutils literal notranslate\">/download/X.Y/roadmap/</code>.</p>\n<p>For example, when creating <code class=\"docutils literal notranslate\">stable/5.2.x</code>, add <code class=\"docutils literal notranslate\">Release</code> entries for\n<code class=\"docutils literal notranslate\">6.0a1</code>, <code class=\"docutils literal notranslate\">6.0b1</code>, <code class=\"docutils literal notranslate\">6.0rc1</code>, and <code class=\"docutils literal notranslate\">6.0</code>. The <code class=\"docutils literal notranslate\">6.0</code> roadmap can be\nthen reviewed at <a class=\"reference external\" href=\"https://www.djangoproject.com/download/6.0/roadmap/\">https://www.djangoproject.com/download/6.0/roadmap/</a>.</p>\n</li>\n<li><p>Go to the <a href=\"#id12\"><span class=\"problematic\" id=\"id15\">`Add document release page in the admin`__</span></a>, create a new\n<code class=\"docutils literal notranslate\">DocumentRelease</code> object for the English language for the newly created\n<code class=\"docutils literal notranslate\">Release</code> object. Do not mark this as default.</p>\n</li>\n<li><p>Add the new branch to <a class=\"reference external\" href=\"https://readthedocs.org/projects/django/\">Read the Docs</a>. Since the automatically\ngenerated version names (&quot;stable-A.B.x&quot;) differ from the version names used\nin Read the Docs (&quot;A.B.x&quot;), update the Read the Docs config for the version\nto point to the slug <code class=\"docutils literal notranslate\">A.B.x</code> and set it as active. <a class=\"reference external\" href=\"https://github.com/readthedocs/readthedocs.org/issues/12483\">See more details</a>.</p></li>\n<li><p><a class=\"reference external\" href=\"https://github.com/pypa/trove-classifiers/pulls?q=is%3Apr+django+trove+classifier\">Create a PR on PyPI proposing the new Trove classifier</a>.\nFor example <code class=\"docutils literal notranslate\">Framework :: Django :: 5.2</code>.</p></li>\n<li><p>Update the current branch under active development and add pre-release\nbranch in the <a class=\"reference external\" href=\"https://code.djangoproject.com/#Djangoreleaseprocess\">Django release process</a> on Trac.</p></li>\n<li><p>Update the <code class=\"docutils literal notranslate\">docs/fixtures/doc_releases.json</code> JSON fixture for\ndjangoproject.com, so people without access to the production DB can still\nrun an up-to-date copy of the docs site\n(<a class=\"reference external\" href=\"https://github.com/django/djangoproject.com/pull/1446\">example PR</a>).\nThis will be merged after the final release.</p></li>\n</ol>\n</section>\n<section id=\"actually-rolling-the-release\">\n<h2>I ndáiríre an scaoilte<a class=\"heading-anchor\" href=\"#actually-rolling-the-release\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ceart go leor, is é seo an chuid spraíúil, áit a bhrúimid scaoileadh amach i ndáiríre! Má tá tú ag eisiúint <strong>ileisiúint</strong>, déan na céimeanna seo arís do gach scaoileadh.</p>\n<ol class=\"arabic\">\n<li><p>Seiceáil go bhfuil <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Jenkins <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>__ glas don leagan/na leaganacha atá tú ag cur amach. Is dócha nár cheart duit scaoileadh a eisiúint go dtí go mbeidh sé glas, agus ba cheart duit a chinntiú go gcuimsíonn an rith glas is déanaí na hathruithe atá á scaoileadh agat.</p>\n</li>\n<li><p>Glan na nótaí scaoilte don eisiúint seo. Déan na hathruithe seo i <code class=\"docutils literal notranslate\">príom</code> agus backport chuig gach brainse ina bhfuil na nótaí scaoilte do leagan áirithe suite.</p>\n<ol class=\"arabic simple\">\n<li><p>&lt;1994a2643881a9e3f9fa8d3e0794c1a9933a1831&gt;Le haghaidh scaoileadh gné, bain an ceannteideal <code class=\"docutils literal notranslate\">UNDER DEVELOPMENT</code> ag barr na nótaí scaoilte, bain an réimír <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Táthas ag súil leis <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>agus nuashonraigh an dáta scaoilte, más gá (:commit: <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>example commit <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>).</p></li>\n<li><p>&lt;34a503162fe222033a1cd3249bccad014fcd1d20&gt;Le haghaidh scaoileadh paiste, bain an réimír <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Táim ag súil leis <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>agus nuashonraigh an dáta scaoilte do gach eisiúint, más gá (:commit: <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>example commit <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>).</p></li>\n</ol>\n</li>\n<li><p>Tosaíonn scaoileadh i gcónaí ó bhrainse scaoilte, mar sin ba cheart duit a chinntiú go bhfuil tú ar bhrainse cobhsaí cothro Chomh maith leis sin, ba cheart go mbeadh timpeallacht fhíorúil glan tiomnaithe ar fáil agat in aghaidh an leagan atá Mar shampla:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ git checkout stable/4.1.x\n$ git pull\n</code></pre></div>\n</li>\n<li><p>Más scaoileadh slándála é seo, cumaisc na paistí cuí ó django-slándáil `. Athbhunaigh na paistí seo de réir mar is gá chun tiomantas simplí a dhéanamh ar gach ceann ar an mbrainse scaoilte seachas tiomantas cumaisc. Chun é seo a chinntiú, déan iad a chumasc leis an bhratach <code class=\"docutils literal notranslate\">--ff-only</code>; mar shampla:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ git checkout stable/4.1.x\n$ git merge --ff-only security/4.1.x\n</code></pre></div>\n<p>(Glacann sé leis seo gur brainse sa repo <code class=\"docutils literal notranslate\">django-slándála</code> ina bhfuil na paistí slándála riachtanacha don chéad eisiúint eile sa tsraith 4.1 é slándálaí/4.1.x`.)</p>\n<p>Má dhiúltaíonn git cumasc le <code class=\"docutils literal notranslate\">--ff-only</code>, aistrigh go dtí an brainse paiste slándála agus athbhunaigh é ar an mbrainse atá ar tí é a chumasc isteach (<code class=\"docutils literal notranslate\">git checkout security/4.1.x; git rebase stable/4.1.x</code>) agus ansin athraigh ar ais agus déan an cumaisc. Déan cinnte go míníonn an teachtaireacht tiomanta do gach socrú slándála gur socrú slándála é an tiomantas agus go leanfaidh fógra (:commit: example security commit &lt;bf39978a53f117ca02e9a0c78b76664a41a54745&gt;).</p>\n</li>\n<li><p>Nuashonraigh an uimhir leagan i <code class=\"docutils literal notranslate\">django/__init__.py</code> don scaoileadh. &lt;2719a7f8c161233f45d34b624a9df9392c86cc1b&gt;Féach le do thoil <a class=\"reference internal\" href=\"#notes-on-setting-the-version-tuple\">nótaí maidir le feadán VERSION a shocraí</a> thíos le haghaidh sonraí faoi VERSION` (:commit: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>example commit <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>).</p>\n<ol class=\"arabic simple\">\n<li><p>If this is a pre-release package also update the &quot;Development Status&quot;\ntrove classifier in <code class=\"docutils literal notranslate\">pyproject.toml</code> to reflect this. An <code class=\"docutils literal notranslate\">rc</code>\npre-release should not change the trove classifier (<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/759921c8e9ad151932fc913ab429fef0a6112ef8\">example\ncommit for alpha release</a>,\n<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/25fec8940b24107e21314ab6616e18ce8dec1c1c\">example commit for beta release</a>).</p></li>\n<li><p>Seachas sin, déan cinnte go bhfuil an aicmitheoir socraithe go <code class=\"docutils literal notranslate\">Stádas Forbartha:: 5 - Táirgeacht/Cobhsa</code>.</p></li>\n</ol>\n</li>\n</ol>\n<section id=\"building-the-artifacts\">\n<h3>Building the artifacts<a class=\"heading-anchor\" href=\"#building-the-artifacts\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition-optionally-use-helper-scripts admonition\" role=\"note\">\n<p class=\"admonition-title\">Optionally use helper scripts</p>\n<p>You can streamline some of the steps below using helper scripts from the\n<code class=\"docutils literal notranslate\">scripts</code> folder:</p>\n<ul class=\"simple\">\n<li><p>Release script example run:</p></li>\n</ul>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ <span class=\"nv\">PGP_KEY_ID</span><span class=\"o\">=</span>&lt;key-id&gt; <span class=\"nv\">PGP_KEY_URL</span><span class=\"o\">=</span>&lt;key-url&gt; <span class=\"nv\">DEST_FOLDER</span><span class=\"o\">=</span>~/releases scripts/do_django_release.py\n</code></pre></div>\n<ul class=\"simple\">\n<li><p>Verify the release (after artifacts were uploaded):</p></li>\n</ul>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ <span class=\"nv\">VERSION</span><span class=\"o\">=</span><span class=\"m\">5</span>.2.1 scripts/verify_release.sh\n</code></pre></div>\n</aside>\n<ol class=\"arabic\">\n<li><p>Clibeáil an scaoileadh ag baint úsáide as <code class=\"docutils literal notranslate\">git tag</code>. Mar shampla:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ git tag --sign --message<span class=\"o\">=</span><span class=\"s2\">&quot;Tag 4.1.1&quot;</span> <span class=\"m\">4</span>.1.1\n</code></pre></div>\n<p>&lt;tag&gt;Is féidir leat do chuid oibre a sheiceáil ag rith <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>git tag --verify <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n</li>\n<li><p>Déan cinnte go bhfuil crann go hiomlán glan agat trí git clean -dfx` a reáchtáil.</p></li>\n<li><p>Run <code class=\"docutils literal notranslate\">python -m build</code> to generate the release packages. This will create\nthe release artifacts (tarball and wheel) in a <code class=\"docutils literal notranslate\">dist/</code> directory. For\nDjango 5.0 or older, you need to run <code class=\"docutils literal notranslate\">make -f extras/Makefile</code> instead.</p></li>\n<li><p>Ginigh hashes na bpacáistí scaoilte:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ <span class=\"nb\">cd</span> dist\n$ md5sum *\n$ sha1sum *\n$ sha256sum *\n</code></pre></div>\n</li>\n<li><p>Cruthaigh comhad “checksums”, <code class=\"docutils literal notranslate\">Django- &lt;&lt;VERSION&gt; &gt; .checksum.txt</code> ina bhfuil na hashes agus scaoil faisnéis. Tosaigh leis an teimpléad seo agus cuir isteach an leagan ceart, an dáta, an ID eochair GPG (ó gpg --list-keys --keyid-format LONG `), ainm úsáideora GitHub bainisteora scaoilte, URL scaoilte, agus seicsuimeanna:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>This file contains MD5, SHA1, and SHA256 checksums for the source-code\ntarball and wheel files of Django &lt;&lt;VERSION&gt;&gt;, released &lt;&lt;DATE&gt;&gt;.\n\nTo use this file, you will need a working install of PGP or other\ncompatible public-key encryption software. You will also need to have\nthe Django release manager&#39;s public key in your keyring. This key has\nthe ID ``XXXXXXXXXXXXXXXX`` and can be imported from GitHub, for example,\nif using the open-source GNU Privacy Guard implementation of PGP:\n\n    curl https://github.com/&lt;&lt;RELEASE MANAGER GITHUB USERNAME&gt;&gt;.gpg | gpg --import -\n\nOnce the key is imported, verify this file:\n\n    gpg --verify &lt;&lt;THIS FILENAME&gt;&gt;\n\nOnce you have verified this file, you can use normal MD5, SHA1, or SHA256\nchecksumming applications to generate the checksums of the Django\npackage and compare them to the checksums listed below.\n\nRelease packages\n================\n\nhttps://www.djangoproject.com/download/&lt;&lt;VERSION&gt;&gt;/tarball/\nhttps://www.djangoproject.com/download/&lt;&lt;VERSION&gt;&gt;/wheel/\n\nMD5 checksums\n=============\n\n&lt;&lt;MD5SUM&gt;&gt;  &lt;&lt;RELEASE TAR.GZ FILENAME&gt;&gt;\n&lt;&lt;MD5SUM&gt;&gt;  &lt;&lt;RELEASE WHL FILENAME&gt;&gt;\n\nSHA1 checksums\n==============\n\n&lt;&lt;SHA1SUM&gt;&gt;  &lt;&lt;RELEASE TAR.GZ FILENAME&gt;&gt;\n&lt;&lt;SHA1SUM&gt;&gt;  &lt;&lt;RELEASE WHL FILENAME&gt;&gt;\n\nSHA256 checksums\n================\n\n&lt;&lt;SHA256SUM&gt;&gt;  &lt;&lt;RELEASE TAR.GZ FILENAME&gt;&gt;\n&lt;&lt;SHA256SUM&gt;&gt;  &lt;&lt;RELEASE WHL FILENAME&gt;&gt;\n</code></pre></div>\n</li>\n<li><p>&lt;version&gt;Sínigh an comhad seiceála (<code class=\"docutils literal notranslate\">gpg --clearsign --digest-algo SHA256 Django- .checksum.txt</code>). &lt;version&gt;Gineann sé seo doiciméad sínithe, <code class=\"docutils literal notranslate\">Django- &lt;version&gt;.checksum.txt.asc</code> ar féidir leat a fhíorú ansin ag baint úsáide as <code class=\"docutils literal notranslate\">gpg --verify Django- .checksum.txt.asc</code>.</p></li>\n</ol>\n</section>\n</section>\n<section id=\"making-the-release-s-available-to-the-public\">\n<h2>An scaoileadh (í) a chur ar fáil don phobal<a class=\"heading-anchor\" href=\"#making-the-release-s-available-to-the-public\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Anois tá tú réidh chun an scaoileadh a chur amuigh ansin i ndáiríre. Chun seo a dhéanamh:</p>\n<ol class=\"arabic\">\n<li><p>Create a new <code class=\"docutils literal notranslate\">Release</code> entry in the <a class=\"reference external\" href=\"https://www.djangoproject.com/admin/releases/release/add/\">djangoproject.com's admin</a>. If this is a\nsecurity release, this should be done 15 minutes before the announced\nrelease time, no sooner:</p>\n<dl class=\"simple\">\n<dt>Leagan</dt><dd><p>Must match the version number as defined in the tarball\n(<code class=\"docutils literal notranslate\">django-&lt;version&gt;.tar.gz</code>). For example: &quot;5.2&quot;, &quot;4.1.1&quot;, or &quot;4.2rc1&quot;.</p>\n</dd>\n<dt>Is active</dt><dd><p>Set to False until the release is fully published (last step).</p>\n</dd>\n<dt>LTS</dt><dd><p>Enable if the release is part of an <abbr title=\"Long Term Support\">LTS</abbr>\nbranch.</p>\n</dd>\n<dt>Dates</dt><dd><p>Set the release date to today. This release will not be published until\n<code class=\"docutils literal notranslate\">is_active</code> is enabled.</p>\n</dd>\n<dt>Artifacts</dt><dd><p>Upload the tarball (<code class=\"docutils literal notranslate\">django-&lt;version&gt;.tar.gz</code>), wheel\n(<code class=\"docutils literal notranslate\">django-&lt;version&gt;-py3-none-any.whl</code>), and checksum\n(<code class=\"docutils literal notranslate\">django-&lt;version&gt;.checksum.txt.asc</code>) files created earlier.</p>\n</dd>\n</dl>\n</li>\n<li><p>Test that the release packages install correctly using <code class=\"docutils literal notranslate\">pip</code>. Here's one\nsimple method (this just tests that the binaries are available, that they\ninstall correctly, and that migrations and the development server start, but\nit'll catch silly mistakes):\n<a class=\"reference external\" href=\"https://code.djangoproject.com/wiki/ReleaseTestNewVersion\">https://code.djangoproject.com/wiki/ReleaseTestNewVersion</a>.</p></li>\n<li><p>Rith an tógáil <a href=\"#id12\"><span class=\"problematic\" id=\"id16\">`confirm-release`__</span></a> ar Jenkins chun an comhad (í) seicsum a fhíorú (m.sh. bain úsáid as 4.2rc1` le haghaidh <a class=\"reference external\" href=\"https://media.djangoproject.com/pgp/Django-4.2rc1.checksum.txt\">https://media.djangoproject.com/pgp/Django-4.2rc1.checksum.txt</a>).</p>\n</li>\n<li><p>Upload the release packages to PyPI:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ twine upload --repository django dist/*\n</code></pre></div>\n</li>\n<li><p>Update the newly created <code class=\"docutils literal notranslate\">Release</code> in the admin in <code class=\"docutils literal notranslate\">djangoproject.com</code>\nand enable the <code class=\"docutils literal notranslate\">is_active</code> flag.</p></li>\n<li><p>Brúigh do chuid oibre agus an chlib nua:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ git push\n$ git push --tags\n</code></pre></div>\n</li>\n<li><p>Déan an blag post ag fógairt an scaoileadh beo.</p></li>\n<li><p>Le haghaidh scaoileadh leagan nua (m.sh. 4.1, 4.2), nuashonraigh an leagan cobhsaí réamhshocraithe de na doiciméid tríd an bhratach <code class=\"docutils literal notranslate\">is_default</code> a fhilleadh go True` ar an réad cuí DocumentRelease` sa bhunachar sonraí docs.djangoproject.com (déanfaidh sé seo go huathoibríoch go False` do gach duine eile).</p>\n<p>Cruthaigh rudaí nua <code class=\"docutils literal notranslate\">DocumentRelease</code> do gach teanga a bhfuil iontráil aige don eisiúint roimhe seo. Nuashonraigh comhad <a href=\"#id12\"><span class=\"problematic\" id=\"id17\">`robots.docs.txt`__</span></a> djangoproject.com tríd an toradh a ghintear ón ordú manage_translations.py robots_txt` a reáchtáil sa bhrainse chobhsaí reatha ón stóras <a href=\"#id12\"><span class=\"problematic\" id=\"id18\">`django-docs-translationy`__</span></a>. Mar shampla, agus Django 4.2 á scaoileadh:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ git checkout stable/4.2.x\n$ git pull\n$ python manage_translations.py robots_txt\n</code></pre></div>\n</li>\n<li><p>Post the release announcement to the <a class=\"reference internal\" href=\"/ga/6.0/internals/mailing-lists/#django-announce-mailing-list\"><span class=\"std std-ref\">django-announce</span></a> mailing list and the\nDjango Forum. This should include a link to the announcement blog post.</p></li>\n<li><p>If this is a security release, publish the CVE metadata. (The\n<a class=\"reference internal\" href=\"#checklist-generator\"><span class=\"std std-ref\">checklist app</span></a> generates JSON for this.):</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ cve publish &lt;cve-number&gt; --cve-json-file &lt;path-to-file&gt;\n</code></pre></div>\n</li>\n<li><p>If this is a security release, send a separate email to\n<code class=\"docutils literal notranslate\">oss-security&#64;lists.openwall.com</code>. Provide &quot;Django&quot; plus the CVE IDs in\nthe subject line. The message body should include the vulnerability details,\nfor example, the announcement blog post text. Include a link to the\nannouncement blog post.</p></li>\n</ol>\n</section>\n<section id=\"post-release\">\n<h2>Iar-scaoileadh<a class=\"heading-anchor\" href=\"#post-release\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tá tú beagnach déanta! Níl le déanamh anois ach:</p>\n<ol class=\"arabic\">\n<li><p>If this is not a pre-release, update the <code class=\"docutils literal notranslate\">VERSION</code> tuple in\n<code class=\"docutils literal notranslate\">django/__init__.py</code> again, incrementing to whatever the next expected\nrelease will be. For example, after releasing 4.1.1, update <code class=\"docutils literal notranslate\">VERSION</code> to\n<code class=\"docutils literal notranslate\">VERSION = (4, 1, 2, 'alpha', 0)</code> (<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/a4d19953d46247ee1992b3427fe652e941524272\">example commit</a>).</p></li>\n<li><p>If this was an alpha release:</p>\n<ol class=\"arabic\">\n<li><p>Add the feature release version in <a class=\"reference external\" href=\"https://code.djangoproject.com/admin/ticket/versions\">Trac's versions list</a>.</p></li>\n<li><p>Create a new security branch from the freshly cut stable branch. Be sure\nto fetch and update <code class=\"docutils literal notranslate\">upstream</code> to latest. For example, after the 5.2\nalpha release:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ git fetch upstream\n$ git checkout -b security/5.2.x upstream/stable/5.2.x\n$ git push origin -u security/5.2.x:security/5.2.x\n</code></pre></div>\n</li>\n</ol>\n</li>\n<li><p>Más scaoileadh deiridh é seo:</p>\n<ol class=\"arabic simple\">\n<li><p>Update the <code class=\"docutils literal notranslate\">default_version</code> setting in the code.djangoproject.com's\n<code class=\"docutils literal notranslate\">trac.ini</code> file (<a class=\"reference external\" href=\"https://github.com/django/code.djangoproject.com/pull/268\">example PR</a>).</p></li>\n<li><p>Update the current stable branch and remove the pre-release branch in the\n<a class=\"reference external\" href=\"https://code.djangoproject.com/#Djangoreleaseprocess\">Django release process</a> on Trac.</p></li>\n<li><p>&lt; <a class=\"reference external\" href=\"https://github.com/django/djangoproject.com/pull/1444\">https://github.com/django/djangoproject.com/pull/1444</a>&gt;Nuashonraigh leathanach íoslódála djangoproject.com (<a href=\"#id12\"><span class=\"problematic\" id=\"id19\">`sampla PR`__</span></a>).</p></li>\n<li><p>Process the older versions that will reach End-Of-Mainstream and/or\nEnd-Of-Life support when this final release is published:</p>\n<ol class=\"arabic simple\">\n<li><p>Ensure that the EOL versions are mentioned in the blog post. See\n<a class=\"reference external\" href=\"https://www.djangoproject.com/weblog/2025/apr/02/django-52-released/\">example announcement</a>.</p></li>\n<li><p>Create a tag for the EOL stable branch and delete the stable branch.\nInspect and use the <code class=\"docutils literal notranslate\">scripts/archive_eol_stable_branches.py</code> helper.</p></li>\n</ol>\n</li>\n</ol>\n</li>\n<li><p>Más scaoileadh slándála a bhí ann, déan nuashonraithe:doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>/releases/security <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>le sonraí na saincheisteanna a ndearnadh aghaidh orthu.</p></li>\n<li><p>If this was a pre-release, the translation catalogs need to be updated:</p>\n<ol class=\"arabic\">\n<li><p>Make a new branch from the recently released stable branch:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ git checkout stable/A.B.x\n$ git checkout -b update-translations-catalog-A.B.x\n</code></pre></div>\n</li>\n<li><p>Ensure that the release's dedicated virtual environment is enabled and\nrun the following:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ <span class=\"nb\">cd</span> django\n$ django-admin makemessages -l en --domain<span class=\"o\">=</span>djangojs --domain<span class=\"o\">=</span>django\nprocessing locale en\n</code></pre></div>\n</li>\n<li><p>Make a pull request against the corresponding stable branch and merge\nonce approved.</p></li>\n<li><p>Forward port the updated source translations to the <code class=\"docutils literal notranslate\">main</code> branch\n(<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/aed303aff57ac990894b6354af001b0e8ea55f71\">example commit</a>).</p></li>\n</ol>\n</li>\n<li><p>If this was an <code class=\"docutils literal notranslate\">alpha</code> pre-release, coordinate with the maintainer of\n<a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/asgiref/\">asgiref</a> to determine when to raise the minimum version before the\nfinal release. For the backport, add an upper bound on the next major\nversion (example commits:\n<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/df35cf578f99522dd1ba864d513be95d47bab7a5\">main</a>,\n<a class=\"extlink-commit reference external\" href=\"https://github.com/django/django/commit/e5d2664908164d51d2daa46e375da8b6a93def03\">backport</a>).</p></li>\n<li><p>If this was an <code class=\"docutils literal notranslate\">rc</code> pre-release, call for translations for the upcoming\nrelease in the <a class=\"reference external\" href=\"https://forum.djangoproject.com/c/internals/i18n/14\">Django Forum - Internationalization category</a>.</p></li>\n</ol>\n</section>\n<section id=\"notes-on-setting-the-version-tuple\">\n<h2>Nótaí maidir leis an tuple VERSION a shocrú<a class=\"heading-anchor\" href=\"#notes-on-setting-the-version-tuple\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tá tuairisciú leagan Django á rialú ag an tuipéal <code class=\"docutils literal notranslate\">VERSION</code> i django/__init__.py`. Is tuple cúig ghné é seo, a bhfuil a n-eilimintí:</p>\n<ol class=\"arabic simple\">\n<li><p>Leagan mór.</p></li>\n<li><p>Leagan mion.</p></li>\n<li><p>Leagan micrea-leagan.</p></li>\n<li><p>Stádas - is féidir a bheith ar cheann de “alfa”, “béite”, “rc” nó “críochnaitheach”.</p></li>\n<li><p>Uimhir an tsraith, le haghaidh pacáistí alpha/beta/RC a ritheann i seicheamh (ag ceadú, mar shampla, “béita 1&quot;, “béite 2&quot;, srl.).</p></li>\n</ol>\n<p>Le haghaidh scaoileadh deiridh, bíonn an stádas “deiridh” i gcónaí agus is é uimhir na sraithe i gcónaí 0. Tuairiscítear uimhir shraith 0 le stádas “alfa” mar “réamh-alfa”.</p>\n<p>Roinnt samplaí:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">(4, 1, 1, “deiridh”, 0)</code> → “4.1.1&quot;</p></li>\n<li><p><code class=\"docutils literal notranslate\">(4, 2, 0, “alfa”, 0)</code> → “4.2 réamh-alfa”</p></li>\n<li><p><code class=\"docutils literal notranslate\">(4, 2, 0, “béite”, 1)</code> → “4.2 béite 1&quot;</p></li>\n</ul>\n</section>","rootId":"how-to-release-django","toc":[{"title":"Forbhreathnú","anchor":"overview","children":[]},{"title":"Riachtanais","anchor":"prerequisites","children":[]},{"title":"Tascanna réamhscaoilte","anchor":"pre-release-tasks","children":[{"title":"10 lá (nó níos mó) roimh scaoileadh slándála","anchor":"or-more-days-before-a-security-release","children":[]},{"title":"Seachtain roimh scaoileadh slándála","anchor":"a-week-before-a-security-release","children":[]},{"title":"Cúpla lá roimh aon scaoileadh","anchor":"a-few-days-before-any-release","children":[{"title":"A few days before a feature freeze","anchor":"a-few-days-before-a-feature-freeze","children":[]}]}]},{"title":"Feature freeze tasks","anchor":"feature-freeze-tasks","children":[]},{"title":"I ndáiríre an scaoilte","anchor":"actually-rolling-the-release","children":[{"title":"Building the artifacts","anchor":"building-the-artifacts","children":[]}]},{"title":"An scaoileadh (í) a chur ar fáil don phobal","anchor":"making-the-release-s-available-to-the-public","children":[]},{"title":"Iar-scaoileadh","anchor":"post-release","children":[]},{"title":"Nótaí maidir leis an tuple VERSION a shocrú","anchor":"notes-on-setting-the-version-tuple","children":[]}],"breadcrumbs":[{"docname":"internals/index","title":"Inmheánacha Django","url":"/ga/6.0/internals/"}],"prev":{"docname":"internals/git","title":"Stóráil cód foinse Django","url":"/ga/6.0/internals/git/"},"next":null,"formats":{"html":"/ga/6.0/internals/howto-release-django/","markdown":"/ga/6.0/internals/howto-release-django.md","json":"/ga/6.0/internals/howto-release-django.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/internals/howto-release-django.txt","official":"https://docs.djangoproject.com/ga/6.0/internals/howto-release-django/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}