pkg.tk-software.de/gotice@v0.4.1-0.20240224130243-6adec687b106/magefiles/package.go (about)

     1  //go:build mage
     2  
     3  package main
     4  
     5  import (
     6  	"fmt"
     7  	"os"
     8  	"path/filepath"
     9  
    10  	"github.com/magefile/mage/mg"
    11  	"pkg.tk-software.de/gotice/version"
    12  	"pkg.tk-software.de/spartan/archive/tgzfile"
    13  	"pkg.tk-software.de/spartan/archive/zipfile"
    14  )
    15  
    16  // Package packages the build artifacts together with static files into archive files.
    17  func Package() error {
    18  	mg.Deps(Build)
    19  
    20  	fmt.Println("Executing: Package")
    21  
    22  	for _, t := range Targets {
    23  		zipf := fmt.Sprintf("%s-%s-%s-%d.%d.%d", AppName, t.Os, t.Arch, version.Major, version.Minor, version.Revision)
    24  		dir := t.OutPath()
    25  
    26  		fmt.Println("Packaging:", zipf, "; source:", dir)
    27  
    28  		files, err := os.ReadDir(dir)
    29  		if err != nil {
    30  			return err
    31  		}
    32  
    33  		filesToZip := make(map[string]string)
    34  
    35  		for _, f := range files {
    36  			srcf := filepath.Join(dir, f.Name())
    37  			filesToZip[srcf] = f.Name()
    38  		}
    39  
    40  		if t.Os == "windows" {
    41  			if err := zipfile.Create(zipf+".zip", filesToZip); err != nil {
    42  				return err
    43  			}
    44  		} else {
    45  			permissions := func(filename string) int64 {
    46  				if filename == AppName {
    47  					return 0777
    48  				}
    49  
    50  				return -1
    51  			}
    52  
    53  			if err := tgzfile.CreatePermissionFunc(zipf+".tar.gz", filesToZip, permissions); err != nil {
    54  				return err
    55  			}
    56  		}
    57  	}
    58  
    59  	return nil
    60  }