配置全自动docker版本部署
This commit is contained in:
+9
-20
@@ -1,6 +1,5 @@
|
||||
//go:build ignore
|
||||
|
||||
// build.go
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -15,8 +14,8 @@ import (
|
||||
type Platform struct {
|
||||
OS string
|
||||
Arch string
|
||||
Name string // 显示名称
|
||||
Ext string // 文件扩展名(Windows 需要 .exe)
|
||||
Name string
|
||||
Ext string
|
||||
}
|
||||
|
||||
var platforms = []Platform{
|
||||
@@ -34,22 +33,19 @@ const (
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 解析命令行参数
|
||||
if len(os.Args) > 1 {
|
||||
target := os.Args[1]
|
||||
if target == "all" {
|
||||
switch target {
|
||||
case "all":
|
||||
buildAll()
|
||||
return
|
||||
}
|
||||
if target == "clean" {
|
||||
case "clean":
|
||||
clean()
|
||||
return
|
||||
}
|
||||
if target == "list" {
|
||||
case "list":
|
||||
listPlatforms()
|
||||
return
|
||||
}
|
||||
// 尝试匹配平台
|
||||
for _, p := range platforms {
|
||||
if target == p.OS+"/"+p.Arch {
|
||||
build(p, false)
|
||||
@@ -61,8 +57,6 @@ func main() {
|
||||
fmt.Println(" 或: all, list, clean")
|
||||
return
|
||||
}
|
||||
|
||||
// 交互式菜单
|
||||
interactiveMenu()
|
||||
}
|
||||
|
||||
@@ -104,7 +98,6 @@ func interactiveMenu() {
|
||||
buildAll()
|
||||
return
|
||||
default:
|
||||
// 尝试匹配数字
|
||||
var idx int
|
||||
if n, err := fmt.Sscanf(input, "%d", &idx); n == 1 && err == nil && idx >= 1 && idx <= len(platforms) {
|
||||
build(platforms[idx-1], false)
|
||||
@@ -136,8 +129,8 @@ func build(p Platform, silent bool) {
|
||||
outName := Binary + "-" + p.OS + "-" + p.Arch + p.Ext
|
||||
outPath := filepath.Join(outDir, outName)
|
||||
|
||||
// 构建命令
|
||||
cmd := exec.Command("go.exe", "build",
|
||||
// 用 "go" 而不是硬编码路径,让系统去 PATH 里找
|
||||
cmd := exec.Command("go", "build",
|
||||
"-ldflags=-s -w -X main.version="+Version,
|
||||
"-o", outPath,
|
||||
".",
|
||||
@@ -145,7 +138,7 @@ func build(p Platform, silent bool) {
|
||||
cmd.Env = append(os.Environ(),
|
||||
"GOOS="+p.OS,
|
||||
"GOARCH="+p.Arch,
|
||||
"CGO_ENABLED=0", // 禁用 CGO,保证静态编译
|
||||
"CGO_ENABLED=0",
|
||||
)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
@@ -157,14 +150,12 @@ func build(p Platform, silent bool) {
|
||||
|
||||
if !silent {
|
||||
fmt.Printf("✅ 构建完成: %s\n", outPath)
|
||||
// 显示文件大小
|
||||
if info, err := os.Stat(outPath); err == nil {
|
||||
size := float64(info.Size()) / 1024 / 1024
|
||||
fmt.Printf(" 📦 %.2f MB\n", size)
|
||||
}
|
||||
}
|
||||
|
||||
// 打包(仅单平台构建时自动打包)
|
||||
if !silent {
|
||||
packageBinary(outPath, p)
|
||||
}
|
||||
@@ -175,14 +166,12 @@ func packageBinary(binPath string, p Platform) {
|
||||
dir := filepath.Dir(binPath)
|
||||
|
||||
if p.Ext == ".exe" {
|
||||
// Windows: zip
|
||||
zipName := filepath.Join(dir, base+".zip")
|
||||
cmd := exec.Command("zip", "-j", zipName, binPath)
|
||||
if err := cmd.Run(); err == nil {
|
||||
fmt.Printf(" 📦 已打包: %s\n", zipName)
|
||||
}
|
||||
} else {
|
||||
// Linux/macOS: tar.gz
|
||||
tarName := filepath.Join(dir, base+".tar.gz")
|
||||
cmd := exec.Command("tar", "-czf", tarName, "-C", dir, filepath.Base(binPath))
|
||||
if err := cmd.Run(); err == nil {
|
||||
|
||||
Reference in New Issue
Block a user