Como configurar o TestPyPI para o CI/CD
Os pacotes Python do MeasureSoftGram sao publicados de forma automatizada pelo GitHub Actions, sem armazenar tokens nem segredos no repositorio. A publicacao usa Trusted Publishing (OIDC), em que o PyPI e o TestPyPI confiam diretamente em um workflow especifico do repositorio.
Esta pagina descreve o fluxo de forma generica. Adapte os nomes de projeto e de workflow ao seu pacote.
Visao geral do fluxo por tag
A publicacao e disparada por tags de versao:
- Tag de pre-lancamento
vX.Y.ZrcNpublica no TestPyPI. - Tag final
vX.Y.Zpublica no PyPI de producao, com um gate: a publicacao final so ocorre se ja existir a release candidate (rc) correspondente no TestPyPI. O workflow tambem valida que a tag bate com a versao declarada nopyproject.toml.
Esse modelo garante que toda versao final passou antes por um indice de testes.
Passo 1: registrar o Trusted Publisher
No TestPyPI (e, de forma analoga, no PyPI de producao), registre o repositorio como publicador confiavel do projeto. Em Manage > Publishing, adicione um novo Trusted Publisher do tipo GitHub Actions com:
- Owner: a organizacao no GitHub (
fga-eps-mds). - Repository: o nome do repositorio do pacote.
- Workflow: o nome do arquivo do workflow de publicacao (por exemplo,
python-publish.yml). - Environment: o nome do environment usado pelo job (por exemplo,
testpypipara o TestPyPI epypipara o PyPI).
Quem registra o Trusted Publisher precisa ser proprietario (owner) do projeto no indice correspondente.
Passo 2: criar os environments no GitHub
No repositorio, em Settings > Environments, crie dois environments com os mesmos nomes usados no passo anterior:
testpypipypi
Voce pode adicionar regras de protecao no environment pypi (por exemplo,
exigir revisao antes do deploy), reforcando o gate de producao.
Passo 3: configurar o workflow
O job de publicacao roda em ubuntu-latest e precisa de permissao de OIDC. O
trecho essencial e:
permissions:
id-token: write
jobs:
publish:
runs-on: ubuntu-latest
environment: testpypi
steps:
- uses: actions/checkout@v4
- name: Build
run: |
python -m pip install --upgrade build
python -m build
- name: Publish to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
Para a publicacao em producao, use o mesmo pypa/gh-action-pypi-publish@release/v1
sem repository-url (o padrao e o PyPI) e associe o job ao environment pypi.
Como a autenticacao e feita via OIDC, nao e necessario criar nem armazenar
tokens de API (TEST_PYPI_API_TOKEN, PYPI_API_TOKEN) como segredos. A action
troca um token de curta duracao com o indice no momento da publicacao.
Resumo
- Registre o Trusted Publisher no TestPyPI e no PyPI, apontando para o owner, o repositorio, o workflow e o environment.
- Crie os environments
testpypiepypino GitHub. - Configure o workflow com
id-token: writee a action oficial de publicacao. - Use tags
rcpara o TestPyPI e tags finais para o PyPI, mantendo o gate entre eles.