mirror of
https://github.com/wailsapp/wails.git
synced 2026-03-14 14:45:49 +01:00
* fix(linux): remove unused C Screen typedef that collides with X11 Xlib.h The GTK4 backend includes <gdk/x11/gdkx.h> for X11 window positioning, which pulls in <X11/Xlib.h>. Xlib defines its own `Screen` typedef, conflicting with the identically-named struct in linux_cgo_gtk4.h. The C Screen struct was unused - the Go code constructs Go Screen structs directly from GDK monitor data, never referencing C.Screen. Fixes #4957 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: run GTK4 build and tests on all v3-alpha PRs The GTK4 CI steps were gated on github.head_ref == 'feature/webkit-gtk6-support', meaning no other branch ever ran GTK4 compilation checks. This allowed the Screen typedef collision to slip through undetected. Now that GTK4 support has been merged, run GTK4 dependency installation, example builds, and test suite on every PR targeting v3-alpha. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: add GTK4 Screen typedef fix to unreleased changelog Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix changelog * fix changelog * fix(ci): pass BUILD_TAGS through to go build in test:example:linux The GTK4 CI step ran BUILD_TAGS=gtk4 task test:examples but the Taskfile task ignored the env var, always building with no -tags flag. Use shell parameter expansion so BUILD_TAGS flows through to go build. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
315 lines
No EOL
9.4 KiB
YAML
315 lines
No EOL
9.4 KiB
YAML
name: Build + Test v3
|
|
|
|
on:
|
|
pull_request:
|
|
types: [opened, synchronize, reopened, ready_for_review]
|
|
branches:
|
|
- v3-alpha
|
|
pull_request_review:
|
|
types: [submitted]
|
|
branches:
|
|
- v3-alpha
|
|
|
|
jobs:
|
|
check_approval:
|
|
name: Check PR Approval
|
|
runs-on: ubuntu-latest
|
|
if: github.base_ref == 'v3-alpha'
|
|
outputs:
|
|
approved: ${{ steps.check.outputs.approved }}
|
|
steps:
|
|
- name: Check if PR is approved
|
|
id: check
|
|
run: |
|
|
if [[ "${{ github.event.review.state }}" == "approved" || "${{ github.event.pull_request.approved }}" == "true" ]]; then
|
|
echo "approved=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "approved=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
test_js:
|
|
name: Run JS Tests
|
|
needs: check_approval
|
|
runs-on: ubuntu-latest
|
|
if: github.base_ref == 'v3-alpha'
|
|
strategy:
|
|
matrix:
|
|
node-version: [20.x]
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Use Node.js ${{ matrix.node-version }}
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: ${{ matrix.node-version }}
|
|
|
|
- name: Install Task
|
|
uses: arduino/setup-task@v2
|
|
with:
|
|
version: 3.x
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Install dependencies
|
|
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
|
run: |
|
|
npm ci
|
|
npx --yes esbuild@latest --version
|
|
|
|
- name: Clean build artifacts
|
|
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
|
run: npm run clean
|
|
|
|
- name: Type-check runtime
|
|
working-directory: v3
|
|
run: task runtime:check
|
|
|
|
- name: Test runtime
|
|
working-directory: v3
|
|
run: task runtime:test
|
|
|
|
- name: Check that the bundled runtime builds
|
|
working-directory: v3
|
|
run: task runtime:build
|
|
|
|
- name: Check that the npm package builds
|
|
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
|
run: npm run build
|
|
|
|
- name: Pack runtime for template tests
|
|
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
|
run: npm pack
|
|
|
|
- name: Store runtime build artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: runtime-build-artifacts
|
|
path: |
|
|
v3/internal/runtime/desktop/@wailsio/runtime/dist/
|
|
v3/internal/runtime/desktop/@wailsio/runtime/types/
|
|
v3/internal/runtime/desktop/@wailsio/runtime/tsconfig.tsbuildinfo
|
|
|
|
- name: Store runtime package
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: runtime-package
|
|
path: v3/internal/runtime/desktop/@wailsio/runtime/*.tgz
|
|
|
|
test_go:
|
|
name: Run Go Tests v3
|
|
needs: [check_approval, test_js]
|
|
runs-on: ${{ matrix.os }}
|
|
if: github.base_ref == 'v3-alpha'
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [windows-latest, ubuntu-latest, macos-latest]
|
|
go-version: [1.24]
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install linux dependencies (GTK3)
|
|
uses: awalsh128/cache-apt-pkgs-action@latest
|
|
if: matrix.os == 'ubuntu-latest'
|
|
with:
|
|
packages: libgtk-3-dev libwebkit2gtk-4.1-dev libwayland-dev build-essential pkg-config xvfb x11-xserver-utils at-spi2-core xdg-desktop-portal-gtk
|
|
version: 1.0
|
|
|
|
- name: Install linux dependencies (GTK4)
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y libgtk-4-dev libwebkitgtk-6.0-dev
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: ${{ matrix.go-version }}
|
|
cache: true
|
|
cache-dependency-path: "v3/go.sum"
|
|
|
|
- name: Install Task
|
|
uses: arduino/setup-task@v2
|
|
with:
|
|
version: 3.x
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Retrieve runtime build artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: runtime-build-artifacts
|
|
path: v3/internal/runtime/desktop/@wailsio/runtime/
|
|
|
|
- name: Build Examples (GTK3 default)
|
|
working-directory: v3
|
|
run: |
|
|
echo "Starting example compilation tests (GTK3)..."
|
|
task test:examples
|
|
echo "Example compilation tests (GTK3) completed successfully"
|
|
|
|
- name: Build Examples (GTK4)
|
|
if: matrix.os == 'ubuntu-latest'
|
|
working-directory: v3
|
|
run: |
|
|
echo "Starting example compilation tests (GTK4)..."
|
|
BUILD_TAGS=gtk4 task test:examples
|
|
echo "Example compilation tests (GTK4) completed successfully"
|
|
|
|
- name: Run tests (mac)
|
|
if: matrix.os == 'macos-latest'
|
|
env:
|
|
CGO_LDFLAGS: -framework UniformTypeIdentifiers -mmacosx-version-min=10.13
|
|
working-directory: v3
|
|
run: go test -v ./...
|
|
|
|
- name: Run tests (windows)
|
|
if: matrix.os == 'windows-latest'
|
|
working-directory: v3
|
|
run: go test -v ./...
|
|
|
|
- name: Run tests (ubuntu) - GTK3 default
|
|
if: matrix.os == 'ubuntu-latest'
|
|
working-directory: v3
|
|
run: >
|
|
xvfb-run --auto-servernum
|
|
sh -c '
|
|
dbus-update-activation-environment --systemd --all &&
|
|
go test -v ./...
|
|
'
|
|
|
|
- name: Run tests (ubuntu) - GTK4
|
|
if: matrix.os == 'ubuntu-latest'
|
|
working-directory: v3
|
|
# Skip service tests that hang in CI due to GTK4 display requirements
|
|
run: >
|
|
xvfb-run --auto-servernum
|
|
sh -c '
|
|
dbus-update-activation-environment --systemd --all &&
|
|
go test -tags gtk4 -v -skip "TestService" ./...
|
|
'
|
|
|
|
- name: Typecheck binding generator output
|
|
working-directory: v3
|
|
run: task generator:test:check
|
|
|
|
cleanup:
|
|
name: Cleanup build artifacts
|
|
if: always()
|
|
needs: [test_js, test_go, test_templates]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: geekyeggo/delete-artifact@v5
|
|
with:
|
|
name: |
|
|
runtime-build-artifacts
|
|
runtime-package
|
|
failOnError: false
|
|
|
|
test_templates:
|
|
name: Test Templates
|
|
needs: [test_js, test_go]
|
|
runs-on: ${{ matrix.os }}
|
|
if: github.base_ref == 'v3-alpha'
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
template:
|
|
- svelte
|
|
- svelte-ts
|
|
- vue
|
|
- vue-ts
|
|
- react
|
|
- react-ts
|
|
- preact
|
|
- preact-ts
|
|
- lit
|
|
- lit-ts
|
|
- vanilla
|
|
- vanilla-ts
|
|
go-version: [1.24]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install linux dependencies (GTK3)
|
|
uses: awalsh128/cache-apt-pkgs-action@latest
|
|
if: matrix.os == 'ubuntu-latest'
|
|
with:
|
|
packages: libgtk-3-dev libwebkit2gtk-4.1-dev libwayland-dev build-essential pkg-config
|
|
version: 1.0
|
|
|
|
- name: Install linux dependencies (GTK4)
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y libgtk-4-dev libwebkitgtk-6.0-dev
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: ${{ matrix.go-version }}
|
|
cache: true
|
|
cache-dependency-path: "v3/go.sum"
|
|
|
|
- name: Install Task
|
|
uses: arduino/setup-task@v2
|
|
with:
|
|
version: 3.x
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Build Wails3 CLI
|
|
working-directory: v3
|
|
run: |
|
|
task install
|
|
wails3 doctor
|
|
|
|
- name: Download runtime package
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: runtime-package
|
|
path: wails-runtime-temp
|
|
|
|
- name: Generate template '${{ matrix.template }}' (GTK3 default)
|
|
shell: bash
|
|
run: |
|
|
# Get absolute path - use pwd -W on Windows for native paths, pwd elsewhere
|
|
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
|
RUNTIME_TGZ="$(cd wails-runtime-temp && pwd -W)/$(ls wails-runtime-temp/*.tgz | xargs basename)"
|
|
else
|
|
RUNTIME_TGZ="$(cd wails-runtime-temp && pwd)/$(ls wails-runtime-temp/*.tgz | xargs basename)"
|
|
fi
|
|
mkdir -p ./test-${{ matrix.template }}
|
|
cd ./test-${{ matrix.template }}
|
|
wails3 init -n ${{ matrix.template }} -t ${{ matrix.template }}
|
|
cd ${{ matrix.template }}/frontend
|
|
# Replace @wailsio/runtime version with local tarball
|
|
npm pkg set dependencies.@wailsio/runtime="file://$RUNTIME_TGZ"
|
|
cd ..
|
|
wails3 build
|
|
|
|
# GTK4 template builds are covered by the Go example compilation tests above.
|
|
|
|
build_results:
|
|
if: ${{ always() }}
|
|
runs-on: ubuntu-latest
|
|
name: v3 Build Results
|
|
needs: [test_go, test_js, test_templates]
|
|
steps:
|
|
- run: |
|
|
go_result="${{ needs.test_go.result }}"
|
|
js_result="${{ needs.test_js.result }}"
|
|
templates_result="${{ needs.test_templates.result }}"
|
|
|
|
if [[ $go_result == "success" || $go_result == "skipped" ]] && \
|
|
[[ $js_result == "success" || $js_result == "skipped" ]] && \
|
|
[[ $templates_result == "success" || $templates_result == "skipped" ]]; then
|
|
echo "All required jobs succeeded or were skipped"
|
|
exit 0
|
|
else
|
|
echo "One or more required jobs failed"
|
|
exit 1
|
|
fi |