reduce the list of cross build target

This commit is contained in:
David Bariod 2021-09-12 15:52:09 +02:00
parent accc7da667
commit 51f2599bdd
1 changed files with 48 additions and 1 deletions

View File

@ -1,3 +1,4 @@
//go:build mage
// +build mage // +build mage
package main package main
@ -7,13 +8,34 @@ import (
"fmt" "fmt"
"os" "os"
"path" "path"
"sort"
"github.com/magefile/mage/mg" "github.com/magefile/mage/mg"
"github.com/magefile/mage/sh" "github.com/magefile/mage/sh"
) )
func intersect(a, b []string) []string {
sort.Strings(a)
sort.Strings(b)
res := make([]string, 0, func() int {
if len(a) < len(b) {
return len(a)
}
return len(b)
}())
for _, v := range a {
idx := sort.SearchStrings(b, v)
if idx < len(b) && b[idx] == v {
res = append(res, v)
}
}
return res
}
// getBuildMatrix returns the build matrix from the current version of the go compiler // getBuildMatrix returns the build matrix from the current version of the go compiler
func getBuildMatrix() (map[string][]string, error) { func getFullBuildMatrix() (map[string][]string, error) {
jsonData, err := sh.Output("go", "tool", "dist", "list", "-json") jsonData, err := sh.Output("go", "tool", "dist", "list", "-json")
if err != nil { if err != nil {
return nil, err return nil, err
@ -38,6 +60,31 @@ func getBuildMatrix() (map[string][]string, error) {
return matrix, nil return matrix, nil
} }
func getBuildMatrix() (map[string][]string, error) {
minimalMatrix := map[string][]string{
"linux": []string{"amd64"},
"darwin": []string{"amd64", "arm64"},
"freebsd": []string{"amd64"},
"js": []string{"wasm"},
"solaris": []string{"amd64"},
"windows": []string{"amd64", "arm64"},
}
fullMatrix, err := getFullBuildMatrix()
if err != nil {
return nil, err
}
for os, arches := range minimalMatrix {
if fullV, ok := fullMatrix[os]; !ok {
delete(minimalMatrix, os)
} else {
minimalMatrix[os] = intersect(arches, fullV)
}
}
return minimalMatrix, nil
}
func CrossBuild() error { func CrossBuild() error {
matrix, err := getBuildMatrix() matrix, err := getBuildMatrix()
if err != nil { if err != nil {