go-build/pkg/build/xcode_cloud_test.go
Snider 293dfd6e66 feat(build): ENV-first Deno + discovery metadata (os/arch/github ref) + Xcode Cloud
- env.go (new): DENO_ENABLE and DENO_BUILD environment variables activate
  Deno builds even when repo only has package.json or bare frontend/ dir
- wails.go + node.go + apple.go + release.yml + xcode_cloud.go: honor the
  ENV flags across builder + workflow + Xcode Cloud script generation
- discovery.go: record host os/arch + GitHub ref metadata (ref, branch, tag,
  is_tag, sha, short_sha, repo, owner)
- api/provider.go: /discover exposes the new metadata
- Regression coverage across discovery/builders/apple/workflow/xcode_cloud/api

Verified: go test ./... passes

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-14 21:35:50 +01:00

98 lines
3.1 KiB
Go

package build
import (
"testing"
"dappco.re/go/core/build/internal/ax"
"dappco.re/go/core/io"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestXcodeCloud_HasXcodeCloudConfig_Good(t *testing.T) {
assert.False(t, HasXcodeCloudConfig(nil))
assert.False(t, HasXcodeCloudConfig(&BuildConfig{}))
assert.True(t, HasXcodeCloudConfig(&BuildConfig{
Apple: AppleConfig{
XcodeCloud: XcodeCloudConfig{
Workflow: "CoreGUI Release",
},
},
}))
assert.True(t, HasXcodeCloudConfig(&BuildConfig{
Apple: AppleConfig{
XcodeCloud: XcodeCloudConfig{
Triggers: []XcodeCloudTrigger{{Branch: "main", Action: "testflight"}},
},
},
}))
}
func TestXcodeCloud_GenerateXcodeCloudScripts_Good(t *testing.T) {
scripts := GenerateXcodeCloudScripts("/tmp/project", &BuildConfig{
Project: Project{
Name: "Core",
Binary: "Core",
},
Apple: AppleConfig{
BundleID: "ai.lthn.core",
TeamID: "ABC123DEF4",
Arch: "universal",
Notarise: boolPtr(false),
DMG: boolPtr(true),
AppStore: boolPtr(true),
},
})
require.Len(t, scripts, 3)
assert.Contains(t, scripts[XcodeCloudPostCloneScriptName], "go install github.com/wailsapp/wails/v3/cmd/wails3@latest")
assert.Contains(t, scripts[XcodeCloudPostCloneScriptName], "find . -maxdepth 3 -name package.json")
assert.Contains(t, scripts[XcodeCloudPostCloneScriptName], "deno_requested()")
assert.Contains(t, scripts[XcodeCloudPostCloneScriptName], "DENO_ENABLE")
assert.Contains(t, scripts[XcodeCloudPostCloneScriptName], "DENO_BUILD")
assert.Contains(t, scripts[XcodeCloudPreXcodebuildScriptName], `core build apple --arch "universal" --config ".core/build.yaml" --notarise=false --dmg --appstore --bundle-id "ai.lthn.core" --team-id "ABC123DEF4"`)
assert.Contains(t, scripts[XcodeCloudPostXcodebuildScriptName], `BUNDLE_PATH="dist/apple/Core.app"`)
assert.Contains(t, scripts[XcodeCloudPostXcodebuildScriptName], "codesign --verify --deep --strict")
}
func TestXcodeCloud_WriteXcodeCloudScripts_Good(t *testing.T) {
projectDir := t.TempDir()
paths, err := WriteXcodeCloudScripts(io.Local, projectDir, &BuildConfig{
Project: Project{
Name: "Core",
Binary: "Core",
},
Apple: AppleConfig{
XcodeCloud: XcodeCloudConfig{
Workflow: "CoreGUI Release",
},
},
})
require.NoError(t, err)
assert.Equal(t, []string{
ax.Join(projectDir, XcodeCloudScriptsDir, XcodeCloudPostCloneScriptName),
ax.Join(projectDir, XcodeCloudScriptsDir, XcodeCloudPreXcodebuildScriptName),
ax.Join(projectDir, XcodeCloudScriptsDir, XcodeCloudPostXcodebuildScriptName),
}, paths)
for _, path := range paths {
content, err := io.Local.Read(path)
require.NoError(t, err)
assert.NotEmpty(t, content)
info, err := io.Local.Stat(path)
require.NoError(t, err)
assert.Equal(t, 0o755, int(info.Mode().Perm()))
}
}
func TestXcodeCloud_WriteXcodeCloudScripts_Bad(t *testing.T) {
_, err := WriteXcodeCloudScripts(nil, t.TempDir(), DefaultConfig())
require.Error(t, err)
assert.Contains(t, err.Error(), "filesystem medium is required")
}
func boolPtr(value bool) *bool {
return &value
}