mirror of
https://github.com/goreleaser/nfpm
synced 2024-05-28 05:46:20 +02:00
fix(deb): changelog fixes (#597)
* fix(deb): changelog fixes Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> Co-authored-by: Andrei Belov <defanator@users.noreply.github.com> * fix: test Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> Co-authored-by: Andrei Belov <defanator@users.noreply.github.com>
This commit is contained in:
parent
dedee6d6b1
commit
f2e5d2a1e3
19
deb/deb.go
19
deb/deb.go
|
@ -485,7 +485,10 @@ func createChangelogInsideDataTar(tarw *tar.Writer, md5w io.Writer,
|
||||||
created map[string]bool, info *nfpm.Info,
|
created map[string]bool, info *nfpm.Info,
|
||||||
) (int64, error) {
|
) (int64, error) {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
out := gzip.NewWriter(&buf)
|
out, err := gzip.NewWriterLevel(&buf, gzip.BestCompression)
|
||||||
|
if err != nil {
|
||||||
|
return 0, fmt.Errorf("could not create gzip writer: %w", err)
|
||||||
|
}
|
||||||
// the writers are properly closed later, this is just in case that we have
|
// the writers are properly closed later, this is just in case that we have
|
||||||
// an error in another part of the code.
|
// an error in another part of the code.
|
||||||
defer out.Close() // nolint: errcheck
|
defer out.Close() // nolint: errcheck
|
||||||
|
@ -500,13 +503,14 @@ func createChangelogInsideDataTar(tarw *tar.Writer, md5w io.Writer,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = out.Close(); err != nil {
|
if err = out.Close(); err != nil {
|
||||||
return 0, fmt.Errorf("closing changelog.gz: %w", err)
|
return 0, fmt.Errorf("closing changelog.Debian.gz: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
changelogData := buf.Bytes()
|
changelogData := buf.Bytes()
|
||||||
|
|
||||||
// https://www.debian.org/doc/manuals/developers-reference/pkgs.de.html#recording-changes-in-the-package
|
// https://www.debian.org/doc/manuals/developers-reference/pkgs.de.html#recording-changes-in-the-package
|
||||||
changelogName := normalizePath(fmt.Sprintf("/usr/share/doc/%s/changelog.gz", info.Name))
|
// https://lintian.debian.org/tags/debian-changelog-file-missing-or-wrong-name
|
||||||
|
changelogName := normalizePath(fmt.Sprintf("/usr/share/doc/%s/changelog.Debian.gz", info.Name))
|
||||||
if err = createTree(tarw, changelogName, created); err != nil {
|
if err = createTree(tarw, changelogName, created); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
@ -570,15 +574,6 @@ func createControl(instSize int64, md5sums []byte, info *nfpm.Info) (controlTarG
|
||||||
"conffiles": conffiles(info),
|
"conffiles": conffiles(info),
|
||||||
}
|
}
|
||||||
|
|
||||||
if info.Changelog != "" {
|
|
||||||
changeLogData, err := formatChangelog(info)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
filesToCreate["changelog"] = []byte(changeLogData)
|
|
||||||
}
|
|
||||||
|
|
||||||
triggers := createTriggers(info)
|
triggers := createTriggers(info)
|
||||||
if len(triggers) > 0 {
|
if len(triggers) > 0 {
|
||||||
filesToCreate["triggers"] = triggers
|
filesToCreate["triggers"] = triggers
|
||||||
|
|
|
@ -544,43 +544,6 @@ func TestDEBConventionalFileName(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDebChangelogControl(t *testing.T) {
|
|
||||||
info := &nfpm.Info{
|
|
||||||
Name: "changelog-test",
|
|
||||||
Arch: "amd64",
|
|
||||||
Description: "This package has changelogs.",
|
|
||||||
Version: "1.0.0",
|
|
||||||
Changelog: "../testdata/changelog.yaml",
|
|
||||||
}
|
|
||||||
err := info.Validate()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
controlTarGz, err := createControl(0, []byte{}, info)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
controlChangelog := extractFileFromTar(t, inflate(t, "gz", controlTarGz), "changelog")
|
|
||||||
|
|
||||||
goldenChangelog := readAndFormatAsDebChangelog(t, info.Changelog, info.Name)
|
|
||||||
|
|
||||||
require.Equal(t, goldenChangelog, string(controlChangelog))
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestDebNoChangelogControlWithoutChangelogConfigured(t *testing.T) {
|
|
||||||
info := &nfpm.Info{
|
|
||||||
Name: "no-changelog-test",
|
|
||||||
Arch: "amd64",
|
|
||||||
Description: "This package has explicitly no changelog.",
|
|
||||||
Version: "1.0.0",
|
|
||||||
}
|
|
||||||
err := info.Validate()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
controlTarGz, err := createControl(0, []byte{}, info)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
require.False(t, tarContains(t, inflate(t, "gz", controlTarGz), "changelog"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestDebChangelogData(t *testing.T) {
|
func TestDebChangelogData(t *testing.T) {
|
||||||
info := &nfpm.Info{
|
info := &nfpm.Info{
|
||||||
Name: "changelog-test",
|
Name: "changelog-test",
|
||||||
|
@ -595,7 +558,7 @@ func TestDebChangelogData(t *testing.T) {
|
||||||
dataTarball, _, _, dataTarballName, err := createDataTarball(info)
|
dataTarball, _, _, dataTarballName, err := createDataTarball(info)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
changelogName := fmt.Sprintf("/usr/share/doc/%s/changelog.gz", info.Name)
|
changelogName := fmt.Sprintf("/usr/share/doc/%s/changelog.Debian.gz", info.Name)
|
||||||
dataChangelogGz := extractFileFromTar(t,
|
dataChangelogGz := extractFileFromTar(t,
|
||||||
inflate(t, dataTarballName, dataTarball), changelogName)
|
inflate(t, dataTarballName, dataTarball), changelogName)
|
||||||
|
|
||||||
|
|
|
@ -130,12 +130,18 @@ FROM test_base AS withchangelog
|
||||||
# image filters out changelogs by default
|
# image filters out changelogs by default
|
||||||
# so we have to remove that rule
|
# so we have to remove that rule
|
||||||
RUN apt update -y
|
RUN apt update -y
|
||||||
RUN apt install -y gzip
|
RUN apt install -y gzip lintian
|
||||||
RUN dpkg -i /tmp/foo.deb
|
RUN dpkg -i /tmp/foo.deb
|
||||||
RUN zcat "/usr/share/doc/foo/changelog.gz" | grep "Carlos A Becker <pkg@carlosbecker.com>"
|
RUN zcat "/usr/share/doc/foo/changelog.Debian.gz" | grep "Carlos A Becker <pkg@carlosbecker.com>"
|
||||||
RUN zcat "/usr/share/doc/foo/changelog.gz" | grep "note 1"
|
RUN zcat "/usr/share/doc/foo/changelog.Debian.gz" | grep "note 1"
|
||||||
RUN zcat "/usr/share/doc/foo/changelog.gz" | grep "note 2"
|
RUN zcat "/usr/share/doc/foo/changelog.Debian.gz" | grep "note 2"
|
||||||
RUN zcat "/usr/share/doc/foo/changelog.gz" | grep "note 3"
|
RUN zcat "/usr/share/doc/foo/changelog.Debian.gz" | grep "note 3"
|
||||||
|
RUN lintian /tmp/foo.deb > lintian.out
|
||||||
|
RUN test $(grep -c 'debian-changelog-file-missing-or-wrong-name' lintian.out) = 0
|
||||||
|
RUN test $(grep -c 'changelog-not-compressed-with-max-compression' lintian.out) = 0
|
||||||
|
RUN test $(grep -c 'unknown-control-file' lintian.out) = 0
|
||||||
|
# TODO: RUN test $(grep -c 'package-contains-timestamped-gzip' lintian.out) = 0
|
||||||
|
# TODO: RUN test $(grep -c 'syntax-error-in-debian-changelog' lintian.out) = 0
|
||||||
|
|
||||||
# ---- rules test ----
|
# ---- rules test ----
|
||||||
FROM min AS rules
|
FROM min AS rules
|
||||||
|
|
Loading…
Reference in New Issue