@@ -10,6 +10,7 @@ import (
1010 "os/exec"
1111 "path/filepath"
1212 "runtime"
13+ "sort"
1314 "strings"
1415 "testing"
1516)
@@ -110,6 +111,7 @@ func main() {
110111 expectedConfig : `//go:multibuild:include=linux/amd64,linux/arm64
111112//go:multibuild:exclude=android/*,ios/*
112113//go:multibuild:output=${TARGET}-${GOOS}-${GOARCH}
114+ //go:multibuild:format=raw
113115` ,
114116 expectedTargets : "linux/amd64\n linux/arm64\n " ,
115117 },
@@ -124,6 +126,7 @@ func main() {
124126 expectedConfig : `//go:multibuild:include=*/arm64
125127//go:multibuild:exclude=android/arm64,darwin/arm64,freebsd/arm64,ios/arm64,netbsd/arm64,openbsd/arm64,windows/arm64,android/*,ios/*
126128//go:multibuild:output=${TARGET}-${GOOS}-${GOARCH}
129+ //go:multibuild:format=raw
127130` ,
128131 expectedTargets : "linux/arm64\n " ,
129132 },
@@ -139,6 +142,75 @@ func main() {
139142 expectedConfig : `//go:multibuild:include=linux/amd64,linux/arm64
140143//go:multibuild:exclude=android/*,ios/*
141144//go:multibuild:output=bin/${TARGET}-hello-${GOOS}-world-${GOARCH}
145+ //go:multibuild:format=raw
146+ ` ,
147+ expectedTargets : "linux/amd64\n linux/arm64\n " ,
148+ },
149+ {
150+ name : "format=raw" ,
151+ config : `//go:multibuild:include=linux/amd64,linux/arm64
152+ //go:multibuild:format=raw
153+ ` ,
154+ expectedBinaries : []string {
155+ "${TARGET}-linux-amd64" ,
156+ "${TARGET}-linux-arm64" ,
157+ },
158+ expectedConfig : `//go:multibuild:include=linux/amd64,linux/arm64
159+ //go:multibuild:exclude=android/*,ios/*
160+ //go:multibuild:output=${TARGET}-${GOOS}-${GOARCH}
161+ //go:multibuild:format=raw
162+ ` ,
163+ expectedTargets : "linux/amd64\n linux/arm64\n " ,
164+ },
165+ {
166+ name : "format=zip" ,
167+ config : `//go:multibuild:include=linux/amd64,linux/arm64
168+ //go:multibuild:format=zip
169+ ` ,
170+ expectedBinaries : []string {
171+ "${TARGET}-linux-amd64.zip" ,
172+ "${TARGET}-linux-arm64.zip" ,
173+ },
174+ expectedConfig : `//go:multibuild:include=linux/amd64,linux/arm64
175+ //go:multibuild:exclude=android/*,ios/*
176+ //go:multibuild:output=${TARGET}-${GOOS}-${GOARCH}
177+ //go:multibuild:format=zip
178+ ` ,
179+ expectedTargets : "linux/amd64\n linux/arm64\n " ,
180+ },
181+ {
182+ name : "format=tar.gz" ,
183+ config : `//go:multibuild:include=linux/amd64,linux/arm64
184+ //go:multibuild:format=tar.gz
185+ ` ,
186+ expectedBinaries : []string {
187+ "${TARGET}-linux-amd64.tar.gz" ,
188+ "${TARGET}-linux-arm64.tar.gz" ,
189+ },
190+ expectedConfig : `//go:multibuild:include=linux/amd64,linux/arm64
191+ //go:multibuild:exclude=android/*,ios/*
192+ //go:multibuild:output=${TARGET}-${GOOS}-${GOARCH}
193+ //go:multibuild:format=tar.gz
194+ ` ,
195+ expectedTargets : "linux/amd64\n linux/arm64\n " ,
196+ },
197+ {
198+ name : "format=raw,zip,tar.gz" ,
199+ config : `//go:multibuild:include=linux/amd64,linux/arm64
200+ //go:multibuild:format=raw,zip,tar.gz
201+ ` ,
202+ expectedBinaries : []string {
203+ "${TARGET}-linux-amd64" ,
204+ "${TARGET}-linux-arm64" ,
205+ "${TARGET}-linux-amd64.zip" ,
206+ "${TARGET}-linux-arm64.zip" ,
207+ "${TARGET}-linux-amd64.tar.gz" ,
208+ "${TARGET}-linux-arm64.tar.gz" ,
209+ },
210+ expectedConfig : `//go:multibuild:include=linux/amd64,linux/arm64
211+ //go:multibuild:exclude=android/*,ios/*
212+ //go:multibuild:output=${TARGET}-${GOOS}-${GOARCH}
213+ //go:multibuild:format=raw,zip,tar.gz
142214` ,
143215 expectedTargets : "linux/amd64\n linux/arm64\n " ,
144216 },
@@ -187,7 +259,14 @@ func main() {
187259 if err != nil {
188260 t .Fatalf ("failed to multibuild: %v\n Output:\n %s" , err , out )
189261 }
262+ if len (out ) != 0 {
263+ t .Fatalf ("unexpected output: %s" , out )
264+ }
190265
266+ // FIXME: This test has a small oversight. It was written to assert that the expected output is created.
267+ // But ideally it should also be asserting that no *unexpected* output is created.
268+ //
269+ // An example here is that if we request format=zip, we should assert that the 'raw' binaries are removed.
191270 for _ , want := range test .expectedBinaries {
192271 want := strings .ReplaceAll (want , "${TARGET}" , filepath .Base (testTmp ))
193272 if _ , err := os .Stat (filepath .Join (testTmp , want )); err != nil {
@@ -364,3 +443,42 @@ func main() { fmt.Println("Hello from main%d in pkg%d") }
364443 })
365444 }
366445}
446+
447+ func tree (path string ) ([]string , error ) {
448+ var lines []string
449+
450+ var walk func (dir string , prefix string )
451+ walk = func (dir string , prefix string ) {
452+ entries , err := os .ReadDir (dir )
453+ if err != nil {
454+ return
455+ }
456+
457+ sort .Slice (entries , func (i , j int ) bool {
458+ return strings .ToLower (entries [i ].Name ()) < strings .ToLower (entries [j ].Name ())
459+ })
460+
461+ for i , e := range entries {
462+ last := i == len (entries )- 1
463+
464+ connector := "├── "
465+ childPrefix := prefix + "│ "
466+
467+ if last {
468+ connector = "└── "
469+ childPrefix = prefix + " "
470+ }
471+
472+ lines = append (lines , prefix + connector + e .Name ())
473+
474+ if e .IsDir () {
475+ walk (filepath .Join (dir , e .Name ()), childPrefix )
476+ }
477+ }
478+ }
479+
480+ lines = append (lines , filepath .Base (path ))
481+ walk (path , "" )
482+
483+ return lines , nil
484+ }
0 commit comments