{"title":"Processo de release do Django","version":"1.9","locale":"pt-br","docname":"internals/release-process","url":"/pt-br/1.9/internals/release-process/","canonical":"https://djangodocs.dev/pt-br/1.9/internals/release-process/","summary":"Releases oficiais Link para este cabeçalho # Desde a versão 1.0, As releases do Django são numeradas da seguinte forma: Versões são numeradas na forma A.B ou A.B.C…","html":"<h1>Processo de release do Django<a class=\"heading-anchor\" href=\"#django-s-release-process\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"official-releases\">\n<span id=\"id1\"></span><h2>Releases oficiais<a class=\"heading-anchor\" href=\"#official-releases\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Desde a versão 1.0, As releases do Django são numeradas da seguinte forma:</p>\n<ul class=\"simple\">\n<li><p>Versões são numeradas na forma <code class=\"docutils literal notranslate\"><span class=\"pre\">A.B</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">A.B.C</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">A.B</span></code> é o número de versão da <em>feature release</em>. Cada versão será em grande parte compatível com as releases anteriores . Exceções a essa regra são listadas nas notas da release.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">C</span></code> é o número de versão da <em>patch release</em>, que é incrementada por correções de bug e releases de segurança. Essas releases serão 100% compatíveis com a patch release anterior. A única exceção é quando problemas de segurança ou de perda de dados não podem ser corrigidos sem quebrar a compatibilidade com versões anteriores. Se isso acontecer, as notas da release irão fornecer instruções detalhadas de upgrade.</p></li>\n<li><p>Antes de uma nova feature release, nós vamos fazer releases alpha, beta e release candidate das versões <code class=\"docutils literal notranslate\"><span class=\"pre\">A.B</span></code>.</p></li>\n</ul>\n<p>No git, cada release do Django irá ter uma tag indicando o seu número de versão , assinada com a chave de releases do Django. Adicionalmente, cada śerie de releases tem a su própria branch, chamada de <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/A.B.x</span></code>, e releases de segurança ou correção de bugs serão geradas dessas branches.</p>\n<p>Para mais informações sobre como o projeto Django emite novas releases para propósitos de segurança, por favor veja <a class=\"reference internal\" href=\"/pt-br/1.9/internals/security/\"><span class=\"doc\">nossa política de segurança</span></a>.</p>\n<dl class=\"glossary\">\n<dt id=\"term-Feature-release\">Feature release<a class=\"heading-anchor\" href=\"#term-Feature-release\"><span class=\"visually-hidden\">Link para este termo</span><span aria-hidden=\"true\">#</span></a></dt><dd><p>Feature releases (A.B, A.B+1, etc.) irão ocorrer mais ou menos a cada oito meses – veja  <a class=\"reference internal\" href=\"#id2\">processo de release</a> para detalhes. Essas releases irão conter novas funcionalidades, melhorias para funcionalidades existentes, e similares.</p>\n</dd>\n<dt id=\"term-Patch-release\">Patch release<a class=\"heading-anchor\" href=\"#term-Patch-release\"><span class=\"visually-hidden\">Link para este termo</span><span aria-hidden=\"true\">#</span></a></dt><dd><p>Patch releases (A.B.C, A.B.C+1, etc.) serão emitidas quando necessário, para corrigir bugs e /ou problemas de segurança.</p>\n<p>Essas releases serão 100% compatíveis com a feature release associada, a não ser que isso seja impossível por questões de segurança ou para prevenir perda de dados. Então a resposta para “será que devo atualizar para a última patch release?” sempre será “sim”.</p>\n</dd>\n<dt id=\"term-Long-term-support-release\">Suporte de longo prazo a uma release<a class=\"heading-anchor\" href=\"#term-Long-term-support-release\"><span class=\"visually-hidden\">Link para este termo</span><span aria-hidden=\"true\">#</span></a></dt><dd><p>Certas feature releases serão designadas como sendo de long-term support (LTS). Essas releases irão receber correções de segurança e para perda de dados aplicadas por um período de tempo garantido, tipicamente três anos.</p>\n<p>Veja a <a class=\"reference external\" href=\"https://www.djangoproject.com/download/\">página de download</a> para saber quais são as releases que foram designadas como sendo long-term support.</p>\n</dd>\n</dl>\n</section>\n<section id=\"release-cadence\">\n<h2>Cadência de uma release<a class=\"heading-anchor\" href=\"#release-cadence\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Começando com a versão 2.0 do Django, números de versões irão usar uma forma flexível <a class=\"reference external\" href=\"http://semver.org/\">de versionamento semântico</a> de modo que cada versão seguinte a uma LTS irá colidir com a próxima versão “ponto zero”. Por exemplo: 2.0, 2.1, 2.2 (LTS), 3.0, 3.1, 3.2 (LTS), etc.</p>\n<p>Descobrir como as releases são compatíveis entre si fica mais simples com SemVer. Ele também ajuda a antecipar quando calços de compatibilidade serão removidos. Ele não é uma forma pura do SemVer já que cada feature release irá continuar a ter algumas incompatibilidades com versões anteriores documentadas onde o caminho de depreciação não for possível ou onde ele não valha a pena. Além disso, as depreciações que começaram em uma release LTS (X.2) serão descartadas em uma release sem ponto zero (Y.1) para acomodar as nossas políticas de manter os calços de compatibilidade por pelo menos duas feature releases. Leia a próxima seção para um exemplo.</p>\n</section>\n<section id=\"deprecation-policy\">\n<span id=\"internal-release-deprecation-policy\"></span><h2>Política de depreciação<a class=\"heading-anchor\" href=\"#deprecation-policy\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Uma feature release pode depreciar algumas funcionalidades de releases prévias. Se uma funcionalidade é depreciada em uma feature release A.x, ela irá continuar a funcionar em todas as versões A.x (para todas as versões de x) mas gerando warnings. Funcionalidades depreciadas serão removidas em uma release B.0, ou B.1 para features depreciadas na última feature release A.x para garantir que as depreciações sejam realizadas após pelo menos 2 feature releases.</p>\n<p>Então, por exemplo, se nós decidimos começar a depreciação de uma função no Django 4.2:</p>\n<ul class=\"simple\">\n<li><p>O Django 4.2 irá conter uma réplica da função compatível com versões anteriores que irá gerar um <code class=\"docutils literal notranslate\"><span class=\"pre\">RemovedInDjango51Warning</span></code>. Esse warning é silencioso por padrão; você pode habilitar a exibição desses warnings com a opção <code class=\"docutils literal notranslate\"><span class=\"pre\">-Wd</span></code> do Python.</p></li>\n<li><p>Django 5.0 (a versão que segue a 4.2) ainda irá possuir a réplica da função compatível com versões anteriores. Esse warning se torna <em>loud</em> por padrão e irá provavelmente se tornar bem desagradável.</p></li>\n<li><p>Django 5.1 irá remover a funcionalidade por completo.</p></li>\n</ul>\n<p>Um exemplo mais genérico:</p>\n<ul class=\"simple\">\n<li><p>X.0</p></li>\n<li><p>X.1</p></li>\n<li><p>X.2 LTS</p></li>\n<li><p>Y.0: Remove os calços de depreciação adicionados em X.0 e X.1.</p></li>\n<li><p>Y.1: Remove os calços de depreciação adicionados em X.2.</p></li>\n<li><p>Y.2 LTS: Nenhum calço de depreciação será retirado (embora Y.0 não seja mais suportada, apps de terceiros precisam manter compatibilidade com a versão anterior X.2 LTS para facilitar atualizações de LTS para LTS).</p></li>\n<li><p>Z.0: Remove os calços de compatibilidade adicionados em Y.0 e Y.1.</p></li>\n</ul>\n</section>\n<section id=\"supported-versions\">\n<span id=\"backwards-compatibility-policy\"></span><h2>Versões suportadas<a class=\"heading-anchor\" href=\"#supported-versions\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>A qualquer momento, o time de desenvolvedores do Django irão dar suporte a um conjunto de releases de vários leveis. Veja <a class=\"reference external\" href=\"https://www.djangoproject.com/download/#supported-versions\">a seção de versões suportadas</a> da página de downloads page para o estado atual de suporte de cada versão.</p>\n<ul>\n<li><p>A master de desenvolvimento atual irá receber novas funcionalidades e correções de bug requerendo refatoração não trivial.</p></li>\n<li><p>Patches aplicados na branch master também devem ser aplicados para a branch da última feature release, para que sejam lançados na próxima patch release da sére da feature, quando resolverem problemas críticos:</p>\n<ul class=\"simple\">\n<li><p>Problemas de segurança.</p></li>\n<li><p>Bugs envolvendo perda de dados</p></li>\n<li><p>Bugs que ocasionem em um crash da aplicação</p></li>\n<li><p>Grandes bugs no funcionamento de funcionalidades recém introduzidas.</p></li>\n</ul>\n<p>A regra prática é que serão feitos backports das correções para a última feature release para bugs que impediriam a conclusão da release em primeiro lugar (release blockers).</p>\n</li>\n<li><p>Correções de segurança e bugs que ocasionem perda de dados serão aplicados na master atual, nas branches das duas últimas feature releases e em quaisquer outras branches de releases com suporte de longa duração.</p></li>\n<li><p>Backports de correções de documentação geralmente serão mais livremente enviados para a branch da última release. Isso porque é altamente vantajoso possuir a última versão da documentação da última release atualizada e correta, e o risco de introduzir regressões é muito menor.</p></li>\n</ul>\n<p>Como exemplo concreto, considere um momento no tempo entre a release do Django 5.1 e 5.2. Nesse momento no tempo:</p>\n<ul class=\"simple\">\n<li><p>Funcionalidades serão adicionadas na master de desenvolvimento, para que sejam lançadas no Django 5.2.</p></li>\n<li><p>Bugs críticos serão corrigidos e aplicados na branch <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/5.1.x</span></code>, e lançados como 5.1.1, 5.1.2, etc.</p></li>\n<li><p>Correções de segurança e correções de bug envolvendo perda de dados serão aplicados nas branches <code class=\"docutils literal notranslate\"><span class=\"pre\">master</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/5.1.x</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/5.0.x</span></code>, e <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/4.2.x</span></code> (LTS). Eles irão disparar as releases <code class=\"docutils literal notranslate\"><span class=\"pre\">5.1.1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">5.0.5</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">4.2.8</span></code>, etc.</p></li>\n<li><p>Correções na documentação será aplicadas na master, e, se o backport for simples, para a última branch estável <code class=\"docutils literal notranslate\"><span class=\"pre\">5.1.x</span></code>.</p></li>\n</ul>\n</section>\n<section id=\"release-process\">\n<span id=\"id2\"></span><h2>Processos da release<a class=\"heading-anchor\" href=\"#release-process\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>O Django usa um cronograma de release temporal com feature releases a cada oito meses ou algo próximo a isso.</p>\n<p>Depois de cada feature release, o gerente de release irá anunciar uma linha do tempo para a próxima release.</p>\n<section id=\"release-cycle\">\n<h3>Ciclo da release<a class=\"heading-anchor\" href=\"#release-cycle\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Cada ciclo de release consiste em três partes:</p>\n<section id=\"phase-one-feature-proposal\">\n<h4>Fase um: propostas de funcionalidades<a class=\"heading-anchor\" href=\"#phase-one-feature-proposal\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>A primeira fase do processo de release inclui descobrir quais grandes funcionalidades incluir na próxima versão. Isso deve incluir uma boa quantidade de trabalho preliminar nessas funcionalidades – código que funciona é mais importante que um excelente design.</p>\n<p>Grandes funcionalidades para uma próxima release serão adicionadas a página wiki de roadmap, ex. <a class=\"reference external\" href=\"https://code.djangoproject.com/wiki/Version1.9Roadmap\">https://code.djangoproject.com/wiki/Version1.9Roadmap</a>.</p>\n</section>\n<section id=\"phase-two-development\">\n<h4>Fase dois: desenvolvimento<a class=\"heading-anchor\" href=\"#phase-two-development\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>A segunda parte do cronograma da release é um período de “cabeça baixa”. Usando o roadmap produzido no final da fase um, nós vamos todos trabalhar duro para fazer com que tudo nele seja concluído.</p>\n<p>No final da fase dois, qualquer funcionalidade não terminada será adiada até a próxima release.</p>\n<p>A fase dois  irá culminar com uma release alpha. Neste ponto, será feito um fork <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/A.B.x</span></code> da branch <code class=\"docutils literal notranslate\"><span class=\"pre\">master</span></code>.</p>\n</section>\n<section id=\"phase-three-bugfixes\">\n<h4>Fase três: correções de bugs<a class=\"heading-anchor\" href=\"#phase-three-bugfixes\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>A última parte do ciclo de release é gasto corrigindo bugs – novas funcionalidades não serão aceitas durante esse período. Nós vamos tentar soltar uma beta release um mês depois de uma alpha e uma release candidate um mês após a beta.</p>\n<p>A release candidate marca o congelamento de strings, e ele ocorre pelo menos duas semanas antes da release final. Depois desse ponto, novas strings traduzíveis não devem ser adicionadas.</p>\n<p>Durante essa fase, os committers serão mais e mais conservadores com os backports, para  evitar a introdução de regressões. Depois do release candidate, só devem ser realizados backports de release blockers e de correções da documentação.</p>\n<p>Em paralelo a essa fase, a <code class=\"docutils literal notranslate\"><span class=\"pre\">master</span></code> pode receber novas funcionalidades, para serem lançadas no ciclo <code class=\"docutils literal notranslate\"><span class=\"pre\">A.B+1</span></code>.</p>\n</section>\n</section>\n<section id=\"bug-fix-releases\">\n<h3>Releases de correções de bugs<a class=\"heading-anchor\" href=\"#bug-fix-releases\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Depois da feature release (ex A.B), a release prévia irá entrar no modo de correção de bugs.</p>\n<p>A branch para a feature release prévia (ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/A.B-1.x</span></code>) irá incluir correções de bugs. Bugs críticos corrigidos na master <em>também</em> devem ser corrigidas na branch de correção de bugs; isso significa que o commit precisa separar de modo limpo as correções de bugs das adições de funcionalidades. O desenvolvedor que fizer o commit de uma correção na master será responsável por também aplicar a correção para a branch de correção de bugs atual.</p>\n</section>\n</section>","rootId":"django-s-release-process","toc":[{"title":"Releases oficiais","anchor":"official-releases","children":[]},{"title":"Cadência de uma release","anchor":"release-cadence","children":[]},{"title":"Política de depreciação","anchor":"deprecation-policy","children":[]},{"title":"Versões suportadas","anchor":"supported-versions","children":[]},{"title":"Processos da release","anchor":"release-process","children":[{"title":"Ciclo da release","anchor":"release-cycle","children":[{"title":"Fase um: propostas de funcionalidades","anchor":"phase-one-feature-proposal","children":[]},{"title":"Fase dois: desenvolvimento","anchor":"phase-two-development","children":[]},{"title":"Fase três: correções de bugs","anchor":"phase-three-bugfixes","children":[]}]},{"title":"Releases de correções de bugs","anchor":"bug-fix-releases","children":[]}]}],"breadcrumbs":[{"docname":"internals/index","title":"Funcionamento interno do Projeto Django","url":"/pt-br/1.9/internals/"}],"prev":{"docname":"internals/security","title":"Política de Segurança do Django","url":"/pt-br/1.9/internals/security/"},"next":{"docname":"internals/deprecation","title":"Linha do tempo de depreciações no Django","url":"/pt-br/1.9/internals/deprecation/"},"formats":{"html":"/pt-br/1.9/internals/release-process/","markdown":"/pt-br/1.9/internals/release-process.md","json":"/pt-br/1.9/internals/release-process.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/internals/release-process.txt","official":"https://docs.djangoproject.com/pt-br/1.9/internals/release-process/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","es"]}