1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-03-19 20:57:53 +02:00
Carlos Alexandro Becker d583861e06
feat(build): add GO386, GOMIPS64, GORISCV64, and GOPPC64 support (#5186)
continuing the work of #5153

closes #5153

---------

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Co-authored-by: 世界 <i@sekai.icu>
2024-10-14 09:40:10 -03:00

291 lines
6.0 KiB
Go

package buildtarget
import (
"fmt"
"testing"
"github.com/goreleaser/goreleaser/v2/pkg/config"
"github.com/stretchr/testify/require"
)
func TestAllBuildTargets(t *testing.T) {
build := config.Build{
GoBinary: "go",
Goos: []string{
"linux",
"darwin",
"freebsd",
"openbsd",
"windows",
"js",
"ios",
"wasip1",
},
Goarch: []string{
"386",
"amd64",
"arm",
"arm64",
"wasm",
"mips",
"mips64",
"mipsle",
"mips64le",
"riscv64",
"loong64",
},
Goamd64: []string{
"v1",
"v2",
"v3",
"v4",
},
Go386: []string{
"sse2",
"softfloat",
},
Goarm: []string{
"5",
"6",
"7",
},
Goarm64: []string{
"v8.0",
"v9.0",
},
Gomips: []string{
"hardfloat",
"softfloat",
},
Goppc64: []string{
"power8",
"power9",
"power10",
},
Goriscv64: []string{
"rva20u64",
"rva22u64",
},
Ignore: []config.IgnoredBuild{
{
Goos: "linux",
Goarch: "arm",
Goarm: "7",
}, {
Goos: "openbsd",
Goarch: "arm",
}, {
Goarch: "amd64",
Goamd64: "v1",
}, {
Goarch: "386",
Go386: "sse2",
}, {
Goarch: "arm64",
Goarm64: "v8.0",
}, {
Goarch: "mips",
Gomips: "hardfloat",
}, {
Goarch: "mipsle",
Gomips: "hardfloat",
}, {
Goarch: "mips64",
Gomips: "hardfloat",
}, {
Goarch: "mips64le",
Gomips: "hardfloat",
}, {
Goarch: "ppc64",
Goppc64: "power8",
}, {
Goarch: "ppc64le",
Goppc64: "power8",
}, {
Goarch: "riscv64",
Goriscv64: "rva20u64",
},
},
}
t.Run("go 1.18", func(t *testing.T) {
result, err := List(build)
require.NoError(t, err)
require.Equal(t, []string{
"linux_386_softfloat",
"linux_amd64_v2",
"linux_amd64_v3",
"linux_amd64_v4",
"linux_arm_5",
"linux_arm_6",
"linux_arm64_v9.0",
"linux_mips_softfloat",
"linux_mips64_softfloat",
"linux_mipsle_softfloat",
"linux_mips64le_softfloat",
"linux_riscv64_rva22u64",
"linux_loong64",
"darwin_amd64_v2",
"darwin_amd64_v3",
"darwin_amd64_v4",
"darwin_arm64_v9.0",
"freebsd_386_softfloat",
"freebsd_amd64_v2",
"freebsd_amd64_v3",
"freebsd_amd64_v4",
"freebsd_arm_5",
"freebsd_arm_6",
"freebsd_arm_7",
"freebsd_arm64_v9.0",
"openbsd_386_softfloat",
"openbsd_amd64_v2",
"openbsd_amd64_v3",
"openbsd_amd64_v4",
"openbsd_arm64_v9.0",
"windows_386_softfloat",
"windows_amd64_v2",
"windows_amd64_v3",
"windows_amd64_v4",
"windows_arm_5",
"windows_arm_6",
"windows_arm_7",
"windows_arm64_v9.0",
"js_wasm",
"ios_arm64_v9.0",
"wasip1_wasm",
}, result)
})
t.Run("invalid goos", func(t *testing.T) {
_, err := List(config.Build{
Goos: []string{"invalid"},
Goarch: []string{"amd64"},
Goamd64: []string{"v2"},
})
require.EqualError(t, err, "invalid goos: invalid")
})
t.Run("invalid goarch", func(t *testing.T) {
_, err := List(config.Build{
Goos: []string{"linux"},
Goarch: []string{"invalid"},
})
require.EqualError(t, err, "invalid goarch: invalid")
})
t.Run("invalid goarm", func(t *testing.T) {
_, err := List(config.Build{
Goos: []string{"linux"},
Goarch: []string{"arm"},
Goarm: []string{"invalid"},
})
require.EqualError(t, err, "invalid goarm: invalid")
})
t.Run("invalid gomips", func(t *testing.T) {
_, err := List(config.Build{
Goos: []string{"linux"},
Goarch: []string{"mips"},
Gomips: []string{"invalid"},
})
require.EqualError(t, err, "invalid gomips: invalid")
})
t.Run("invalid goamd64", func(t *testing.T) {
_, err := List(config.Build{
Goos: []string{"linux"},
Goarch: []string{"amd64"},
Goamd64: []string{"invalid"},
})
require.EqualError(t, err, "invalid goamd64: invalid")
})
}
func TestGoosGoarchCombos(t *testing.T) {
platforms := []struct {
os string
arch string
valid bool
}{
// valid targets:
{"aix", "ppc64", true},
{"android", "386", true},
{"android", "amd64", true},
{"android", "arm", true},
{"android", "arm64", true},
{"darwin", "amd64", true},
{"darwin", "arm64", true},
{"dragonfly", "amd64", true},
{"freebsd", "386", true},
{"freebsd", "amd64", true},
{"freebsd", "arm", true},
{"freebsd", "arm64", true},
{"illumos", "amd64", true},
{"ios", "arm64", true},
{"linux", "386", true},
{"linux", "amd64", true},
{"linux", "arm", true},
{"linux", "arm64", true},
{"linux", "mips", true},
{"linux", "mipsle", true},
{"linux", "mips64", true},
{"linux", "mips64le", true},
{"linux", "ppc64", true},
{"linux", "ppc64le", true},
{"linux", "s390x", true},
{"linux", "riscv64", true},
{"linux", "loong64", true},
{"netbsd", "386", true},
{"netbsd", "amd64", true},
{"netbsd", "arm", true},
{"netbsd", "arm64", true},
{"openbsd", "386", true},
{"openbsd", "amd64", true},
{"openbsd", "arm", true},
{"openbsd", "arm64", true},
{"plan9", "386", true},
{"plan9", "amd64", true},
{"plan9", "arm", true},
{"solaris", "amd64", true},
{"windows", "386", true},
{"windows", "amd64", true},
{"windows", "arm", true},
{"windows", "arm64", true},
{"js", "wasm", true},
// invalid targets
{"darwin", "386", false},
{"darwin", "arm", false},
{"windows", "riscv64", false},
}
for _, p := range platforms {
t.Run(fmt.Sprintf("%v %v valid=%v", p.os, p.arch, p.valid), func(t *testing.T) {
require.Equal(t, p.valid, valid(target{os: p.os, arch: p.arch}))
})
}
}
func TestList(t *testing.T) {
t.Run("success", func(t *testing.T) {
targets, err := List(config.Build{
Goos: []string{"linux"},
Goarch: []string{"amd64"},
Goamd64: []string{"v2"},
GoBinary: "go",
})
require.NoError(t, err)
require.Equal(t, []string{"linux_amd64_v2"}, targets)
})
t.Run("success with dir", func(t *testing.T) {
targets, err := List(config.Build{
Goos: []string{"linux"},
Goarch: []string{"amd64"},
Goamd64: []string{"v2"},
GoBinary: "go",
Dir: "./testdata",
})
require.NoError(t, err)
require.Equal(t, []string{"linux_amd64_v2"}, targets)
})
}