goenv/goenv.go
xiaoqidun 292daa8a0c
All checks were successful
continuous-integration/drone/push Build is passing
feat(容器支持): 在linux环境下优先使用podman
2021-09-08 10:56:46 +08:00

78 lines
1.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"flag"
"fmt"
"os"
"os/exec"
"runtime"
)
var (
author bool
)
func init() {
flag.BoolVar(&author, "author", false, "关于本软件开发者")
flag.Parse()
}
func main() {
if author {
Author()
return
}
binary := "docker"
if runtime.GOOS == "linux" {
podman, err := exec.LookPath("podman")
if err == nil {
binary = podman
}
}
docker := &DockerGoEnv{
Image: "xiaoqidun/goenv",
Binary: binary,
WorkDir: "/go/src/app",
AutoDelete: true,
MountWorkDir: true,
}
docker.Run()
}
func Author() {
fmt.Println("welcome to our website https://aite.xyz/")
fmt.Println("----------------------------------------")
fmt.Println("腾讯扣扣88966001")
fmt.Println("电子邮箱xiaoqidun@gmail.com")
}
type DockerGoEnv struct {
Image string
Binary string
CmdArgs []string
WorkDir string
AutoDelete bool
MountWorkDir bool
}
func (d *DockerGoEnv) Run() {
d.CmdArgs = []string{"run", "-it"}
if d.AutoDelete {
d.CmdArgs = append(d.CmdArgs, "--rm")
}
if d.MountWorkDir {
if pwd, err1 := os.Getwd(); err1 == nil {
d.CmdArgs = append(d.CmdArgs, "-v", pwd+":"+d.WorkDir, "-w", d.WorkDir)
}
}
if hostname, err1 := os.Hostname(); err1 == nil {
d.CmdArgs = append(d.CmdArgs, "-h", hostname)
}
d.CmdArgs = append(d.CmdArgs, d.Image)
cmd := exec.Command(d.Binary, d.CmdArgs...)
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
_ = cmd.Run()
}