Så här släpper du Django¶
Detta dokument förklarar hur du släpper Django.
Poängen här är att vara beskrivande, inte föreskrivande, så känn dig fri att effektivisera eller på annat sätt göra ändringar, men **uppdatera detta dokument i enlighet med detta!
Översikt¶
Det finns tre typer av releaser som du kan behöva göra:
Säkerhetsreleaser: avslöja och åtgärda en sårbarhet. Detta innebär i allmänhet två eller tre samtidiga releaser - t.ex. 3.2.x, 4.0.x och, beroende på tidpunkt, kanske en 4.1.x.
Regelbundna versionsreleaser: antingen en slutlig version (t.ex. 4.1) eller en buggfixuppdatering (t.ex. 4.1.1).
Förhandsversioner: t.ex. 4.2 alpha, beta eller rc.
Den korta versionen av de inblandade stegen är:
Om det rör sig om en säkerhetsrelease ska du meddela säkerhetsdistributionslistan en vecka före den faktiska releasen.
Korrekturläsa release notes, leta efter organisations- och skrivfel. Skriva ett blogginlägg och ett e-postmeddelande.
Uppdatera versionsnummer och skapa artefakter för releasen.
Skapa den nya
Release
i administratören pådjangoproject.com
.Ange rätt datum men se till att flaggan
is_active
är inaktiverad.Ladda upp artefakterna (tarball, wheel och checksummor).
Verifiera paketens signaturer, kontrollera om de kan installeras och säkerställa minimal funktionalitet.
Ladda upp den nya versionen/versionerna till PyPI.
Aktivera flaggan
is_active
för varje utgåva i administratören pådjangoproject.com
.Publicera blogginlägget och skicka ut e-postmeddelandena.
Uppdatera versionsnummer efter release i stabila grenar.
Lägg till stub release notes för nästa patch release i
main
och backport.
Det finns många detaljer, så läs gärna vidare.
Förutsättningar¶
Du behöver några saker innan du sätter igång. Om det här är din första release måste du samordna med en annan releaser för att få allt detta klart, och skriva till Ops e-postlista och begära nödvändig åtkomst och behörigheter.
En Unix-miljö med dessa verktyg installerade (i alfabetisk ordning):
bash
git
GPG
göra
man
hashingverktyg (vanligtvis
md5sum
,sha1sum
ochsha256sum
på Linux, ellermd5
ochshasum
på macOS)python
Ett GPG-nyckelpar. Se till att den privata delen av den här nyckeln lagras på ett säkert sätt. Den publika delen måste laddas upp till ditt GitHub-konto och även till Jenkins-servern som kör jobbet ”confirm release”.
Mer än en GPG-nyckel
Om den nyckel du vill använda inte är din standardsigneringsnyckel måste du lägga till
-u you@example.com
till varje GPG-signeringskommando som visas nedan, däryou@example.com
är den e-postadress som är kopplad till den nyckel du vill använda.En ren virtuell Python-miljö (Python 3.9+) för att bygga artefakter, med dessa nödvändiga Python-paket installerade:
$ python -m pip install build twine
Tillgång till Djangos projekt på PyPI för att ladda upp binärfiler, helst med extra behörigheter för att yank en release om det behövs. Skapa en projektomfattad token enligt den officiella dokumentationen <https://pypi.org/help/#apitoken>`_ och konfigurera din
$HOME/.pypirc
-fil så här:~/.pypirc`
¶[distutils] index-servers = pypi django [pypi] username = __token__ password = # User-scoped or project-scoped token, to set as the default. [django] repository = https://upload.pypi.org/legacy/ username = __token__ password = # A project token.
Tillgång till Djangos projekt på Transifex, med en Manager-roll. Generera en API-token i avsnittet användarinställningar och konfigurera din
$HOME/.transifexrc
-fil så här:~/.transifexrc`
¶[https://www.transifex.com] rest_hostname = https://rest.api.transifex.com token = # API token
Tillgång till Django-administratören på
djangoproject.com
som ”Site maintainer”.Tillgång för att skapa ett inlägg i Django Forum - Announcements category och för att skicka e-post till django-announce mailing list.
Tillgång till
django-security
repo i GitHub. Detta ger bland annat tillgång till distributionslistan för föranmälningar (behövs för förberedelser inför säkerhetsreleaser).Tillgång till Django-projektet på Read the Docs.
Uppgifter före lansering¶
Några saker måste tas om hand innan man ens påbörjar releaseprocessen. Det här börjar ungefär en vecka före lanseringen; det mesta kan göras när som helst fram till den faktiska lanseringen.
10 (eller fler) dagar före en säkerhetsrelease¶
Begär CVE IDs för säkerhetsfrågan (s) som släpps. Ett CVE-ID per fråga, begärd med
Vendor: djangoproject
ochProduct: django
.Generera relevanta (privata) patchar med hjälp av
git format-patch
, en förmain
-grenen och en för varje stabil gren som patchar.
En vecka före en säkerhetsrelease¶
Skicka ut ett förhandsmeddelande exakt en vecka före säkerhetsreleasen. Mallen för det e-postmeddelandet och en lista över mottagarna finns i den privata
django-security
GitHub-wikin. BCC mottagarna av föranmälan och se till att inkludera relevanta CVE-ID. Bifoga alla relevanta korrigeringar (riktade motmain
och de stabila grenarna) och signera e-posttexten med den nyckel du kommer att använda för utgåvan, med ett kommando som:$ gpg --clearsign --digest-algo SHA256 prenotification-email.txt
Notify django-announce of the upcoming security release with a general message such as:
Notice of upcoming Django security releases (3.2.24, 4.2.10 and 5.0.2) Django versions 5.0.2, 4.2.10, and 3.2.24 will be released on Tuesday, February 6th, 2024 around 1500 UTC. They will fix one security defect with severity "moderate". For details of severity levels, see: https://docs.djangoproject.com/en/dev/internals/security/#how-django-discloses-security-issues
Några dagar före eventuell lansering¶
När releasen närmar sig ska du titta på Trac för att se till att inga releaseblockerare finns kvar för den kommande releasen. Under exceptionella omständigheter, t.ex. för att uppfylla ett förutbestämt säkerhetsdatum, kan en release fortfarande ske med en öppen releaseblockerare. Det är upp till releasegivaren att besluta om en release ska ske med en öppen releaseblockerare eller om releasedatumet för en icke-säkerhetsrelease ska skjutas upp om så krävs.
Kontrollera med de andra sammanslagningarna för att se till att de inte har några ändringar som inte har bekräftats för utgåvan.
Korrekturläsa release notes, inklusive att titta på online-versionen för att fånga upp eventuella brutna länkar eller reST-fel, och se till att release notes innehåller rätt datum.
Dubbelkolla att versionsnoterna nämner tidsfrister för föråldring för alla API: er som anges som föråldrade, och att de nämner eventuella ändringar i Python-versionens stöd.
Dubbelkolla att release notes-indexet har en länk till noterna för den nya releasen; detta kommer att finnas i
docs/releases/index.txt
.Om detta är en feature release, se till att översättningar från Transifex har integrerats. Detta görs vanligtvis av en separat översättningshanterare snarare än av utgivaren, men här är stegen. Den här processen är lite lång, så se till att avsätta 4-10 timmar för att göra detta och planera helst för den här uppgiften en eller två dagar före utgivningsdagen.
Förutom att du har ett konfigurerat Transifex-konto bör tx CLI finnas tillgängligt i din
PATH
. Sedan kan du hämta alla översättningar genom att köra:$ python scripts/manage_translations.py fetch
Det här kommandot tar lite tid att köra. När det är klart ska du noggrant granska utdata efter eventuella fel och/eller varningar. Om det finns några måste du felsöka och lösa dem från fall till fall.
De nyligen hämtade översättningarna behöver justeras manuellt. Först och främst måste värdena för
PO-Revision-Date
manuellt flyttas så att de är senare änPOT-Creation-Date
. Du kan använda ett kommando som liknar detta för att massuppdatera alla.po
-filer (jämför diffen mot den relevanta stabila grenen):$ git diff --name-only stable/5.0.x | grep "\.po" | xargs sed -ri "s/PO-Revision-Date: [0-9\-]+ /PO-Revision-Date: $(date -I) /g"
Alla nya
.po
-filer bör granskas manuellt och noggrant för att undvika att en ändring görs i en fil utan några nya översättningar. Det bör inte heller finnas några ändringar i ”pluralformerna”: om det finns några (vanligtvis rapporterar spanska och franska ändringar för detta) måste de återställas.Slutligen ska du skicka de ändrade/tillagda filerna (både
.po
och.mo
) och skapa en ny PR som riktar sig till den stabila grenen för motsvarande utgåva (exempel PR uppdaterar översättningar för 4.2).Uppdatera sidan django-admin manual:
$ cd docs $ make man $ man _build/man/django-admin.1 # do a quick sanity check $ cp _build/man/django-admin.1 man/django-admin.1
och sedan publicera den ändrade man-sidan.
Om detta är ”dot zero”-utgåvan av en ny serie, skapa en ny gren från den aktuella stabila grenen i django-docs-translations-arkivet. Till exempel, när du släpper Django 4.2:
$ git checkout -b stable/4.2.x origin/stable/4.1.x $ git push origin stable/4.2.x:stable/4.2.x
Skriv blogginlägget för tillkännagivandet av releasen. Du kan när som helst lägga in det i admin och markera det som inaktivt. Här är några exempel: ”Exempel på meddelande om säkerhetsrelease”, ”Exempel på meddelande om vanlig release”, ”Exempel på meddelande om pre-release”.
Några dagar innan en funktion fryses¶
Som förberedelse för alfaversionen måste katalogen /home/www/www/media/releases/A.B
skapas på djangoprojektets server.
Innan funktionen fryses måste en gren med inriktning på main
skapas för att förbereda för nästa funktionsrelease. Den bör granskas och godkännas några dagar före frysningen, så att den kan slås samman efter att den stabila grenen har klippts. Följande punkter bör tas upp i den här grenen:
Uppdatera tupeln
VERSION
idjango/__init__.py
och öka till nästa förväntade utgåva (exempel commit).Skapa en stub release note för nästa feature release. Använd stubben från den tidigare versionen eller kopiera innehållet från den aktuella versionen och ta bort det mesta av innehållet så att endast rubrikerna kvarstår (exempel commit).
Ta bort
... versionadded::
och... versionchanged::
anteckningar i dokumentationen från två utgåvor sedan, liksom alla återstående äldre anteckningar. Till exempel, i Django 5.1 kommer anteckningar för 4.2 att tas bort (:commit:example commit <9edb7833b89e811eefd94974fb987f4605b0c0d7>
).Ta bort funktioner som har nått slutet av sin utfasningscykel, inklusive deras dokument och annoteringen
...utfasad::
. Varje borttagning bör göras i en separat commit för tydlighetens skull. I commit-meddelandet, lägg till ettRefs #XXXXX --
prefix som länkar till den ursprungliga biljetten där avskrivningen började om möjligt. Se till att detta noteras i avsnittet om borttagna funktioner i release notes (example commit).Öka standard PBKDF2 iterationer i
django.contrib.auth.hashers.PBKDF2PasswordHasher
med cirka 20% (välj ett runt tal). Kör testerna och uppdatera de 3 misslyckade hasher-testerna med de nya värdena. Se till att detta noteras i release notes (exempel commit).
Konkreta exempel på bootstrap-grenar för tidigare funktionsutgåvor: 5.2 bootstrap, 5.1 bootstrap, 5.0 bootstrap.
Frysa funktioner för uppgifter¶
Ta bort tomma avsnitt från release notes (exempel commit).
Bygg release notes lokalt och läs dem. Gör eventuella nödvändiga ändringar för att förbättra flödet eller fixa grammatiken (exempel commit).
Skapa en ny stabil gren från
main
. Till exempel, när funktionen fryser Django 5.2:$ git checkout -b stable/5.2.x upstream/main $ git push upstream -u stable/5.2.x:stable/5.2.x
Samtidigt uppdaterar du variabeln
django_next_version
idocs/conf.py
på den stabila utgivningsgrenen så att den pekar på den nya utvecklingsversionen. Till exempel, när du skaparstable/5.2.x
, sättdjango_next_version
till'6.0'
på den nya stabila grenen (:commit:example commit <1eb62e5b622ef7fd6e0123d8bbf6662d893d5d08>
).Gå till sidan `Lägg till release i admin`__, skapa ett
Release
-objekt för den finala releasen och se till att fältet Release date är tomt, vilket markerar det som unreleased. Till exempel, när du skaparstable/5.2.x
, skapa5.2
med fältet Utgivningsdatum tomt. Om utgåvan är en del av en LTS-gren, markera det så.Gå till sidan `Lägg till dokumentutgåva i admin`__, skapa ett nytt
DocumentRelease
-objekt för det engelska språket för det nyskapadeRelease
-objektet. Markera inte detta som standard.Lägg till den nya grenen i Read the Docs. Eftersom de automatiskt genererade versionsnamnen (”stable-A.B.x”) skiljer sig från de versionsnamn som används i Read the Docs (”A.B.x”), skapa en biljett <https://github.com/readthedocs/readthedocs.org/issues/5537>`_ med begäran om den nya versionen.
”Begär den nya klassificeraren på PyPI <https://github.com/pypa/trove-classifiers/issues/29>`_. Till exempel
Framework :: Django :: 5.2
.Skapa en roadmap-sida för nästa utgåva på Trac. För att skapa en ny sida på wikin, navigera till URL:en där du vill skapa sidan och en ”Skapa den här sidan”-knapp kommer att finnas tillgänglig.
Uppdatera den aktuella grenen under aktiv utveckling och lägg till en gren före utgivningen i Djangos utgivningsprocess på Trac.
Uppdatera
docs/fixtures/doc_releases.json
JSON-fixturen för djangoproject.com, så att personer utan tillgång till produktions-DB:n fortfarande kan köra en uppdaterad kopia av dokumentsidan (exempel PR). Detta kommer att slås samman efter den slutliga utgåvan.
Att faktiskt rulla ut releasen¶
OK, nu kommer den roliga delen, när vi faktiskt skickar ut en release! Om du ska skicka ut flera releaser, upprepa dessa steg för varje release.
Kontrollera att `Jenkins`__ är grön för den eller de versioner du släpper. Du bör förmodligen inte publicera en release förrän den är grön, och du bör se till att den senaste gröna körningen innehåller de ändringar som du publicerar.
Städa upp i release notes för denna version. Gör dessa ändringar i
main
och backportera till alla grenar där versionsnoterna för en viss version finns.För en funktionsutgåva, ta bort rubriken
UNDER DEVELOPMENT
högst upp i utgåvan, ta bort prefixetExpected
och uppdatera utgivningsdatumet, om det behövs (exempel commit).För en patchversion, ta bort prefixet
Expected
och uppdatera utgivningsdatumet för alla versioner, om nödvändigt (:commit:``exempel commit <34a503162fe222033a1cd3249bccad014fcd1d20>`).
En release börjar alltid från en releasegren, så du bör se till att du befinner dig på en uppdaterad stabil gren. Du bör också ha en ren och dedikerad virtuell miljö tillgänglig för varje version som släpps. Det kan till exempel vara
$ git checkout stable/4.1.x $ git pull
Om detta är en säkerhetsrelease, slå samman lämpliga korrigeringar från
django-security
. Basera om dessa korrigeringar efter behov för att göra var och en till en vanlig commit på release-grenen snarare än en merge commit. För att säkerställa detta, sammanfoga dem med flaggan--ff-only
; till exempel:$ git checkout stable/4.1.x $ git merge --ff-only security/4.1.x
(Detta förutsätter att
security/4.1.x
är en gren i repotdjango-security
som innehåller de nödvändiga säkerhetsuppdateringarna för nästa utgåva i 4.1-serien)Om git vägrar att slå samman med
--ff-only
, byt till security-patch grenen och rebasera den på den gren du är på väg att slå samman den med (git checkout security/4.1.x; git rebase stable/4.1.x
) och byt sedan tillbaka och gör sammanslagningen. Se till att commit-meddelandet för varje säkerhetsfix förklarar att commit är en säkerhetsfix och att ett tillkännagivande kommer att följa (:commit:exempel på säkerhetsfix <bf39978a53f117ca02e9a0c78b76664a41a54745>
).Uppdatera versionsnumret i
django/__init__.py
för utgåvan. Vänligen se notes on setting the VERSION tuple nedan för detaljer omVERSION
(example commit).Om det här är ett paket som släppts före utgivningen ska du även uppdatera trove-klassificeraren ”Development Status” i
pyproject.toml
för att återspegla detta. Enrc
-förutgåva bör inte ändra trove-klassificeringen (example commit for alpha release, example commit for beta release).Annars, se till att klassificeraren är inställd på
Development Status :: 5 - Produktion/Stabil
.
Skapa artefakter¶
Använd eventuellt hjälpskript
Du kan effektivisera några av stegen nedan med hjälp av hjälpskript från Wiki:
Tagga utgåvan med hjälp av
git tag
. Till exempel:$ git tag --sign --message="Tag 4.1.1" 4.1.1
Du kan kontrollera ditt arbete genom att köra
git tag --verify <tag>
.Se till att du har ett helt rent träd genom att köra
git clean -dfx
.Kör
python -m build
för att generera release-paketen. Detta kommer att skapa release-artefakterna (tarball och wheel) i endist/
-katalog. För Django 5.0 eller äldre måste du köramake -f extras/Makefile
istället.Generera hasharna för releasepaketen:
$ cd dist $ md5sum * $ sha1sum * $ sha256sum *
Skapa en ”checksums”-fil,
Django-<<VERSION>>.checksum.txt
som innehåller hasharna och versionsinformationen. Börja med den här mallen och infoga rätt version, datum, GPG-nyckel-ID (frångpg --list-keys --keyid-format LONG
), versionshanterarens GitHub-användarnamn, versions-URL och kontrollsummor:This file contains MD5, SHA1, and SHA256 checksums for the source-code tarball and wheel files of Django <<VERSION>>, released <<DATE>>. To use this file, you will need a working install of PGP or other compatible public-key encryption software. You will also need to have the Django release manager's public key in your keyring. This key has the ID ``XXXXXXXXXXXXXXXX`` and can be imported from the MIT keyserver, for example, if using the open-source GNU Privacy Guard implementation of PGP: gpg --keyserver pgp.mit.edu --recv-key XXXXXXXXXXXXXXXX or via the GitHub API: curl https://github.com/<<RELEASE MANAGER GITHUB USERNAME>>.gpg | gpg --import - Once the key is imported, verify this file: gpg --verify <<THIS FILENAME>> Once you have verified this file, you can use normal MD5, SHA1, or SHA256 checksumming applications to generate the checksums of the Django package and compare them to the checksums listed below. Release packages ================ https://www.djangoproject.com/download/<<VERSION>>/tarball/ https://www.djangoproject.com/download/<<VERSION>>/wheel/ MD5 checksums ============= <<MD5SUM>> <<RELEASE TAR.GZ FILENAME>> <<MD5SUM>> <<RELEASE WHL FILENAME>> SHA1 checksums ============== <<SHA1SUM>> <<RELEASE TAR.GZ FILENAME>> <<SHA1SUM>> <<RELEASE WHL FILENAME>> SHA256 checksums ================ <<SHA256SUM>> <<RELEASE TAR.GZ FILENAME>> <<SHA256SUM>> <<RELEASE WHL FILENAME>>
Signera checksummefilen (
gpg --clearsign --digest-algo SHA256 Django-<version>.checksum.txt
). Detta genererar ett signerat dokument,Django-<version>.checksum.txt.asc
som du sedan kan verifiera medgpg --verify Django-<version>.checksum.txt.asc
.
Göra utgivningen tillgänglig för allmänheten¶
Nu är du redo att faktiskt skicka ut pressmeddelandet. För att göra detta:
Skapa en ny
Release
-post i djangoproject.com:s admin. Om detta är en säkerhetsrelease bör detta göras 15 minuter före den annonserade releasetiden, inte tidigare:- Version
Måste överensstämma med versionsnumret enligt definitionen i tarbollen (
django-<version>.tar.gz
). Exempelvis ”5.2”, ”4.1.1” eller ”4.2rc1”.- Är aktiv
Ställ in på False tills releasen är helt publicerad (sista steget).
- LTS
Aktivera om utgåvan är en del av en LTS-gren.
- Datum
Ställ in utgivningsdatumet till idag. Den här utgåvan kommer inte att publiceras förrän
is_active
är aktiverat.- Artefakter
Ladda upp filerna tarball (
django-<version>.tar.gz
), wheel (django-<version>-py3-none-any.whl
) och checksum (django-<version>.checksum.txt.asc
) som skapades tidigare.
Testa att release-paketen installeras korrekt med hjälp av
pip
. Här är en enkel metod (den här testar bara att binärerna är tillgängliga, att de installeras korrekt och att migreringar och utvecklingsservern startar, men den kommer att upptäcka dumma misstag): https://code.djangoproject.com/wiki/ReleaseTestNewVersion.Kör `confirm-release`__ build på Jenkins för att verifiera checksummefilerna (använd t.ex.
4.2rc1
för https://media.djangoproject.com/pgp/Django-4.2rc1.checksum.txt).Ladda upp release-paketen till PyPI (för förhandsversioner, ladda bara upp wheel-filen):
$ twine upload --repository django dist/*
Uppdatera den nyskapade
Release
i administratören idjangoproject.com
och aktivera flagganis_active
.Tryck på ditt arbete och den nya taggen:
$ git push $ git push --tags
Gör blogginlägget som tillkännager lanseringen live.
För en ny versionsutgåva (t.ex. 4.1, 4.2), uppdatera den stabila standardversionen av dokumenten genom att vända flaggan
is_default
tillTrue
på lämpligtDocumentRelease
-objekt i databasendocs.djangoproject.com
(detta kommer automatiskt att vända den tillFalse
för alla andra); du kan göra detta med webbplatsens administratör.Skapa nya
DocumentRelease
-objekt för varje språk som har en post för den föregående utgåvan. Uppdatera djangoproject.com:s `robots.docs.txt`__-fil genom att kopiera resultatet som genereras genom att köra kommandotmanage_translations.py robots_txt
i den aktuella stabila grenen från `django-docs-translations repository`__. Till exempel, när du släpper Django 4.2:$ git checkout stable/4.2.x $ git pull $ python manage_translations.py robots_txt
Skicka meddelandet om utgåvan till e-postlistan django-announce och Django Forum. Detta bör innehålla en länk till tillkännagivandets blogginlägg.
Om detta är en säkerhetsrelease, skicka ett separat e-postmeddelande till oss-security@lists.openwall.com. Ange ett beskrivande ämne, till exempel ”Django” plus problemets titel från release notes (inklusive CVE ID). Meddelandetexten bör innehålla information om sårbarheten, t.ex. texten i blogginlägget om tillkännagivandet. Inkludera en länk till blogginlägget om tillkännagivandet.
Efter lansering¶
Du är nästan klar! Allt som återstår att göra nu är:
Om detta inte är en förhandsutgåva, uppdatera
VERSION
tupeln idjango/__init__.py
igen, öka till vad nästa förväntade utgåva kommer att vara. Till exempel, efter att ha släppt 4.1.1, uppdateraVERSION
tillVERSION = (4, 1, 2, 'alpha', 0)
(:commit:``example commit <a4d19953d46247ee1992b3427fe652e941524272>`).Lägg till utgåvan i Tracs versionslista om det behövs (och gör den till standardversion genom att ändra inställningen
default_version
i code.djangoproject.com:s `trac.ini`__, om det är en slutlig utgåva). Den nya X.Y-versionen bör läggas till efter alfaversionen och standardversionen bör uppdateras efter ”dot zero”-versionen.Om detta var en slutlig version:
Uppdatera den aktuella stabila grenen och ta bort grenen före utgivningen i Djangos utgivningsprocess på Trac.
Uppdatera djangoproject.com:s nedladdningssida (exempel PR).
Om detta var en säkerhetsrelease, uppdatera Arkiv över säkerhetsfrågor med detaljer om de problem som åtgärdats.
Om detta var en förhandsversion måste översättningskatalogerna uppdateras:
Skapa en ny gren från den nyligen utgivna stabila grenen:
git checkout stable/A.B.x git checkout -b update-translations-catalog-A.B.x
Se till att releaseprogrammets dedikerade virtuella miljö är aktiverad och kör följande:
$ cd django $ django-admin makemessages -l en --domain=djangojs --domain=django processing locale en
Läs igenom diffen innan du skickar den och undvik att skicka ändringar till
.po
-filerna utan några nya översättningar (:commit:``exempel commit <d2b1ec551567c208abfdd21b27ff6d08ae1a6371>`).Gör en pull request mot motsvarande stabila gren och slå samman när den har godkänts.
Vidarebefordra de uppdaterade källöversättningarna till
huvud
-grenen (exempel commit).
Om detta var en
rc
pre-release, efterlys översättningar för den kommande releasen i Django Forum - Internationalization category.
Anvisningar för inställning av VERSION-tupeln¶
Djangos versionsrapportering styrs av tupeln VERSION
i django/__init__.py
. Detta är en tupel med fem element, vars element är:
Större version.
Mindre version.
Mikroversion.
Status – kan vara en av ”alpha”, ”beta”, ”rc” eller ”final”.
Serienummer, för alfa/beta/RC-paket som körs i sekvens (tillåter t.ex. ”beta 1”, ”beta 2”, etc.).
För en slutlig version är statusen alltid ”final” och serienumret är alltid 0. Ett serienummer på 0 med statusen ”alpha” kommer att rapporteras som ”pre-alpha”.
Några exempel:
(4, 1, 1, "final", 0)
→ ”4.1.1”(4, 2, 0, "alpha", 0)
→ ”4.2 pre-alpha”(4, 2, 0, "beta", 1)
→ ”4.2 beta 1”