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.
| GoReleaser | nFPM | |
|---|---|---|
| Escopo | Pipeline completo de release | Apenas build de pacotes |
| Saídas | Binários, archives, pacotes, releases | Pacotes deb, rpm, apk |
| Cross-compile | Sim (gerencia os builds) | Não (você fornece os arquivos) |
| Publicação | GitHub, registries, Homebrew, etc. | Nenhuma (só produz pacotes) |
| Ferramentas nativas necessárias | Não | Não (implementação pura) |
| Relação | Usa o nFPM internamente | Um 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.