diff --git a/internal/pipe/nfpm/nfpm.go b/internal/pipe/nfpm/nfpm.go index f7a885cc7..dfa21e654 100644 --- a/internal/pipe/nfpm/nfpm.go +++ b/internal/pipe/nfpm/nfpm.go @@ -252,28 +252,12 @@ func create(ctx *context.Context, fpm config.NFPM, format string, binaries []*ar }) } - if len(fpm.Deb.Lintian) > 0 { - lines := make([]string, 0, len(fpm.Deb.Lintian)) - for _, ov := range fpm.Deb.Lintian { - lines = append(lines, fmt.Sprintf("%s: %s", packageName, ov)) + if len(fpm.Deb.Lintian) > 0 && (format == "deb" || format == "termux.deb") { + lintian, err := setupLintian(ctx, fpm, packageName, format, arch) + if err != nil { + return err } - lintianPath := filepath.Join(ctx.Config.Dist, "deb", packageName+"_"+arch, ".lintian") - if err := os.MkdirAll(filepath.Dir(lintianPath), 0o755); err != nil { - return fmt.Errorf("failed to write lintian file: %w", err) - } - if err := os.WriteFile(lintianPath, []byte(strings.Join(lines, "\n")), 0o644); err != nil { - return fmt.Errorf("failed to write lintian file: %w", err) - } - - log.Debugf("creating %q", lintianPath) - contents = append(contents, &files.Content{ - Source: lintianPath, - Destination: filepath.Join("./usr/share/lintian/overrides", packageName), - Packager: "deb", - FileInfo: &files.ContentFileInfo{ - Mode: 0o644, - }, - }) + contents = append(contents, lintian) } log := log.WithField("package", packageName).WithField("format", format).WithField("arch", arch) @@ -456,6 +440,30 @@ func create(ctx *context.Context, fpm config.NFPM, format string, binaries []*ar return nil } +func setupLintian(ctx *context.Context, fpm config.NFPM, packageName, format, arch string) (*files.Content, error) { + lines := make([]string, 0, len(fpm.Deb.Lintian)) + for _, ov := range fpm.Deb.Lintian { + lines = append(lines, fmt.Sprintf("%s: %s", packageName, ov)) + } + lintianPath := filepath.Join(ctx.Config.Dist, format, packageName+"_"+arch, "lintian") + if err := os.MkdirAll(filepath.Dir(lintianPath), 0o755); err != nil { + return nil, fmt.Errorf("failed to write lintian file: %w", err) + } + if err := os.WriteFile(lintianPath, []byte(strings.Join(lines, "\n")), 0o644); err != nil { + return nil, fmt.Errorf("failed to write lintian file: %w", err) + } + + log.Debugf("creating %q", lintianPath) + return &files.Content{ + Source: lintianPath, + Destination: filepath.Join("./usr/share/lintian/overrides", packageName), + Packager: "deb", + FileInfo: &files.ContentFileInfo{ + Mode: 0o644, + }, + }, nil +} + func destinations(contents files.Contents) []string { result := make([]string, 0, len(contents)) for _, f := range contents { diff --git a/internal/pipe/nfpm/nfpm_test.go b/internal/pipe/nfpm/nfpm_test.go index 9aebabbb5..79eff2ed0 100644 --- a/internal/pipe/nfpm/nfpm_test.go +++ b/internal/pipe/nfpm/nfpm_test.go @@ -860,20 +860,50 @@ func TestDebSpecificConfig(t *testing.T) { t.Run("lintian", func(t *testing.T) { ctx := setupContext(t) + ctx.Parallelism = 100 ctx.Env = map[string]string{ "NFPM_SOMEID_DEB_PASSPHRASE": "hunter2", } - ctx.Config.NFPMs[0].NFPMOverridables.Deb.Lintian = []string{ + ctx.Config.NFPMs[0].Deb.Lintian = []string{ "statically-linked-binary", "changelog-file-missing-in-native-package", } - require.NoError(t, Pipe{}.Run(ctx)) + ctx.Config.NFPMs[0].Formats = []string{"apk", "rpm", "deb", "termux.deb"} + require.NoError(t, Pipe{}.Run(ctx)) + for _, format := range []string{"apk", "rpm"} { + require.NoDirExists(t, filepath.Join(ctx.Config.Dist, format)) + } + require.DirExists(t, filepath.Join(ctx.Config.Dist, "deb")) for _, goarch := range []string{"amd64", "386"} { - bts, err := os.ReadFile(filepath.Join(ctx.Config.Dist, "deb/foo_"+goarch+"/.lintian")) + bts, err := os.ReadFile(filepath.Join(ctx.Config.Dist, "deb", "foo_"+goarch, "lintian")) require.NoError(t, err) require.Equal(t, "foo: statically-linked-binary\nfoo: changelog-file-missing-in-native-package", string(bts)) } + require.DirExists(t, filepath.Join(ctx.Config.Dist, "termux.deb")) + for _, goarch := range []string{"x86_64", "i686"} { + bts, err := os.ReadFile(filepath.Join(ctx.Config.Dist, "termux.deb", "foo_"+goarch, "lintian")) + require.NoError(t, err) + require.Equal(t, "foo: statically-linked-binary\nfoo: changelog-file-missing-in-native-package", string(bts)) + } + }) + + t.Run("lintian no debs", func(t *testing.T) { + ctx := setupContext(t) + ctx.Parallelism = 100 + ctx.Env = map[string]string{ + "NFPM_SOMEID_DEB_PASSPHRASE": "hunter2", + } + ctx.Config.NFPMs[0].Deb.Lintian = []string{ + "statically-linked-binary", + "changelog-file-missing-in-native-package", + } + ctx.Config.NFPMs[0].Formats = []string{"apk", "rpm"} + + require.NoError(t, Pipe{}.Run(ctx)) + for _, format := range []string{"deb", "termux.deb"} { + require.NoDirExists(t, filepath.Join(ctx.Config.Dist, format)) + } }) }