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

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