Blame programming-guidelines/pt_BR/versioning.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="versioning" xml:lang="pt-BR">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <link type="guide" xref="index#maintainer-guidelines"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Philip Withnall</name>
Packit 1470ea
      <email its:translate="no">philip.withnall@collabora.co.uk</email>
Packit 1470ea
      <years>2015</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <include xmlns="http://www.w3.org/2001/XInclude" href="cc-by-sa-3-0.xml"/>
Packit 1470ea
Packit 1470ea
    <desc>Versionamento e lançamento de bibliotecas e aplicativos</desc>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Rafael Fontenelle</mal:name>
Packit 1470ea
      <mal:email>rafaelff@gnome.org</mal:email>
Packit 1470ea
      <mal:years>2017</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>Versionamento</title>
Packit 1470ea
Packit 1470ea
  <synopsis>
Packit 1470ea
    <title>Resumo</title>
Packit 1470ea
Packit 1470ea
    

O versionamento é diferente para módulos de bibliotecas e aplicativos: as bibliotecas precisam de uma versão de libtool especificada junto com a versão de seu pacote. Por sua vez, aplicativos só possuem uma versão de pacote.

Packit 1470ea
Packit 1470ea
    <list>
Packit 1470ea
      <item>

Bibliotecas e aplicativos possuem uma versão de pacote na forma de maior.menor.micro. (<link xref="#package-versioning"/>)

</item>
Packit 1470ea
      <item>

Adicionalmente, bibliotecas possuem uma versão de libtool na forma de atual:revisão:idade. (<link xref="#libtool-versioning"/>)

</item>
Packit 1470ea
      <item>

Os números de versão devem ser atualizados a cada lançamento (usando incrementos de lançamento e pós-lançamento). (<link xref="#release-process"/>)

</item>
Packit 1470ea
      <item>

As versões de pacotes devem ser incrementados por alterações ou adições de recursos. (<link xref="#package-versioning"/>)

</item>
Packit 1470ea
      <item>

As versões de libtool devem ser atualizadas por alterações ou adições de API. (<link xref="#libtool-versioning"/>)

</item>
Packit 1470ea
      <item>

Versões menores pares/ímpares de pacotes podem ser usadas respectivamente para lançamentos estáveis/instáveis. (<link xref="#stable-unstable-versions"/>)

</item>
Packit 1470ea
    </list>
Packit 1470ea
  </synopsis>
Packit 1470ea
Packit 1470ea
  <section id="package-versioning">
Packit 1470ea
    <title>Versionamento de pacote</title>
Packit 1470ea
Packit 1470ea
    

Bibliotecas e aplicativos possuem uma versão de pacote na forma de maior.menor.micro.

Packit 1470ea
Packit 1470ea
    

O número de versão de pacote é aquele passado para AC_INIT() e que geralmente é conhecido como número de versão do projeto. Por exemplo, o pacote Debian para uma biblioteca vai usar a versão de pacote da biblioteca (apesar de também poder incluir o número de versão maior no nome de pacote para permitir <link xref="parallel-installability">instalabilidade paralela</link>). Versões de pacotes são atualizadas pelas seguintes regras:

Packit 1470ea
    <steps>
Packit 1470ea
      <item>

Se for quebrar a <link xref="api-stability">compatibilidade de API</link> em uma biblioteca, ou fazer uma alterações a um aplicativo que afeta tudo (tal como um redesenho da interface gráfica), incremente a versão maior e defina a menor e micro para 0.

</item>
Packit 1470ea
      <item>

Do contrário, se for alterar ou adicionar um recurso, ou adicionar qualquer API, incremente a versão menor e defina micro para 0.

</item>
Packit 1470ea
      <item>

Do contrário (se for fazer um lançamento contendo apenas correções de erros e atualizações de tradução), incremente a versão micro.

</item>
Packit 1470ea
    </steps>
Packit 1470ea
Packit 1470ea
    

Note que o número da versão menor deve ser atualizada se qualquer API for adicionada.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="libtool-versioning">
Packit 1470ea
    <title>Versionamento de libtool</title>
Packit 1470ea
Packit 1470ea
    

Bibliotecas possuem dois números de versão: uma versão de libtool que rastreia a compatibilidade reversa com ABI (veja <link xref="api-stability"/>) e uma versão de pacote que rastreia alterações de recursos. Esses são normalmente incrementados em sincronização, mas devem ser mantidos separados por causa de compatibilidade reversa com ABI não está necessariamente relacionada a alterações de recursos ou correções de erros. Além do mais, os dois números de versões possuem semânticas diferentes e não podem ser gerados automaticamente para cada um.

Packit 1470ea
Packit 1470ea
    

Uma boa visão geral do versionamento de libtool, e as diferenças para versionamento de pacote, é fornecida no <link href="https://autotools.io/libtool/version.html">Autotools MythBuster</link>; outro está no <link href="http://www.gnu.org/s/libtool/manual/html_node/Updating-version-info.html">manual do libtool</link>.

Packit 1470ea
Packit 1470ea
    

Para atualizar a versão do libtool, siga o algoritmo fornecido nos comentários abaixo. Esse é tipicamente um bloco de código do <file>configure.ac</file> para configurar versionamento de libtool:

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
# Before making a release, the LT_VERSION string should be modified. The
Packit 1470ea
# string is of the form c:r:a. Follow these instructions sequentially:
Packit 1470ea
#   1. If the library source code has changed at all since the last update, then
Packit 1470ea
#      increment revision (‘c:r:a’ becomes ‘c:r+1:a’).
Packit 1470ea
#   2. If any interfaces have been added, removed, or changed since the last
Packit 1470ea
#      update, increment current, and set revision to 0.
Packit 1470ea
#   3. If any interfaces have been added since the last public release, then
Packit 1470ea
#      increment age.
Packit 1470ea
#   4. If any interfaces have been removed or changed since the last public
Packit 1470ea
#      release, then set age to 0.
Packit 1470ea
AC_SUBST([LT_VERSION],[0:0:0])
Packit 1470ea
Packit 1470ea
    

O bloco de código a seguir pode ser usado em um <file>Makefile.am</file> para passar aquela informação de versão para o libtool:

Packit 1470ea
    minha_biblioteca_la_LDFLAGS = -version-info $(LT_VERSION)
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="stable-unstable-versions">
Packit 1470ea
    <title>Versões estáveis e instáveis de pacote</title>
Packit 1470ea
Packit 1470ea
    

A maioria dos módulos do GNOME seguem uma convenção para lançamentos estáveis e instáveis. A versão menor é par para lançamentos estáveis e é ímpar para lançamentos instáveis. Por exemplo, as versões 3.20.* são estáveis, mas as versões 3.19.* são instáveis. As versões 3.19.* podem ser vistas como lançamentos alfa e beta da versão 3.20.

Packit 1470ea
Packit 1470ea
    

Uma nova versão micro estável (ex.: 3.20.0 → 3.20.1) não adiciona novos recursos, apenas atualizações de tradução e correções de erro. Por outro lado, lançamentos micro instáveis (ex.: 3.19.1 → 3.19.2) podem adicionar API, ou alterar ou remover API que foi adicionada em um lançamento micro anterior naquela séries menores.

Packit 1470ea
Packit 1470ea
    

A versão libtool deve ser atualizada apenas para versões de pacote estável.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="release-process">
Packit 1470ea
    <title>Processo de lançamento</title>
Packit 1470ea
Packit 1470ea
    

O processo padrão para fazer um lançamento de um módulo incrementa a versão de libtool (se o módulo é uma biblioteca) em tempo de lançamento e, imediatamente após, incrementa o número de versão do pacote (isso é chamado de “incremento pós-lançamento” ou, em inglês, “post-release increment”)

Packit 1470ea
Packit 1470ea
    

Atualizar as versões de libtool em tempo de lançamento significa que eles são incrementados apenas uma vez para todas as alterações de ABI em um lançamento. O uso de incremento pós-lançamento para versões de pacotes significa que o número de versão de pacote não está desatualizado (ainda igual ao lançamento anterior) durante o ciclo de desenvolvimento.

Packit 1470ea
Packit 1470ea
    

O processo de lançamento (baseado no <link href="https://wiki.gnome.org/MaintainersCorner/Releasing">processo de lançamento do GNOME</link>):

Packit 1470ea
    <steps>
Packit 1470ea
      <item>

Certifique-se de que o código esteja atualizado: <cmd>git pull</cmd>

</item>
Packit 1470ea
Packit 1470ea
      <item>

Certifique-se de que você tenha nenhuma alteração local: <cmd>git status</cmd>

</item>
Packit 1470ea
      <item>

Se o lançamento é para uma versão de pacote estável, incremente o número de versão de libtool no <file>configure.ac</file> (se ele existir)

</item>
Packit 1470ea
      <item>

Adicione uma entrada ao arquivo <file>NEWS</file>

</item>
Packit 1470ea
      <item>
Packit 1470ea
        

Execute <cmd>./autogen.sh && make && make install && make distcheck</cmd> e certifique-se de que foi concluído com sucesso

Packit 1470ea
        <list>
Packit 1470ea
          <item>

Corrija quaisquer problemas que aparecerem, faça o commit das alterações e reinicie no passo 3

</item>
Packit 1470ea
        </list>
Packit 1470ea
      </item>
Packit 1470ea
      <item>

Se <cmd>make distcheck</cmd> finalizar com “[archive] is ready for distribution”, execute <cmd>git commit -a -m "Release version x.y.z"</cmd> (sendo “x.y.z” o número da versão do pacote)

</item>
Packit 1470ea
      <item>
Packit 1470ea
        

Execute <cmd>git push</cmd>

Packit 1470ea
        <list>
Packit 1470ea
          <item>

Se isso falhar em razão de outros commits terem sido enviados (push) neste meio tempo, execute <cmd>git pull</cmd> para mesclar seu commit no ramo seguido por um segundo <cmd>git push</cmd>. Isso é uma exceção às diretrizes do GNOME de ter um histórico de git linear (<link xref="version-control#use-of-git"/>). Se você prefere ter um histórico linear, você precisa reiniciar o passo 1.

</item>
Packit 1470ea
        </list>
Packit 1470ea
      </item>
Packit 1470ea
      <item>

Crie uma tag de lançamento: <cmd>git tag -s x.y.z</cmd> (sendo “x.y.z” o número de versão do pacote)

</item>
Packit 1470ea
      <item>

Execute <cmd>git push origin x.y.z</cmd> (sendo “x.y.z” o número de versão do pacote)

</item>
Packit 1470ea
    </steps>
Packit 1470ea
Packit 1470ea
    

O lançamento agora está completo e o incremento de versão pós-lançamento pode ser feita:

Packit 1470ea
    <steps>
Packit 1470ea
      <item>

Incremente o número de versão de pacote no <file>configure.ac</file>

</item>
Packit 1470ea
      <item>

Execute <cmd>git commit -a -m "Post-release version increment"</cmd>

</item>
Packit 1470ea
      <item>

Execute <cmd>git push</cmd>

</item>
Packit 1470ea
    </steps>
Packit 1470ea
Packit 1470ea
    

O arquivo de pacote gerado por <cmd>make distcheck</cmd> agora pode ser enviado para download.gnome.org ou distribuído em outras formas.

Packit 1470ea
  </section>
Packit 1470ea
</page>