Pular para o conteúdo principal

Publicar um pacote interno

Do merge em main até o pacote disponível no índice interno, com versão derivada da tag e publicação sem senha.

Publicar é o passo que mais tenta virar manual, porque a primeira vez sempre funciona à mão. O procedimento abaixo existe para que a segunda vez também funcione, feita por outra pessoa, sem que ninguém precise de credencial de publicação na máquina.

Antes de começar

O repositório precisa do workflow publicar.yml do template e de uma variável de repositório com o papel de publicação. Nenhum segredo de longa duração: a autenticação é por identidade federada do próprio runner.

Os passos

  1. Marcar a versão

    A versão sai da tag, e a tag é a única fonte. Nada de editar número em arquivo: dois lugares divergem no dia em que alguém esquece um.

    git tag -a v2.4.0 -m "cursor opaco na listagem"
    git push origin v2.4.0
  2. Deixar a esteira construir

    O passo lê a tag e a injeta na build. Sem tag, a versão sai com sufixo de desenvolvimento e o índice a recusa.

    - name: Construir
    run: |
    export VERSAO="${GITHUB_REF_NAME#v}"
    python -m build
  3. Publicar sem senha

    O runner troca o token de identidade por uma credencial de curta duração. Nenhum segredo de publicação existe em lugar nenhum.

    - uses: aws-actions/configure-aws-credentials@v4
    with:
    role-to-assume: ${{ vars.PAPEL_PUBLICACAO }}
    aws-region: us-east-1
    - run: panlabs-publicar dist/*

Verificação

O pacote aparece no índice em menos de um minuto. O teste real é instalá-lo numa máquina que não é a sua, ou num container limpo, que é mais rápido:

docker run --rm python:3.12-slim \
pip install --index-url "$PANLABS_INDICE" "panlabs-catalogo-contrato==2.4.0"

Instalar fixando a versão exata é o que prova a publicação. pip install pacote sem versão pode resolver para uma cópia em cache e passar mesmo quando a publicação falhou.

Variações

Pré-lançamento. Tag com sufixo (v2.5.0rc1) publica normalmente e o índice a marca como pré-lançamento; pip só a instala com --pre.

Republicar a mesma versão. Não existe. O índice recusa sobrescrita, e é deliberado: um pacote que muda de conteúdo mantendo a versão quebra todo cache que já o baixou.

Apagar uma tag publicada não despublica o pacote. A saída é publicar uma versão nova, sempre, inclusive quando a anterior tem duas horas de vida.