github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/build/bin_test.go (about) 1 package build 2 3 import ( 4 "os/exec" 5 "path/filepath" 6 "runtime" 7 "strings" 8 "testing" 9 10 "github.com/gobuffalo/envy" 11 "github.com/gobuffalo/meta" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func appBinaryFolder() string { 16 prefix := "." + string(filepath.Separator) 17 path := filepath.Join("cmd", "app") 18 19 return prefix + path 20 } 21 22 func Test_buildCmd(t *testing.T) { 23 envy.Set("GO_BIN", "go") 24 r := require.New(t) 25 26 eq := func(s string, c *exec.Cmd) { 27 if runtime.GOOS == "windows" { 28 s = strings.Replace(s, "bin/build", `bin\build.exe`, 1) 29 s = strings.Replace(s, "bin/foo", `bin\foo.exe`, 1) 30 } 31 r.Equal(s, strings.Join(c.Args, " ")) 32 } 33 34 opts := &Options{ 35 App: meta.New("."), 36 GoCommand: "build", 37 } 38 c, err := buildCmd(opts) 39 r.NoError(err) 40 eq("go build -o bin/build "+appBinaryFolder(), c) 41 42 opts.Environment = "bar" 43 c, err = buildCmd(opts) 44 r.NoError(err) 45 eq("go build -tags bar -o bin/build "+appBinaryFolder(), c) 46 47 opts.App.Bin = "bin/foo" 48 c, err = buildCmd(opts) 49 r.NoError(err) 50 eq("go build -tags bar -o bin/foo "+appBinaryFolder(), c) 51 52 opts.WithSQLite = true 53 c, err = buildCmd(opts) 54 r.NoError(err) 55 eq("go build -tags bar sqlite -o bin/foo "+appBinaryFolder(), c) 56 57 opts.LDFlags = "-X foo.Bar=baz" 58 c, err = buildCmd(opts) 59 r.NoError(err) 60 eq("go build -tags bar sqlite -o bin/foo -ldflags -X foo.Bar=baz "+appBinaryFolder(), c) 61 62 opts.Static = true 63 c, err = buildCmd(opts) 64 r.NoError(err) 65 eq("go build -tags bar sqlite -o bin/foo -ldflags -linkmode external -extldflags \"-static\" -X foo.Bar=baz "+appBinaryFolder(), c) 66 67 opts.LDFlags = "-X main.BuildTime=asdf" 68 c, err = buildCmd(opts) 69 r.NoError(err) 70 eq("go build -tags bar sqlite -o bin/foo -ldflags -linkmode external -extldflags \"-static\" -X main.BuildTime=asdf "+appBinaryFolder(), c) 71 72 opts.LDFlags = "-X main.BuildVersion=asdf" 73 c, err = buildCmd(opts) 74 r.NoError(err) 75 eq("go build -tags bar sqlite -o bin/foo -ldflags -linkmode external -extldflags \"-static\" -X main.BuildVersion=asdf "+appBinaryFolder(), c) 76 } 77 78 func Test_buildCmd_Unix_RemovesExe(t *testing.T) { 79 if runtime.GOOS == "windows" { 80 return 81 } 82 envy.Set("GO_BIN", "go") 83 r := require.New(t) 84 85 eq := func(s string, c *exec.Cmd) { 86 r.Equal(s, strings.Join(c.Args, " ")) 87 } 88 app := meta.New(".") 89 app.Bin = "bin/build.exe" 90 opts := &Options{ 91 App: app, 92 GoCommand: "build", 93 } 94 c, err := buildCmd(opts) 95 r.NoError(err) 96 eq("go build -o bin/build "+appBinaryFolder(), c) 97 } 98 99 func Test_buildCmd_Windows_AddsExe(t *testing.T) { 100 if runtime.GOOS != "windows" { 101 return 102 } 103 envy.Set("GO_BIN", "go") 104 r := require.New(t) 105 106 eq := func(s string, c *exec.Cmd) { 107 r.Equal(s, strings.Join(c.Args, " ")) 108 } 109 110 app := meta.New(".") 111 for _, x := range []string{"bin\\build", "bin\\build.exe"} { 112 app.Bin = x 113 opts := &Options{ 114 App: app, 115 } 116 c, err := buildCmd(opts) 117 r.NoError(err) 118 eq("go build -o bin\\build.exe "+appBinaryFolder(), c) 119 } 120 } 121 122 func Test_installCmd(t *testing.T) { 123 envy.Set("GO_BIN", "go") 124 r := require.New(t) 125 126 eq := func(s string, c *exec.Cmd) { 127 if runtime.GOOS == "windows" { 128 s = strings.Replace(s, "bin/build", `bin\build.exe`, 1) 129 s = strings.Replace(s, "bin/foo", `bin\foo.exe`, 1) 130 } 131 r.Equal(s, strings.Join(c.Args, " ")) 132 } 133 134 opts := &Options{ 135 App: meta.New("."), 136 GoCommand: "install", 137 } 138 c, err := buildCmd(opts) 139 r.NoError(err) 140 eq("go install "+appBinaryFolder(), c) 141 142 opts.Environment = "bar" 143 c, err = buildCmd(opts) 144 r.NoError(err) 145 eq("go install -tags bar "+appBinaryFolder(), c) 146 147 opts.App.Bin = "bin/foo" 148 c, err = buildCmd(opts) 149 r.NoError(err) 150 eq("go install -tags bar "+appBinaryFolder(), c) 151 152 opts.WithSQLite = true 153 c, err = buildCmd(opts) 154 r.NoError(err) 155 eq("go install -tags bar sqlite "+appBinaryFolder(), c) 156 157 opts.LDFlags = "-X foo.Bar=baz" 158 c, err = buildCmd(opts) 159 r.NoError(err) 160 eq("go install -tags bar sqlite -ldflags -X foo.Bar=baz "+appBinaryFolder(), c) 161 162 opts.Static = true 163 c, err = buildCmd(opts) 164 r.NoError(err) 165 eq("go install -tags bar sqlite -ldflags -linkmode external -extldflags \"-static\" -X foo.Bar=baz "+appBinaryFolder(), c) 166 167 opts.LDFlags = "-X main.BuildTime=asdf" 168 c, err = buildCmd(opts) 169 r.NoError(err) 170 eq("go install -tags bar sqlite -ldflags -linkmode external -extldflags \"-static\" -X main.BuildTime=asdf "+appBinaryFolder(), c) 171 172 opts.LDFlags = "-X main.BuildVersion=asdf" 173 c, err = buildCmd(opts) 174 r.NoError(err) 175 eq("go install -tags bar sqlite -ldflags -linkmode external -extldflags \"-static\" -X main.BuildVersion=asdf "+appBinaryFolder(), c) 176 }