github.com/marianogappa/goreleaser@v0.26.2-0.20170715090149-96acd0a9fc46/internal/buildtarget/targets.go (about) 1 package buildtarget 2 3 import ( 4 "github.com/apex/log" 5 "github.com/goreleaser/goreleaser/config" 6 ) 7 8 // All returns all valid build targets for a given build 9 func All(build config.Build) (targets []Target) { 10 for _, target := range allBuildTargets(build) { 11 if !valid(target) { 12 log.WithField("target", target.PrettyString()). 13 Warn("skipped invalid build") 14 continue 15 } 16 if ignored(build, target) { 17 log.WithField("target", target.PrettyString()). 18 Warn("skipped ignored build") 19 continue 20 } 21 targets = append(targets, target) 22 } 23 return 24 } 25 26 func allBuildTargets(build config.Build) (targets []Target) { 27 for _, goos := range build.Goos { 28 for _, goarch := range build.Goarch { 29 if goarch == "arm" { 30 for _, goarm := range build.Goarm { 31 targets = append(targets, New(goos, goarch, goarm)) 32 } 33 continue 34 } 35 targets = append(targets, New(goos, goarch, "")) 36 } 37 } 38 return 39 } 40 41 func ignored(build config.Build, target Target) bool { 42 for _, ig := range build.Ignore { 43 if ig.Goos != "" && ig.Goos != target.OS { 44 continue 45 } 46 if ig.Goarch != "" && ig.Goarch != target.Arch { 47 continue 48 } 49 if ig.Goarm != "" && ig.Goarm != target.Arm { 50 continue 51 } 52 return true 53 } 54 return false 55 } 56 57 func valid(target Target) bool { 58 var s = target.OS + target.Arch 59 for _, a := range validTargets { 60 if a == s { 61 return true 62 } 63 } 64 return false 65 } 66 67 // list from https://golang.org/doc/install/source#environment 68 var validTargets = []string{ 69 "androidarm", 70 "darwin386", 71 "darwinamd64", 72 // "darwinarm", - requires admin rights and other ios stuff 73 // "darwinarm64", - requires admin rights and other ios stuff 74 "dragonflyamd64", 75 "freebsd386", 76 "freebsdamd64", 77 "freebsdarm", 78 "linux386", 79 "linuxamd64", 80 "linuxarm", 81 "linuxarm64", 82 "linuxppc64", 83 "linuxppc64le", 84 "linuxmips", 85 "linuxmipsle", 86 "linuxmips64", 87 "linuxmips64le", 88 "netbsd386", 89 "netbsdamd64", 90 "netbsdarm", 91 "openbsd386", 92 "openbsdamd64", 93 "openbsdarm", 94 "plan9386", 95 "plan9amd64", 96 "solarisamd64", 97 "windows386", 98 "windowsamd64", 99 }