Skip to content

Commit d7099c4

Browse files
Allow using arm64v8 binaries in darwin for postgres 14.2 and up
1 parent b03c7f6 commit d7099c4

File tree

2 files changed

+44
-22
lines changed

2 files changed

+44
-22
lines changed

version_strategy.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package embeddedpostgres
22

33
import (
4+
"fmt"
45
"os"
56
"os/exec"
67
"strings"
@@ -36,9 +37,16 @@ func defaultVersionStrategy(config Config, goos, arch string, linuxMachineName f
3637
}
3738
}
3839

39-
// at this point, postgres is not available for macos on arm
40+
// postgres below version 14.2 is not available for macos on arm
4041
if goos == "darwin" && arch == "arm64" {
41-
arch = "amd64"
42+
var majorVer, minorVer int
43+
fmt.Sscanf(string(config.version), "%d.%d", &majorVer, &minorVer)
44+
45+
if majorVer < 14 || (majorVer == 14 && minorVer < 2) {
46+
arch = "amd64"
47+
} else {
48+
arch += "v8"
49+
}
4250
}
4351

4452
return goos, arch, config.version

version_strategy_test.go

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -54,28 +54,42 @@ func Test_DefaultVersionStrategy_AllGolangDistributions(t *testing.T) {
5454
"windows/arm": {"windows", "arm"},
5555
}
5656

57+
versionDifferences := map[PostgresVersion]map[string][]string{
58+
PostgresVersion("14.0.0"): {},
59+
PostgresVersion("14.1.0"): {},
60+
PostgresVersion("14.2.0"): {"darwin/arm64": {"darwin", "arm64v8"}},
61+
V14: {"darwin/arm64": {"darwin", "arm64v8"}},
62+
}
5763
defaultConfig := DefaultConfig()
5864

59-
for dist, expected := range allGolangDistributions {
60-
dist := dist
61-
expected := expected
62-
63-
t.Run(fmt.Sprintf("DefaultVersionStrategy_%s", dist), func(t *testing.T) {
64-
osArch := strings.Split(dist, "/")
65-
66-
operatingSystem, architecture, postgresVersion := defaultVersionStrategy(
67-
defaultConfig,
68-
osArch[0],
69-
osArch[1],
70-
linuxMachineName,
71-
func() bool {
72-
return false
73-
})()
74-
75-
assert.Equal(t, expected[0], operatingSystem)
76-
assert.Equal(t, expected[1], architecture)
77-
assert.Equal(t, V14, postgresVersion)
78-
})
65+
for version, differences := range versionDifferences {
66+
defaultConfig.version = version
67+
68+
for dist, expected := range allGolangDistributions {
69+
dist := dist
70+
expected := expected
71+
72+
if override, ok := differences[dist]; ok {
73+
expected = override
74+
}
75+
76+
t.Run(fmt.Sprintf("DefaultVersionStrategy_%s", dist), func(t *testing.T) {
77+
osArch := strings.Split(dist, "/")
78+
79+
operatingSystem, architecture, postgresVersion := defaultVersionStrategy(
80+
defaultConfig,
81+
osArch[0],
82+
osArch[1],
83+
linuxMachineName,
84+
func() bool {
85+
return false
86+
})()
87+
88+
assert.Equal(t, expected[0], operatingSystem)
89+
assert.Equal(t, expected[1], architecture)
90+
assert.Equal(t, version, postgresVersion)
91+
})
92+
}
7993
}
8094
}
8195

0 commit comments

Comments
 (0)