|  | @@ -1,127 +0,0 @@
 | 
											
												
													
														|  | -package main
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -import (
 |  | 
 | 
											
												
													
														|  | -	"flag"
 |  | 
 | 
											
												
													
														|  | -	"fmt"
 |  | 
 | 
											
												
													
														|  | -	"os"
 |  | 
 | 
											
												
													
														|  | -	"path/filepath"
 |  | 
 | 
											
												
													
														|  | -	"runtime"
 |  | 
 | 
											
												
													
														|  | -)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -var (
 |  | 
 | 
											
												
													
														|  | -	flagTargetDir    = flag.String("dir", "", "Directory to put generated files.")
 |  | 
 | 
											
												
													
														|  | -	flagTargetOS     = flag.String("os", runtime.GOOS, "Target OS of this build.")
 |  | 
 | 
											
												
													
														|  | -	flagTargetArch   = flag.String("arch", runtime.GOARCH, "Target CPU arch of this build.")
 |  | 
 | 
											
												
													
														|  | -	flagArchive      = flag.Bool("zip", false, "Whether to make an archive of files or not.")
 |  | 
 | 
											
												
													
														|  | -	flagMetadataFile = flag.String("metadata", "metadata.txt", "File to store metadata info of released packages.")
 |  | 
 | 
											
												
													
														|  | -	flagSignBinary   = flag.Bool("sign", false, "Whether or not to sign the binaries.")
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	binPath string
 |  | 
 | 
											
												
													
														|  | -)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -func createTargetDirectory(version string, goOS GoOS, goArch GoArch) (string, error) {
 |  | 
 | 
											
												
													
														|  | -	var targetDir string
 |  | 
 | 
											
												
													
														|  | -	if len(*flagTargetDir) > 0 {
 |  | 
 | 
											
												
													
														|  | -		targetDir = *flagTargetDir
 |  | 
 | 
											
												
													
														|  | -	} else {
 |  | 
 | 
											
												
													
														|  | -		suffix := getSuffix(goOS, goArch)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -		targetDir = filepath.Join(binPath, "v2ray-"+version+suffix)
 |  | 
 | 
											
												
													
														|  | -		if version != "custom" {
 |  | 
 | 
											
												
													
														|  | -			os.RemoveAll(targetDir)
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	err := os.MkdirAll(targetDir, os.ModeDir|0777)
 |  | 
 | 
											
												
													
														|  | -	return targetDir, err
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -func getTargetFile(goOS GoOS) string {
 |  | 
 | 
											
												
													
														|  | -	suffix := ""
 |  | 
 | 
											
												
													
														|  | -	if goOS == Windows {
 |  | 
 | 
											
												
													
														|  | -		suffix += ".exe"
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -	return "v2ray" + suffix
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -func getBinPath() string {
 |  | 
 | 
											
												
													
														|  | -	GOPATH := os.Getenv("GOPATH")
 |  | 
 | 
											
												
													
														|  | -	return filepath.Join(GOPATH, "bin")
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -func main() {
 |  | 
 | 
											
												
													
														|  | -	flag.Parse()
 |  | 
 | 
											
												
													
														|  | -	binPath = getBinPath()
 |  | 
 | 
											
												
													
														|  | -	build(*flagTargetOS, *flagTargetArch, *flagArchive, "", *flagMetadataFile)
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -func build(targetOS, targetArch string, archive bool, version string, metadataFile string) {
 |  | 
 | 
											
												
													
														|  | -	v2rayOS := parseOS(targetOS)
 |  | 
 | 
											
												
													
														|  | -	v2rayArch := parseArch(targetArch)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	if len(version) == 0 {
 |  | 
 | 
											
												
													
														|  | -		version = os.Getenv("TRAVIS_TAG")
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	if len(version) == 0 {
 |  | 
 | 
											
												
													
														|  | -		version = "custom"
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	fmt.Printf("Building V2Ray (%s) for %s %s\n", version, v2rayOS, v2rayArch)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	targetDir, err := createTargetDirectory(version, v2rayOS, v2rayArch)
 |  | 
 | 
											
												
													
														|  | -	if err != nil {
 |  | 
 | 
											
												
													
														|  | -		fmt.Println("Unable to create directory " + targetDir + ": " + err.Error())
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	targetFile := getTargetFile(v2rayOS)
 |  | 
 | 
											
												
													
														|  | -	targetFileFull := filepath.Join(targetDir, targetFile)
 |  | 
 | 
											
												
													
														|  | -	if err := buildV2Ray(targetFileFull, version, v2rayOS, v2rayArch, ""); err != nil {
 |  | 
 | 
											
												
													
														|  | -		fmt.Println("Unable to build V2Ray: " + err.Error())
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -	if v2rayOS == Windows {
 |  | 
 | 
											
												
													
														|  | -		if err := buildV2Ray(filepath.Join(targetDir, "w"+targetFile), version, v2rayOS, v2rayArch, "-H windowsgui"); err != nil {
 |  | 
 | 
											
												
													
														|  | -			fmt.Println("Unable to build V2Ray no console: " + err.Error())
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	if *flagSignBinary {
 |  | 
 | 
											
												
													
														|  | -		if err := signFile(targetFileFull); err != nil {
 |  | 
 | 
											
												
													
														|  | -			fmt.Println("Unable to sign V2Ray binary: " + err.Error())
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -		if v2rayOS == Windows {
 |  | 
 | 
											
												
													
														|  | -			if err := signFile(filepath.Join(targetDir, "w"+targetFile)); err != nil {
 |  | 
 | 
											
												
													
														|  | -				fmt.Println("Unable to sign V2Ray no console: " + err.Error())
 |  | 
 | 
											
												
													
														|  | -			}
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	if err := copyConfigFiles(targetDir, v2rayOS); err != nil {
 |  | 
 | 
											
												
													
														|  | -		fmt.Println("Unable to copy config files: " + err.Error())
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	if archive {
 |  | 
 | 
											
												
													
														|  | -		if err := os.Chdir(binPath); err != nil {
 |  | 
 | 
											
												
													
														|  | -			fmt.Printf("Unable to switch to directory (%s): %v\n", binPath, err)
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -		suffix := getSuffix(v2rayOS, v2rayArch)
 |  | 
 | 
											
												
													
														|  | -		zipFile := "v2ray" + suffix + ".zip"
 |  | 
 | 
											
												
													
														|  | -		root := filepath.Base(targetDir)
 |  | 
 | 
											
												
													
														|  | -		err = zipFolder(root, zipFile)
 |  | 
 | 
											
												
													
														|  | -		if err != nil {
 |  | 
 | 
											
												
													
														|  | -			fmt.Printf("Unable to create archive (%s): %v\n", zipFile, err)
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -		metadataWriter, err := os.OpenFile(filepath.Join(binPath, metadataFile), os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
 |  | 
 | 
											
												
													
														|  | -		if err != nil {
 |  | 
 | 
											
												
													
														|  | -			fmt.Printf("Unable to create metadata file (%s): %v\n", metadataFile, err)
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -		defer metadataWriter.Close()
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -		err = CalcMetadata(zipFile, metadataWriter)
 |  | 
 | 
											
												
													
														|  | -		if err != nil {
 |  | 
 | 
											
												
													
														|  | -			fmt.Printf("Failed to calculate metadata for file (%s): %v", zipFile, err)
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 |