From fc740b64373620fc486328abdf7e1035632855a3 Mon Sep 17 00:00:00 2001 From: Dorian Villet Date: Tue, 5 Dec 2023 10:37:46 +0100 Subject: [PATCH] Use zstd for artifact compression instead of gzip. --- client/artifact.go | 2 +- provisioner/local/fs.go | 2 +- provisioner/openstack/fs.go | 5 +++-- server/scheduler.go | 2 +- server/server_artifacts.go | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/client/artifact.go b/client/artifact.go index 8675dd3..da9aeaf 100644 --- a/client/artifact.go +++ b/client/artifact.go @@ -65,7 +65,7 @@ var artifactCmd = &cobra.Command{ var errors []string for i, task := range finishedTasks { - file := path.Join(lo.Must(cmd.Flags().GetString("output")), fmt.Sprintf("%s.tar.gz", task)) + file := path.Join(lo.Must(cmd.Flags().GetString("output")), fmt.Sprintf("%s.tar.zst", task)) if err := downloadArtifact(cmd.Context(), job.Name, task, file); err != nil { errors = append(errors, err.Error()) } diff --git a/provisioner/local/fs.go b/provisioner/local/fs.go index 8818c5a..1a9193e 100644 --- a/provisioner/local/fs.go +++ b/provisioner/local/fs.go @@ -41,7 +41,7 @@ func (f *fs) SaveContainerLogs(containerId, p string) error { } func (f *fs) Archive(p string) (rc io.ReadCloser, err error) { - cmd := exec.Command("tar", "-c", "-f", "-", "-z", "-C", f.root, strings.TrimLeft(p, "/")) + cmd := exec.Command("tar", "--create", "--use-compress-program", "zstd --compress --adapt=min=5,max=8", "--file", "-", "--directory", f.root, strings.TrimLeft(p, "/")) if rc, err = cmd.StdoutPipe(); err != nil { return } diff --git a/provisioner/openstack/fs.go b/provisioner/openstack/fs.go index 57492ad..db98c1e 100644 --- a/provisioner/openstack/fs.go +++ b/provisioner/openstack/fs.go @@ -65,7 +65,7 @@ func (f *fs) SaveContainerLogs(containerId, p string) error { )) } -// Archive returns a .tar.gz of the given path +// Archive returns a .tar.zst of the given path func (f *fs) Archive(p string) (io.ReadCloser, error) { session, err := f.ssh.NewSession() if err != nil { @@ -74,7 +74,8 @@ func (f *fs) Archive(p string) (io.ReadCloser, error) { out := lo.Must(session.StdoutPipe()) if err = session.Start(fmt.Sprintf( - "tar -c -f - -z -C %s %s", + "tar --create --use-compress-program=%s --file - --directory %s %s", + shellescape.Quote("zstd --compress --adapt=min=5,max=8"), shellescape.Quote(f.root), shellescape.Quote(strings.TrimLeft(p, "/")), )); err != nil { diff --git a/server/scheduler.go b/server/scheduler.go index 8bd9a9f..eaaee6b 100644 --- a/server/scheduler.go +++ b/server/scheduler.go @@ -53,7 +53,7 @@ func preserveArtifacts(reader io.Reader, task *schedulerpkg.Task) error { return fmt.Errorf("failed to create artifacts directory: %w", err) } - artifactFile := fmt.Sprintf("%s.tar.gz", task.Name) + artifactFile := fmt.Sprintf("%s.tar.zst", task.Name) file, err := os.OpenFile(path.Join(artifactsDir, artifactFile), os.O_CREATE|os.O_WRONLY, 0644) if err != nil { return fmt.Errorf("failed to create artifact file: %w", err) diff --git a/server/server_artifacts.go b/server/server_artifacts.go index 6512a4c..93680e5 100644 --- a/server/server_artifacts.go +++ b/server/server_artifacts.go @@ -14,7 +14,7 @@ import ( ) func (s *server) DownloadArtifact(req *proto.DownloadArtifactRequest, srv proto.Alfred_DownloadArtifactServer) error { - artifact := path.Join(dataRoot, "artifacts", req.Job, fmt.Sprintf("%s.tar.gz", req.Task)) + artifact := path.Join(dataRoot, "artifacts", req.Job, fmt.Sprintf("%s.tar.zst", req.Task)) if _, err := os.Stat(artifact); err != nil { return status.Errorf(codes.NotFound, "artifact not found")