Pular para o conteúdo

Publicar um pacote

Empacotar, o que entra no tarball, o registro estático — e por que o pacote é reprodutível.

Publicar é dois passos: empacotar (gerar o tarball) e enviar (copiar para um registro). Os dois são comandos, e o registro não é um servidor.

Empacotar#

bash
dataforge check .
dataforge test tests/
dataforge pack
text
  dist/minha-lib-1.0.0.tar.gz   14.2 KB
  sha256: 9eb3d7de7b8581abf905ad93c978514af39b65253ede72ee82d262c8fe7761d0

O tarball é reprodutível: mtime zerado, uid e gid zerados. Sem isso o sha256 mudaria a cada empacotamento, e a verificação de integridade não significaria nada — dois downloads da mesma versão não teriam como ser comparados.

O que entra, e o que não#

EntraFica de fora
forge.tomlforge_modules/
o entry e tudo o que ele alcançadist/
src/.git/
tests/arquivos fora do projeto
README.md, LICENSEo que o .gitignore já exclui

O registro é uma pasta#

Não há servidor a manter: um registro é uma pasta com index.json e pacotes/*.tar.gz, servida por qualquer host estático.

text
registro/
  index.json
  pacotes/
    validador-1.0.0.tar.gz
    tabela-1.1.0.tar.gz
bash
dataforge publish --registry=../registro

O do projeto vive em site/public/registry/ e vai ao ar junto com o site. Publicar numa pasta e versioná-la é um registro privado completo — o que uma empresa precisa para compartilhar bibliotecas internas sem infraestrutura.

A extração recusa o que sai da pasta#

Um pacote não pode escrever fora do lugar dele. A extração recusa caminho com ../ e recusa link simbólico — as duas formas clássicas de um tarball malicioso sobrescrever um arquivo do sistema.

Do outro lado: instalar#

bash
dataforge add validador             # a última versão
dataforge add validador@1.2.0       # uma exata
dataforge install                   # resolve o forge.toml inteiro
dataforge list                      # o que está instalado
dataforge remove validador

O cache fica em ~/.dataforge/cache/, entre projetos: instalar a mesma versão num segundo projeto não baixa de novo.

A lista antes de publicar#

  1. dataforge check . limpo
  2. dataforge test tests/ verde, importando pelo nome do pacote
  3. version subida, segundo o semver
  4. README com um exemplo que roda
  5. tar tzf conferido — nada de segredo, nada de dist/
  6. o CHANGELOG diz o que mudou, e o que quebrou

Por onde seguir#