wails/v3/internal/commands/task_wrapper.go
Lea Anthony 3594b77666 feat(v3): add cross-platform build system and signing support
Add Docker-based cross-compilation for building Wails apps on any platform:
- Linux builds from macOS/Windows using Docker with Zig
- Windows builds with CGO from Linux/macOS using Docker
- macOS builds from Linux/Windows using Docker with osxcross

Add wails3 tool lipo command using konoui/lipo library for creating
macOS universal binaries on any platform.

Add code signing infrastructure:
- wails3 sign wrapper command (like build/package)
- wails3 tool sign low-level command for Taskfiles
- wails3 setup signing interactive wizard
- wails3 setup entitlements for macOS entitlements
- Keychain integration for secure credential storage

Update all platform Taskfiles with signing tasks:
- darwin:sign, darwin:sign:notarize
- windows:sign, windows:sign:installer
- linux:sign:deb, linux:sign:rpm, linux:sign:packages

Reorganize documentation:
- Move building/signing guides to guides/build/
- Add platform-specific packaging guides (macos, linux, windows)
- Add cross-platform build documentation
- Add comprehensive signing guide with CI/CD examples
- Add auto-updates guide and updater reference
- Add distribution tutorial

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 13:53:37 +11:00

73 lines
1.7 KiB
Go

package commands
import (
"os"
"runtime"
"strings"
"github.com/wailsapp/wails/v3/internal/flags"
)
// runTaskFunc is a variable to allow mocking in tests
var runTaskFunc = RunTask
// validPlatforms for GOOS
var validPlatforms = map[string]bool{
"windows": true,
"darwin": true,
"linux": true,
}
func Build(_ *flags.Build, otherArgs []string) error {
return wrapTask("build", otherArgs)
}
func Package(_ *flags.Package, otherArgs []string) error {
return wrapTask("package", otherArgs)
}
func SignWrapper(_ *flags.SignWrapper, otherArgs []string) error {
return wrapTask("sign", otherArgs)
}
func wrapTask(action string, otherArgs []string) error {
// Check environment first, then allow args to override
goos := os.Getenv("GOOS")
if goos == "" {
goos = runtime.GOOS
}
goarch := os.Getenv("GOARCH")
if goarch == "" {
goarch = runtime.GOARCH
}
var remainingArgs []string
// Args override environment
for _, arg := range otherArgs {
switch {
case strings.HasPrefix(arg, "GOOS="):
goos = strings.TrimPrefix(arg, "GOOS=")
case strings.HasPrefix(arg, "GOARCH="):
goarch = strings.TrimPrefix(arg, "GOARCH=")
default:
remainingArgs = append(remainingArgs, arg)
}
}
// Determine task name based on GOOS
taskName := action
if validPlatforms[goos] {
taskName = goos + ":" + action
}
// Pass ARCH to task (always set, defaults to current architecture)
remainingArgs = append(remainingArgs, "ARCH="+goarch)
// Rebuild os.Args to include the command and all additional arguments
newArgs := []string{"wails3", "task", taskName}
newArgs = append(newArgs, remainingArgs...)
os.Args = newArgs
// Pass the task name via options and remainingArgs as CLI variables
return runTaskFunc(&RunTaskOptions{Name: taskName}, remainingArgs)
}