github.com/tilotech/tilores-cli@v0.28.0/internal/pkg/step/packagezip.go (about)

     1  package step
     2  
     3  import (
     4  	"archive/zip"
     5  	"io"
     6  	"os"
     7  	"path"
     8  )
     9  
    10  // PackageZip creates a step that packages the source into a zip file.
    11  func PackageZip(source string, target string) Step {
    12  	return func() error {
    13  		sourceFile, err := os.Open(source) //nolint:gosec // reason: static path
    14  		if err != nil {
    15  			return err
    16  		}
    17  		defer sourceFile.Close() //nolint:gosec,errcheck // reason: opened for read
    18  
    19  		targetFile, err := os.Create(target) //nolint:gosec
    20  		if err != nil {
    21  			return err
    22  		}
    23  		defer targetFile.Close() //nolint:gosec,errcheck // reason: only applicable for error cases
    24  
    25  		zipWriter := zip.NewWriter(targetFile)
    26  		zipFile, err := zipWriter.Create(path.Base(source))
    27  		if err != nil {
    28  			return err
    29  		}
    30  		_, err = io.Copy(zipFile, sourceFile)
    31  		if err != nil {
    32  			return err
    33  		}
    34  		err = zipWriter.Close()
    35  		if err != nil {
    36  			return err
    37  		}
    38  
    39  		return targetFile.Close()
    40  	}
    41  }