wails/v3/Taskfile.yaml
Lea Anthony 9a363d7be5
feat(v3): add server mode for headless HTTP deployment (#4903)
* feat(v3): add server mode for headless HTTP deployment

Server mode allows Wails applications to run as pure HTTP servers
without native GUI dependencies. Enable with `-tags server` build tag.

Features:
- HTTP server with configurable host/port via ServerOptions
- WAILS_SERVER_HOST and WAILS_SERVER_PORT env var overrides
- WebSocket event broadcasting to connected browsers
- Browser clients represented as BrowserWindow (Window interface)
- Health check endpoint at /health
- Graceful shutdown with configurable timeout
- Docker support with Dockerfile.server template and tasks

Build and run:
  wails3 task build:server
  wails3 task run:server
  wails3 task build:docker
  wails3 task run:docker

Documentation at docs/guides/server-build.mdx

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(v3): add server mode for headless HTTP deployment

Server mode allows Wails applications to run as pure HTTP servers
without native GUI dependencies. Enable with `-tags server` build tag.

Features:
- HTTP server with configurable host/port via ServerOptions
- WAILS_SERVER_HOST and WAILS_SERVER_PORT env var overrides
- WebSocket event broadcasting to connected browsers
- Browser clients represented as BrowserWindow (Window interface)
- Health check endpoint at /health
- Graceful shutdown with configurable timeout
- Docker support with Dockerfile.server template and tasks

Build and run:
  wails3 task build:server
  wails3 task run:server
  wails3 task build:docker
  wails3 task run:docker

Documentation at docs/guides/server-build.mdx

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: address CodeRabbit review comments

- Fix corrupted test file with embedded terminal output
- Fix module name mismatch in gin-routing (was gin-example)
- Fix replace directive version mismatch in gin-service
- Fix placeholder module name in ios example (was changeme)
- Fix Dockerfile COPY path to work from both build contexts
- Fix bare URL in README (MD034 compliance)
- Fix comment accuracy in getScreens (returns error, not empty slice)
- Remove deprecated docker-compose version field
- Add port documentation in Taskfile template

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: address CodeRabbit review comments

- Add note about healthcheck wget not being available in distroless images
- Add !server build constraint to menu_windows.go and menu_darwin.go
- Downgrade window-visibility-test go.mod from 1.25 to 1.24 to match CI

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 14:33:44 +11:00

401 lines
12 KiB
YAML

# https://taskfile.dev
version: "3"
includes:
generator:
taskfile: ./internal/generator
dir: ./internal/generator
runtime:
taskfile: ./internal/runtime
dir: ./internal/runtime
website:
taskfile: ./website
dir: ./website
optional: true
docs:
taskfile: ../docs
dir: ../docs
optional: true
tasks:
recreate-template-dir:
dir: internal/templates
internal: true
silent: true
cmds:
- rm -rf {{.TEMPLATE_DIR}}
- mkdir -p {{.TEMPLATE_DIR}}
install:
dir: cmd/wails3
silent: true
cmds:
- go install
- echo "Installed wails CLI"
release:
summary: Release a new version of Wails. Call with `task v3:release -- <version>`
dir: tasks/release
cmds:
- go run release.go {{.CLI_ARGS}}
taskfile:upgrade:
cmds:
- go get -u github.com/go-task/task/v3
reinstall-cli:
dir: cmd/wails3
internal: true
silent: true
cmds:
- go install
- echo "Reinstalled wails CLI"
generate:events:
dir: tasks/events
cmds:
- go run generate.go
- go fmt ../../pkg/events/events.go
precommit:
cmds:
- go test ./...
- task: format
# - task: docs:update:api
test:example:darwin:
dir: 'examples/{{.DIR}}'
platforms:
- darwin
cmds:
- echo "Building example {{.DIR}} for Darwin"
- go mod tidy
- go build -o "testbuild-{{.DIR}}-darwin{{exeExt}}"
env:
CGO_LDFLAGS: -framework UniformTypeIdentifiers -mmacosx-version-min=10.13
CGO_CFLAGS: -mmacosx-version-min=10.13
test:example:windows:
dir: 'examples/{{.DIR}}'
platforms:
- windows
cmds:
- echo "Building example {{.DIR}} for Windows"
- go mod tidy
- go build -o "testbuild-{{.DIR}}-windows.exe"
env:
GOOS: windows
GOARCH: amd64
test:example:linux:
dir: 'examples/{{.DIR}}'
platforms:
- linux
cmds:
- echo "Building example {{.DIR}} for Linux"
- go mod tidy
- go build -o "testbuild-{{.DIR}}-linux"
test:example:linux:docker:arm64:
summary: Build a single example for Linux ARM64 using Docker (Ubuntu 24.04)
cmds:
- echo "Building example {{.DIR}} for Linux ARM64 using Docker"
- docker build --pull -f test/docker/Dockerfile.linux-arm64 -t wails-v3-linux-arm64 .
- docker run --rm wails-v3-linux-arm64 /build/build-linux-arm64.sh {{.DIR}}
test:example:linux:docker:x86_64:
summary: Build a single example for Linux x86_64 using Docker (Ubuntu 24.04)
cmds:
- echo "Building example {{.DIR}} for Linux x86_64 using Docker"
- docker build --pull -f test/docker/Dockerfile.linux-x86_64 -t wails-v3-linux-x86_64 .
- docker run --rm wails-v3-linux-x86_64 /build/build-linux-x86_64.sh {{.DIR}}
test:examples:linux:docker:arm64:
summary: Build all examples for Linux ARM64 using Docker (Ubuntu 24.04)
cmds:
- echo "Building Docker image for Linux ARM64 compilation..."
- docker build --pull -f test/docker/Dockerfile.linux-arm64 -t wails-v3-linux-arm64 .
- echo "Running Linux ARM64 compilation in Docker container..."
- docker run --rm wails-v3-linux-arm64
test:examples:linux:docker:x86_64:
summary: Build all examples for Linux x86_64 using Docker (Ubuntu 24.04)
cmds:
- echo "Building Docker image for Linux x86_64 compilation..."
- docker build --pull -f test/docker/Dockerfile.linux-x86_64 -t wails-v3-linux-x86_64 .
- echo "Running Linux x86_64 compilation in Docker container..."
- docker run --rm wails-v3-linux-x86_64
test:example:linux:docker:
summary: Build a single example for Linux using Docker (auto-detect architecture)
cmds:
- echo "Auto-detecting architecture for Linux Docker build..."
- |
if [ "$(uname -m)" = "arm64" ] || [ "$(uname -m)" = "aarch64" ]; then
echo "Detected ARM64, using ARM64 Docker image"
task test:example:linux:docker:arm64 DIR={{.DIR}}
else
echo "Detected x86_64, using x86_64 Docker image"
task test:example:linux:docker:x86_64 DIR={{.DIR}}
fi
test:examples:linux:docker:
summary: Build all examples for Linux using Docker (auto-detect architecture)
cmds:
- echo "Auto-detecting architecture for Linux Docker build..."
- |
if [ "$(uname -m)" = "arm64" ] || [ "$(uname -m)" = "aarch64" ]; then
echo "Detected ARM64, using ARM64 Docker image"
task test:examples:linux:docker:arm64
else
echo "Detected x86_64, using x86_64 Docker image"
task test:examples:linux:docker:x86_64
fi
test:examples:all:
summary: Builds all examples for all platforms (Mac + Windows + Linux via Docker)
vars:
EXAMPLEDIRS: |
badge
badge-custom
binding
build
cancel-async
cancel-chaining
clipboard
contextmenus
dev
dialogs
dialogs-basic
drag-n-drop
environment
events
events-bug
file-association
frameless
gin-example
gin-routing
gin-service
hide-window
ignore-mouse
keybindings
liquid-glass
menu
notifications
panic-handling
plain
raw-message
screen
services
show-macos-toolbar
single-instance
systray-basic
systray-custom
systray-menu
video
window
window-api
window-call
window-menu
wml
cmds:
- echo "Building all examples for all platforms..."
- echo "=== Building for Darwin ==="
- for: { var: EXAMPLEDIRS }
task: test:example:darwin
vars:
DIR: "{{.ITEM}}"
- echo "=== Building for Windows (cross-compile) ==="
- for: { var: EXAMPLEDIRS }
task: test:example:windows
vars:
DIR: "{{.ITEM}}"
- echo "=== Building for Linux (Docker) ==="
- task: test:examples:linux:docker
- echo "=== Testing CLI Code ==="
- task: test:cli
- echo "=== Cleaning Up Test Binaries ==="
- task: clean:test:binaries
test:cli:
summary: Test CLI-related code compilation
cmds:
- echo "Testing CLI appimage testfiles compilation..."
- cd internal/commands/appimage_testfiles && go mod tidy && go build
- echo "✅ CLI appimage testfiles compile successfully"
test:cli:all:
summary: Test all CLI components and critical test files
cmds:
- echo "Testing CLI appimage testfiles..."
- cd internal/commands/appimage_testfiles && go mod tidy && go build
- echo "Testing window visibility test..."
- cd tests/window-visibility-test && go mod tidy && go build
- echo "Testing service implementations..."
- cd pkg/services/badge && go build
- echo "✅ All CLI components compile successfully"
test:generator:
summary: Test code generator test cases compilation
cmds:
- echo "Testing generator test cases (sample)..."
- cd internal/generator/testcases/function_single && go mod tidy && go build
- cd internal/generator/testcases/complex_method && go mod tidy && go build
- cd internal/generator/testcases/struct_literal_single && go mod tidy && go build
- echo "✅ Generator test cases compile successfully"
test:templates:
summary: Test template generation for core templates
cmds:
- echo "Testing template generation (core templates)..."
- task: install
- echo "Testing lit template generation..."
- rm -rf ./test-template-lit && wails3 init -n test-template-lit -t lit
- mkdir -p ./test-template-lit/frontend/dist && touch ./test-template-lit/frontend/dist/.keep
- cd ./test-template-lit && go mod tidy && go build
- rm -rf ./test-template-lit
- echo "Testing react template generation..."
- rm -rf ./test-template-react && wails3 init -n test-template-react -t react
- mkdir -p ./test-template-react/frontend/dist && touch ./test-template-react/frontend/dist/.keep
- cd ./test-template-react && go mod tidy && go build
- rm -rf ./test-template-react
- echo "✅ Template generation tests completed successfully"
test:infrastructure:
summary: Test critical infrastructure components
cmds:
- echo "=== Testing CLI Components ==="
- task: test:cli:all
- echo "=== Testing Generator ==="
- task: test:generator
- echo "=== Testing Templates ==="
- task: test:templates
- echo "=== Testing pkg/application ==="
- cd pkg/application && go test -c -o /dev/null ./...
- echo "=== Cleaning Up Test Binaries ==="
- task: clean:test:binaries
- echo "✅ All infrastructure components test successfully"
test:examples:
summary: Builds the examples for current platform only
vars:
EXAMPLEDIRS: |
badge
badge-custom
binding
build
cancel-async
cancel-chaining
clipboard
contextmenus
dev
dialogs
dialogs-basic
drag-n-drop
environment
events
events-bug
file-association
frameless
gin-example
gin-routing
gin-service
hide-window
ignore-mouse
keybindings
liquid-glass
menu
notifications
panic-handling
plain
raw-message
screen
services
show-macos-toolbar
single-instance
systray-basic
systray-custom
systray-menu
video
window
window-api
window-call
window-menu
wml
cmds:
- echo "Testing examples compilation..."
- for: { var: EXAMPLEDIRS }
task: test:example:darwin
vars:
DIR: "{{.ITEM}}"
platforms: [darwin]
- for: { var: EXAMPLEDIRS }
task: test:example:linux
vars:
DIR: "{{.ITEM}}"
platforms: [linux]
- for: { var: EXAMPLEDIRS }
task: test:example:windows
vars:
DIR: "{{.ITEM}}"
platforms: [windows]
- echo "Testing CLI code..."
- task: test:cli
- echo "=== Cleaning Up Test Binaries ==="
- task: clean:test:binaries
clean:test:binaries:
summary: Clean up all test-generated binary files and directories (cross-platform)
cmds:
- echo "🧹 Cleaning up test binaries..."
- go run tasks/cleanup/cleanup.go
- echo "✅ Test binaries cleaned up"
test:all:
summary: Run all tests including examples, infrastructure, and Go unit tests
cmds:
- echo "=== Running Go Unit Tests ==="
- go test ./...
- echo "=== Testing Examples (Current Platform) ==="
- task: test:examples
- echo "=== Testing Infrastructure Components ==="
- task: test:infrastructure
- echo "=== Cleaning Up Test Binaries ==="
- task: clean:test:binaries
- echo "✅ All tests completed successfully"
build:server:
summary: Build an application in server mode (no GUI, HTTP server only)
desc: |
Builds a Wails application in server mode using the -tags server build tag.
Server mode enables running the application as a pure HTTP server without
native GUI dependencies.
Usage: task build:server DIR=examples/server
dir: '{{.DIR | default "."}}'
cmds:
- echo "Building {{.DIR | default `.`}} in server mode..."
- go build -tags server -o '{{.OUTPUT | default "server-app"}}' .
- echo "Server mode build complete"
test:example:server:
summary: Build and test the server mode example
dir: 'examples/server'
cmds:
- echo "Building server example with -tags server..."
- go mod tidy
- go build -tags server -o "testbuild-server"
- echo "✅ Server example builds successfully"
- rm -f testbuild-server
test:server:
summary: Run server mode unit tests
dir: 'pkg/application'
cmds:
- echo "Running server mode tests..."
- go test -tags server -v -run TestServerMode .
- echo "✅ Server mode tests passed"