Skip to content
Latchkey

GoReleaser vs nFPM: automação de release vs build de pacotes

Eles se sobrepõem, mas diferem em escopo: o nFPM constrói pacotes Linux (deb, rpm, apk) a partir de uma config simples, sem toolchains nativos, enquanto o GoReleaser automatiza todo o release (build, archive, package, checksum, publish) e usa o nFPM por baixo dos panos para o passo de empacotamento.

GoReleaser e nFPM são populares em projetos Go (e além), mas cuidam de partes diferentes de entregar software. O nFPM é um empacotador focado e sem dependências que produz pacotes deb, rpm e apk a partir de um único arquivo YAML, sem precisar de dpkg ou rpmbuild instalados. O GoReleaser é uma ferramenta de release ponta a ponta que compila binários multiplataforma, cria archives e checksums, constrói pacotes (via nFPM) e publica no GitHub/registries.

GoReleasernFPM
EscopoPipeline completo de releaseApenas build de pacotes
SaídasBinários, archives, pacotes, releasesPacotes deb, rpm, apk
Cross-compileSim (gerencia os builds)Não (você fornece os arquivos)
PublicaçãoGitHub, registries, Homebrew, etc.Nenhuma (só produz pacotes)
Ferramentas nativas necessáriasNãoNão (implementação pura)
RelaçãoUsa o nFPM internamenteUm bloco de construção

Onde cada um realmente se destaca

O nFPM vence quando empacotamento é tudo o que você precisa: ele transforma binários e arquivos existentes em deb/rpm/apk sem instalar tooling específico de distro, o que é ótimo para imagens de CI mínimas. O GoReleaser vence quando você quer todo o release automatizado: ele cuida de cross-compilação, archives, checksums, changelogs, assinatura e publicação em GitHub Releases, registries de container e gerenciadores de pacotes, tudo a partir de uma config.

No CI

O GoReleaser foi feito para o CI: um release com tag dispara goreleaser release, que produz cada artifact e os publica, muitas vezes como um único passo de workflow. Se você só precisa de pacotes (por exemplo, seu build já produz binários de outra forma), o nFPM mantém o passo de CI pequeno e livre de toolchain. Muitos pipelines usam o nFPM diretamente para saída simples de pacotes e o GoReleaser quando querem orquestração completa de release.

Ressalvas honestas

O GoReleaser é amplo, mas é mais ergonômico para projetos Go; usá-lo para outras linguagens funciona, mas é menos idiomático, e sua config pode crescer muito. O nFPM é intencionalmente restrito: ele não faz build, não assina-e-publica nem gerencia releases, então você conecta esses passos por conta própria. Escolher o nFPM significa montar mais do pipeline à mão.

O veredito

Use o nFPM quando você só precisa de pacotes deb/rpm/apk sem tooling nativo. Use o GoReleaser quando quiser automação completa de release (build, package, sign, publish), lembrando que ele depende do nFPM para a parte de empacotamento.

Guias relacionados