v3/TESTING.md
This document describes the comprehensive cross-platform testing system for Wails v3 examples, supporting Mac, Linux, and Windows compilation.
The testing system ensures all Wails v3 examples build successfully across all supported platforms:
The testing infrastructure is organized in a dedicated test directory:
v3/
āāā test/
ā āāā docker/
ā āāā Dockerfile.linux-arm64 # ARM64 native compilation
ā āāā Dockerfile.linux-x86_64 # x86_64 native compilation
āāā Taskfile.yaml # Build task definitions
āāā TESTING.md # This documentation
Benefits of the organized structure:
# Build all examples for ALL platforms (macOS + Windows + Linux)
task test:examples:all
Total: 129 builds (43 examples Ć 3 platforms) + CLI code testing
# Current platform only (all 43 examples + CLI code)
task test:examples
# All examples for specific Linux architectures
task test:examples:linux:docker # Auto-detect architecture
task test:examples:linux:docker:arm64 # ARM64 native
task test:examples:linux:docker:x86_64 # x86_64 native
# CLI code testing only
task test:cli
# macOS/Darwin single example
task test:example:darwin DIR=badge
# Windows cross-compilation single example
task test:example:windows DIR=badge
# Linux native builds (on Linux systems)
task test:example:linux DIR=badge
# Linux Docker builds (multi-architecture)
task test:example:linux:docker DIR=badge # Auto-detect architecture
task test:example:linux:docker:arm64 DIR=badge # ARM64 native
task test:example:linux:docker:x86_64 DIR=badge # x86_64 native
All builds generate platform-specific binaries with clear naming:
testbuild-{example}-darwintestbuild-{example}-windows.exetestbuild-{example}-linuxtestbuild-{example}-linux-arm64 (Docker)testbuild-{example}-linux-x86_64 (Docker)Example outputs:
examples/badge/testbuild-badge-darwin
examples/badge/testbuild-badge-windows.exe
examples/badge/testbuild-badge-linux-arm64
examples/badge/testbuild-badge-linux-x86_64
The system builds all 43 Wails v3 examples:
Recently Added (v3.0.0-alpha):
Environment Variables:
CGO_LDFLAGS="-framework UniformTypeIdentifiers -mmacosx-version-min=10.13"
CGO_CFLAGS="-mmacosx-version-min=10.13"
Environment Variables:
GOOS=windows
GOARCH=amd64
Uses Ubuntu 24.04 base image with full GTK development environment:
Current Status: Complete multi-architecture Docker compilation system
Architecture Support:
Dockerfile.linux-arm64Dockerfile.linux-x86_64 with --platform=linux/amd64Core Dependencies:
build-essential - GCC compiler toolchain (architecture-specific)pkg-config - Package configuration toollibgtk-3-dev - GTK+ 3.x development fileslibwebkit2gtk-4.1-dev - WebKit2GTK development filesgit - Version control (for go mod operations)ca-certificates - HTTPS supportDocker Images:
wails-v3-linux-arm64 - Ubuntu 24.04 ARM64 native compilation (built from test/docker/Dockerfile.linux-arm64)wails-v3-linux-x86_64 - Ubuntu 24.04 x86_64 native compilation (built from test/docker/Dockerfile.linux-x86_64)wails-v3-linux-fixed - Legacy unified image (deprecated)test/docker/Dockerfile.linux-arm64)FROM ubuntu:24.04
# ARM64 native compilation environment
# Go 1.24.0 ARM64 binary (go1.24.0.linux-arm64.tar.gz)
# Native GCC toolchain for ARM64
# All GTK/WebKit dependencies for ARM64
# Build script: /build/build-linux-arm64.sh
# Output: testbuild-{example}-linux-arm64
test/docker/Dockerfile.linux-x86_64)FROM --platform=linux/amd64 ubuntu:24.04
# x86_64 native compilation environment
# Go 1.24.0 x86_64 binary (go1.24.0.linux-amd64.tar.gz)
# Native GCC toolchain for x86_64
# All GTK/WebKit dependencies for x86_64
# Build script: /build/build-linux-x86_64.sh
# Output: testbuild-{example}-linux-x86_64
# ARM64 builds
task test:example:linux:docker:arm64 DIR=badge
task test:examples:linux:docker:arm64
# x86_64 builds
task test:example:linux:docker:x86_64 DIR=badge
task test:examples:linux:docker:x86_64
# Single example (auto-detects host architecture)
task test:example:linux:docker DIR=badge
# All examples (auto-detects host architecture)
task test:examples:linux:docker
replace github.com/wailsapp/wails/v3 => ../..frontend/dist directories//go:embed all:frontend/dist to //go:embed all:frontendapp.CurrentWindow() ā app.Windows.Current()app.Windows.NewWithOptions()# Test the badge example on all platforms
task test:example:darwin DIR=badge # macOS native
task test:example:windows DIR=badge # Windows cross-compile
task test:example:linux:docker DIR=badge # Linux Docker (auto-detect arch)
# Test everything - all 43 examples, all platforms
task test:examples:all
# This runs:
# 1. All Darwin builds (43 examples)
# 2. All Windows cross-compilation (43 examples)
# 3. All Linux Docker builds (43 examples, auto-architecture)
# Platform-specific all examples
task test:examples # Current platform (43 examples)
task test:examples:linux:docker:arm64 # ARM64 builds (43 examples)
task test:examples:linux:docker:x86_64 # x86_64 builds (43 examples)
# For CI/CD pipelines
task test:examples:all # Complete cross-platform (129 builds)
task test:examples # Current platform only (43 builds)
go mod tidy in each example directorygo build -o testbuild-{example}-darwinGOOS=windows GOARCH=amd64 environmentgo mod tidy in each example directorygo build -o testbuild-{example}-windows.exego mod tidy && go build with native toolchain-linux-arm64 or -linux-x86_64)Error: replacement directory ../wails/v3 does not exist
Solution: All examples now use standardized replace github.com/wailsapp/wails/v3 => ../..
Error: pattern frontend/dist: no matching files found
Solution: Updated to //go:embed all:frontend for examples without dist directories
Error: app.CurrentWindow undefined
Solution: Updated to use new manager pattern app.Windows.Current()
Some examples may show compatibility warnings (e.g., notifications using macOS 10.14+ APIs with 10.13 target). These are non-blocking warnings that can be addressed separately.
# The task system automatically runs builds in parallel where possible
task v3:test:examples:all # Optimized for maximum throughput
# Test specific examples to debug issues
task v3:test:example:darwin DIR=badge
task v3:test:example:windows DIR=contextmenus
Parallel Builds:
# Build multiple examples simultaneously
task v3:test:example:darwin DIR=badge &
task v3:test:example:darwin DIR=binding &
task v3:test:example:darwin DIR=build &
wait
Docker Image Caching:
# Pre-build Docker images
docker build -f Dockerfile.linux -t wails-v3-linux-builder .
docker build -f Dockerfile.linux-simple -t wails-v3-linux-simple .
All build artifacts are automatically ignored via .gitignore:
/v3/examples/*/testbuild-*
# Remove all test build artifacts
find v3/examples -name "testbuild-*" -delete
For issues with cross-platform builds: