From e470bd1be490ac2ba96a9f126e5da66823639607 Mon Sep 17 00:00:00 2001 From: Julien Massot Date: Fri, 11 Apr 2025 09:17:00 +0200 Subject: [PATCH] actions: pack/unpack: Add support for zstd compression Debian Bookworm includes a version of tar with native support for Zstandard compression. Add mapping to enable zstd in pack and unpack operations. Signed-off-by: Julien Massot --- actions/pack_action.go | 17 ++++++++--------- archiver.go | 1 + 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/actions/pack_action.go b/actions/pack_action.go index 8d34979..f135199 100644 --- a/actions/pack_action.go +++ b/actions/pack_action.go @@ -14,7 +14,7 @@ Mandatory properties: Optional properties: -- compression -- compression type to use. Currently only 'gz', 'bzip2' and 'xz' +- compression -- compression type to use. Currently only 'gz', 'bzip2', 'xz' and 'zstd'. compression types are supported. Use 'none' for uncompressed tarball. The 'gz' compression type will be used by default. @@ -32,9 +32,10 @@ import ( ) var tarOpts = map[string]string{ - "gz": "z", - "bzip2": "j", - "xz": "J", + "gz": "--gzip", + "bzip2": "--bzip2", + "xz": "--xz", + "zstd": "--zstd", "none": "", } @@ -77,16 +78,14 @@ func (pf *PackAction) Run(context *debos.DebosContext) error { outfile := path.Join(context.Artifactdir, pf.File) command := []string{"tar"} - if usePigz == true { - command = append(command, "cf") - } else { - command = append(command, "cf" + tarOpts[pf.Compression]) - } + command = append(command, "cf") command = append(command, outfile) command = append(command, "--xattrs") command = append(command, "--xattrs-include=*.*") if usePigz == true { command = append(command, "--use-compress-program=pigz") + } else if tarOpts[pf.Compression] != "" { + command = append(command, tarOpts[pf.Compression]) } command = append(command, "-C", context.Rootdir) command = append(command, ".") diff --git a/archiver.go b/archiver.go index 5844df5..410ac8f 100644 --- a/archiver.go +++ b/archiver.go @@ -86,6 +86,7 @@ func tarOptions(compression string) string { "gz": "-z", "bzip2": "-j", "xz": "-J", + "zstd": "--zstd", } // Trying to guess all other supported compression types return unpackTarOpts[compression]