mirror of
https://github.com/goreleaser/nfpm
synced 2024-05-13 19:56:28 +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,
|
||||
) (int64, error) {
|
||||
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
|
||||
// an error in another part of the code.
|
||||
defer out.Close() // nolint: errcheck
|
||||
|
@ -500,13 +503,14 @@ func createChangelogInsideDataTar(tarw *tar.Writer, md5w io.Writer,
|
|||
}
|
||||
|
||||
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()
|
||||
|
||||
// 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 {
|
||||
return 0, err
|
||||
}
|
||||
|
@ -570,15 +574,6 @@ func createControl(instSize int64, md5sums []byte, info *nfpm.Info) (controlTarG
|
|||
"conffiles": conffiles(info),
|
||||
}
|
||||
|
||||
if info.Changelog != "" {
|
||||
changeLogData, err := formatChangelog(info)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
filesToCreate["changelog"] = []byte(changeLogData)
|
||||
}
|
||||
|
||||
triggers := createTriggers(info)
|
||||
if len(triggers) > 0 {
|
||||
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) {
|
||||
info := &nfpm.Info{
|
||||
Name: "changelog-test",
|
||||
|
@ -595,7 +558,7 @@ func TestDebChangelogData(t *testing.T) {
|
|||
dataTarball, _, _, dataTarballName, err := createDataTarball(info)
|
||||
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,
|
||||
inflate(t, dataTarballName, dataTarball), changelogName)
|
||||
|
||||
|
|
|
@ -130,12 +130,18 @@ FROM test_base AS withchangelog
|
|||
# image filters out changelogs by default
|
||||
# so we have to remove that rule
|
||||
RUN apt update -y
|
||||
RUN apt install -y gzip
|
||||
RUN apt install -y gzip lintian
|
||||
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.gz" | grep "note 1"
|
||||
RUN zcat "/usr/share/doc/foo/changelog.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 "Carlos A Becker <pkg@carlosbecker.com>"
|
||||
RUN zcat "/usr/share/doc/foo/changelog.Debian.gz" | grep "note 1"
|
||||
RUN zcat "/usr/share/doc/foo/changelog.Debian.gz" | grep "note 2"
|
||||
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 ----
|
||||
FROM min AS rules
|
||||
|
|
Loading…
Reference in New Issue