feat: Add zstd support

This commit is contained in:
Peter Fern 2025-11-02 11:22:25 +11:00
parent 75bca91334
commit bca575224f
4 changed files with 22 additions and 4 deletions

View file

@ -121,10 +121,10 @@ func init() {
uploadCmd.MarkFlagsMutuallyExclusive(uploadFlagImageURL, uploadFlagImagePath)
uploadCmd.MarkFlagsOneRequired(uploadFlagImageURL, uploadFlagImagePath)
uploadCmd.Flags().String(uploadFlagCompression, "", "Type of compression that was used on the disk image [choices: bz2, xz]")
uploadCmd.Flags().String(uploadFlagCompression, "", "Type of compression that was used on the disk image [choices: bz2, xz, zstd]")
_ = uploadCmd.RegisterFlagCompletionFunc(
uploadFlagCompression,
cobra.FixedCompletions([]string{string(hcloudimages.CompressionBZ2), string(hcloudimages.CompressionXZ)}, cobra.ShellCompDirectiveNoFileComp),
cobra.FixedCompletions([]string{string(hcloudimages.CompressionBZ2), string(hcloudimages.CompressionXZ), string(hcloudimages.CompressionZSTD)}, cobra.ShellCompDirectiveNoFileComp),
)
uploadCmd.Flags().String(uploadFlagFormat, "", "Format of the image. [choices: qcow2]")

View file

@ -34,7 +34,7 @@ hcloud-upload-image upload (--image-path=<local-path> | --image-url=<url>) --arc
```
--architecture string CPU architecture of the disk image [choices: x86, arm]
--compression string Type of compression that was used on the disk image [choices: bz2, xz]
--compression string Type of compression that was used on the disk image [choices: bz2, xz, zstd]
--description string Description for the resulting image
--format string Format of the image. [choices: qcow2]
-h, --help help for upload

View file

@ -104,9 +104,10 @@ const (
CompressionNone Compression = ""
CompressionBZ2 Compression = "bz2"
CompressionXZ Compression = "xz"
CompressionZSTD Compression = "zstd"
// Possible future additions:
// zip,zstd
// zip
)
type Format string
@ -524,6 +525,8 @@ func assembleCommand(options UploadOptions) (string, error) {
cmd += "bzip2 -cd | "
case CompressionXZ:
cmd += "xz -cd | "
case CompressionZSTD:
cmd += "zstd -cd | "
default:
return "", fmt.Errorf("unknown compression: %q", options.ImageCompression)
}

View file

@ -48,6 +48,21 @@ func TestAssembleCommand(t *testing.T) {
},
want: "bash -c 'set -euo pipefail && wget --no-verbose -O - \"https://example.com/image.xz\" | xz -cd | dd of=/dev/sda bs=4M && sync'",
},
{
name: "local zstd",
options: UploadOptions{
ImageCompression: CompressionZSTD,
},
want: "bash -c 'set -euo pipefail && zstd -cd | dd of=/dev/sda bs=4M && sync'",
},
{
name: "remote zstd",
options: UploadOptions{
ImageURL: mustParseURL("https://example.com/image.zst"),
ImageCompression: CompressionZSTD,
},
want: "bash -c 'set -euo pipefail && wget --no-verbose -O - \"https://example.com/image.zst\" | zstd -cd | dd of=/dev/sda bs=4M && sync'",
},
{
name: "local bz2",
options: UploadOptions{