mirror of
https://github.com/X11Libre/xserver.git
synced 2026-11-01 03:03:58 +00:00
The freebsd/netbsd/dragonfly jobs run in vmactions VMs whose boot and image provisioning flake transiently; a single hiccup aborted the whole run and had to be restarted by hand. The existing dragonfly retry was ineffective: it re-ran the VM action without tearing down attempt 1's leftover libvirt domain, so attempt 2 hit "Guest name 'dragonflybsd' is already in use" and timed out again. Two layers of hardening: - In-VM pkg installs (freebsd, dragonfly) now retry with backoff and an explicit catalogue refresh, so a transient mirror failure no longer fails the build (netbsd already had mirror fallback + curl --retry). - Each BSD VM step is retried up to 3x, with a new shared .github/actions/libvirt-cleanup composite action destroying the leftover domain + orphaned qemu between attempts. Only the final attempt can fail the job; a success short-circuits the rest. Rolled out to freebsd and netbsd too (previously single-attempt) and added timeout-minutes to bound a fully-broken job. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
668 lines
27 KiB
YAML
668 lines
27 KiB
YAML
name: Build X servers
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
env:
|
|
MESON_BUILDDIR: "__BUILD"
|
|
X11_PREFIX: /home/runner/x11
|
|
X11_BUILD_DIR: /home/runner/work/xserver/xserver/WORK/sources/3rdparty
|
|
|
|
on:
|
|
push:
|
|
pull_request:
|
|
|
|
# If a ref is pushed again (or a PR gets a new commit) while its previous run is
|
|
# still in flight, cancel the stale run — only the newest commit needs building.
|
|
# Keyed by ref, so each branch/PR is independent.
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
ubuntu-fetch-pkg:
|
|
# De-duplicate PR runs without a branch-name convention: on a same-repo
|
|
# pull_request the branch's own push event already builds it, so skip the
|
|
# redundant build here. Fork PRs raise no push event in this repo, so
|
|
# they still build. Every build job chains off this root (and the three
|
|
# other no-needs roots below), so skipping it skips them too. Normal
|
|
# branch pushes are unaffected — they build exactly as before, and the
|
|
# push run's checks still populate the PR's status indicator.
|
|
if: >-
|
|
github.event_name != 'pull_request' ||
|
|
github.event.pull_request.head.repo.full_name != github.repository
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: ./.github/actions/ubuntu-fetch-pkg
|
|
|
|
xserver-build-ubuntu-no-gbm:
|
|
env:
|
|
MESON_ARGS: -Dprefix=/usr -Dxephyr=true -Dwerror=true -Dxcsecurity=true -Dgbm=false -Dxorg=true -Dxvfb=true -Dxnest=true -Dxfbdev=true -Dtest_xephyr_gles=false
|
|
LIBGL_ALWAYS_SOFTWARE: 1
|
|
GALLIUM_DRIVER: llvmpipe
|
|
PIGLIT_PLATFORM: x11_egl
|
|
runs-on: ubuntu-latest
|
|
needs: ubuntu-fetch-pkg
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v4
|
|
|
|
- uses: ./.github/actions/ubuntu-install-pkg
|
|
|
|
- name: prepare build environment
|
|
run: |
|
|
MACHINE=`gcc -dumpmachine`
|
|
echo "MACHINE=$MACHINE" >> "$GITHUB_ENV"
|
|
echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/$MACHINE/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV"
|
|
sudo chown root /bin/tar && sudo chmod u+s /bin/tar
|
|
|
|
- name: X11 prereq cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: |
|
|
${{ env.X11_PREFIX }}
|
|
${{ env.X11_BUILD_DIR }}/xts
|
|
${{ env.X11_BUILD_DIR }}/piglit
|
|
key: ${{ runner.name }}-x11-deps-${{ hashFiles('.github/scripts/ubuntu/install-prereq.sh') }}
|
|
restore-keys: ${{ runner.name }}-x11-deps-
|
|
|
|
- name: build and test
|
|
run: .github/scripts/ubuntu/run-xserver-build-and-test.sh
|
|
|
|
- name: archive build logs
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: build-logs
|
|
path: |
|
|
__BUILD/meson-logs/*
|
|
__BUILD/test/piglit-results/*
|
|
|
|
xserver-build-ubuntu:
|
|
env:
|
|
MESON_ARGS: -Dprefix=/usr -Dxephyr=true -Dwerror=true -Dxcsecurity=true -Dxorg=true -Dxvfb=true -Dxnest=true -Dxfbdev=true -Dtest_xephyr_gles=false
|
|
LIBGL_ALWAYS_SOFTWARE: 1
|
|
GALLIUM_DRIVER: llvmpipe
|
|
PIGLIT_PLATFORM: x11_egl
|
|
runs-on: ubuntu-latest
|
|
needs: ubuntu-fetch-pkg
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v6
|
|
|
|
- uses: ./.github/actions/ubuntu-install-pkg
|
|
|
|
- name: prepare build environment
|
|
run: |
|
|
MACHINE=`gcc -dumpmachine`
|
|
echo "MACHINE=$MACHINE" >> "$GITHUB_ENV"
|
|
echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/$MACHINE/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV"
|
|
|
|
- name: X11 prereq cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: |
|
|
${{ env.X11_PREFIX }}
|
|
${{ env.X11_BUILD_DIR }}/xts
|
|
${{ env.X11_BUILD_DIR }}/piglit
|
|
key: ${{ runner.name }}-x11-deps-${{ hashFiles('.github/scripts/ubuntu/install-prereq.sh') }}
|
|
restore-keys: ${{ runner.name }}-x11-deps-
|
|
|
|
- name: build and test
|
|
run: .github/scripts/ubuntu/run-xserver-build-and-test.sh
|
|
|
|
- name: archive build logs
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: build-logs
|
|
path: |
|
|
__BUILD/meson-logs/*
|
|
__BUILD/test/piglit-results/*
|
|
|
|
abi-changes-check:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
abi_changed: ${{ steps.filter.outputs.abi_changed }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: dorny/paths-filter@v3
|
|
id: filter
|
|
with:
|
|
filters: |
|
|
abi_changed:
|
|
- 'include/**'
|
|
- 'meson.build'
|
|
- 'meson_options.txt'
|
|
- 'xorg-server.pc.in'
|
|
- 'xlibre-server.pc.in'
|
|
- 'xorg-server.m4'
|
|
- 'hw/xfree86/xlibre-server.h.meson.in'
|
|
- 'hw/xfree86/drivers/input/inputtest/xf86-input-inputtest-protocol.h'
|
|
|
|
drivers-prepare-ubuntu:
|
|
env:
|
|
MESON_ARGS: -Dprefix=/home/runner/x11 -Dxorg-sdk=true -Dxorg=false -Dxephyr=false -Dwerror=false -Dxcsecurity=false -Dxorg=true -Dxvfb=false -Dxnest=false -Dxfbdev=false
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- ubuntu-fetch-pkg
|
|
- abi-changes-check
|
|
if: needs.abi-changes-check.outputs.abi_changed == 'true' || startsWith(github.ref, 'refs/tags/')
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v6
|
|
|
|
- uses: ./.github/actions/ubuntu-install-pkg
|
|
|
|
- name: prepare build environment
|
|
run: |
|
|
MACHINE=`gcc -dumpmachine`
|
|
echo "MACHINE=$MACHINE" >> "$GITHUB_ENV"
|
|
echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/$MACHINE/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV"
|
|
|
|
- name: X11 prereq cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: |
|
|
${{ env.X11_PREFIX }}
|
|
${{ env.X11_BUILD_DIR }}/xts
|
|
${{ env.X11_BUILD_DIR }}/piglit
|
|
key: drivers-deps-${{ github.sha }}
|
|
restore-keys: drivers-deps-${{ github.sha }}
|
|
|
|
- name: generic prereq and xserver
|
|
run: .github/scripts/ubuntu/install-prereq-drivers.sh
|
|
|
|
drivers-build-ubuntu:
|
|
needs:
|
|
- ubuntu-fetch-pkg
|
|
- drivers-prepare-ubuntu
|
|
- abi-changes-check
|
|
if: needs.abi-changes-check.outputs.abi_changed == 'true' || startsWith(github.ref, 'refs/tags/')
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
driver:
|
|
- input-elographics:25.0.0
|
|
- input-evdev:25.0.0
|
|
- input-joystick:25.0.0
|
|
- input-keyboard:25.0.0
|
|
- input-libinput:25.0.0
|
|
- input-mouse:25.0.0
|
|
- input-synaptics:25.0.0
|
|
- input-vmmouse:25.0.0
|
|
- input-void:25.0.0
|
|
- input-wacom:25.0.0
|
|
- video-amdgpu:25.0.0
|
|
- video-apm:25.0.0
|
|
- video-ark:25.0.0
|
|
- video-ast:25.0.0
|
|
- video-ati:25.0.0
|
|
- video-chips:25.0.0
|
|
- video-cirrus:25.0.0
|
|
- video-dummy:25.0.0
|
|
- video-fbdev:25.0.0
|
|
- video-freedreno:25.0.0
|
|
- video-geode:25.0.0
|
|
- video-i128:25.0.0
|
|
- video-i740:25.0.0
|
|
- video-intel:25.0.1
|
|
- video-mach64:25.0.0
|
|
- video-mga:25.0.0
|
|
- video-neomagic:25.0.0
|
|
- video-nested:25.0.0
|
|
- video-nouveau:25.0.0
|
|
- video-nv:25.0.0
|
|
- video-omap:25.0.0
|
|
- video-qxl:25.0.0
|
|
- video-r128:25.0.0
|
|
- video-rendition:25.0.0
|
|
- video-s3virge:25.0.0
|
|
- video-savage:25.0.0
|
|
- video-siliconmotion:25.0.0
|
|
- video-sis:25.0.0
|
|
- video-sisusb:25.0.0
|
|
- video-suncg14:25.0.0
|
|
- video-suncg3:25.0.0
|
|
- video-suncg6:25.0.0
|
|
- video-sunffb:25.0.0
|
|
- video-suntcx:25.0.0
|
|
- video-sunleo:25.0.0
|
|
- video-tdfx:25.0.0
|
|
- video-trident:25.0.0
|
|
- video-vesa:25.0.0
|
|
- video-vmware:25.0.0
|
|
- video-v4l:25.0.1
|
|
- video-vbox:25.0.0
|
|
- video-voodoo:25.0.0
|
|
- video-xgi:25.0.0
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v4
|
|
|
|
- uses: ./.github/actions/ubuntu-install-pkg
|
|
|
|
- name: prepare build environment
|
|
run: |
|
|
MACHINE=`gcc -dumpmachine`
|
|
echo "MACHINE=$MACHINE" >> "$GITHUB_ENV"
|
|
echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/$MACHINE/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV"
|
|
|
|
- name: X11 prereq cache
|
|
uses: actions/cache/restore@v5
|
|
with:
|
|
path: |
|
|
${{ env.X11_PREFIX }}
|
|
${{ env.X11_BUILD_DIR }}/xts
|
|
${{ env.X11_BUILD_DIR }}/piglit
|
|
key: drivers-deps-${{ github.sha }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: compile driver ${{ matrix.driver }}
|
|
run: .github/scripts/ubuntu/compile-driver-single.sh ${{ matrix.driver }}
|
|
|
|
xserver-build-mingw32-ubuntu:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
MESON_ARGS: -Dprefix=/home/runner/x11 --cross-file=.github/scripts/mingw32/cross-i686-w64-mingw32.txt -Dwerror=true -Dglx=false -Dlisten_tcp=true -Dxvmc=true -Dxv=true -Dxvfb=true -Dxnest=true -Dxephyr=true -Dxfbdev=false
|
|
needs: ubuntu-fetch-pkg
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v6
|
|
|
|
- uses: ./.github/actions/ubuntu-install-pkg
|
|
|
|
- name: prepare build environment
|
|
run: |
|
|
MACHINE=`gcc -dumpmachine`
|
|
echo "MACHINE=$MACHINE" >> "$GITHUB_ENV"
|
|
echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/$MACHINE/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV"
|
|
|
|
- name: X11 prereq cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: |
|
|
${{ env.X11_PREFIX }}
|
|
${{ env.X11_BUILD_DIR }}/xts
|
|
${{ env.X11_BUILD_DIR }}/piglit
|
|
key: ${{ runner.name }}-x11-deps-${{ hashFiles('.github/scripts/mingw32/cross-prereqs-build.sh') }}
|
|
restore-keys: ${{ runner.name }}-x11-deps-
|
|
|
|
- name: install crosscompiler
|
|
run: sudo apt-get install -y mingw-w64-tools gcc-mingw-w64 gcc-mingw-w64-i686 libz-mingw-w64-dev
|
|
|
|
- name: cross prereq
|
|
run: sudo .github/scripts/mingw32/cross-prereqs-build.sh i686-w64-mingw32
|
|
|
|
- name: build
|
|
run: .github/scripts/meson-build.sh --run-install
|
|
|
|
xserver-build-macos:
|
|
# skip the redundant same-repo PR rebuild (see ubuntu-fetch-pkg)
|
|
if: >-
|
|
github.event_name != 'pull_request' ||
|
|
github.event.pull_request.head.repo.full_name != github.repository
|
|
env:
|
|
MESON_ARGS: -Dprefix=/tmp -Dglx=false -Dxnest=false -Dxfbdev=false
|
|
X11_PREFIX: /Users/runner/x11
|
|
X11_BUILD_DIR: /Users/runner/build-deps
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v6
|
|
|
|
- name: prepare build environment
|
|
run: |
|
|
echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV"
|
|
|
|
- name: homebrew cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: /Users/runner/Library/Caches/Homebrew
|
|
key: ${{ runner.os }}-homebrew-cache-${{ hashFiles('.github/scripts/macos/install-pkg.sh') }}
|
|
restore-keys: ${{ runner.os }}-homebrew-cache-
|
|
|
|
- name: pkg install
|
|
run: .github/scripts/macos/install-pkg.sh
|
|
|
|
- name: X11 prereq cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: |
|
|
${{ env.X11_PREFIX }}
|
|
key: ${{ runner.os }}-x11-deps-${{ hashFiles('.github/scripts/macos/install-prereq.sh') }}
|
|
restore-keys: ${{ runner.os }}-x11-deps-
|
|
|
|
- name: generic prereq
|
|
run: .github/scripts/macos/install-prereq.sh
|
|
|
|
- name: build
|
|
run: .github/scripts/meson-build.sh
|
|
|
|
- name: tests (may fail)
|
|
continue-on-error: true
|
|
run: meson test -C "${{ env.MESON_BUILDDIR }}" --print-errorlogs -j1 || true
|
|
env:
|
|
XTEST_DIR: ${{ env.X11_BUILD_DIR }}/xts
|
|
PIGLIT_DIR: ${{ env.X11_BUILD_DIR }}/piglit
|
|
|
|
- name: archive build logs
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: build-logs-macos
|
|
path: |
|
|
__BUILD/meson-logs/*
|
|
__BUILD/test/piglit-results/*
|
|
|
|
- name: ddx build check
|
|
run: .github/scripts/check-ddx-build.sh
|
|
- name: manpage check
|
|
run: .github/scripts/manpages-check
|
|
|
|
xserver-build-freebsd:
|
|
runs-on: ubuntu-latest
|
|
needs: ubuntu-fetch-pkg
|
|
timeout-minutes: 90
|
|
env:
|
|
MYTOKEN : ${{ secrets.MYTOKEN }}
|
|
MESON_ARGS: -Dprefix=/usr -Dxephyr=true -Dwerror=true -Dxcsecurity=true -Dxorg=true -Dxvfb=true -Dxnest=true -Dxfbdev=false
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: ./.github/actions/ubuntu-pkg-cache
|
|
|
|
# VM boot / image provisioning flakes transiently; retry the whole
|
|
# VM step up to 3x, tearing down the leftover domain between tries
|
|
# (see .github/actions/libvirt-cleanup). Only the last attempt is
|
|
# allowed to fail the job; a success short-circuits the rest.
|
|
- name: run in freebsd VM (attempt 1)
|
|
id: freebsd-1
|
|
continue-on-error: true
|
|
uses: vmactions/freebsd-vm@v1
|
|
with:
|
|
envs: 'MYTOKEN MESON_ARGS'
|
|
usesh: true
|
|
release: "14.3"
|
|
run: ./.github/scripts/freebsd/run-xserver-build.sh
|
|
|
|
- name: cleanup stale VM before retry
|
|
if: steps.freebsd-1.outcome == 'failure'
|
|
uses: ./.github/actions/libvirt-cleanup
|
|
with:
|
|
guest: freebsd
|
|
|
|
- name: run in freebsd VM (attempt 2)
|
|
id: freebsd-2
|
|
if: steps.freebsd-1.outcome == 'failure'
|
|
continue-on-error: true
|
|
uses: vmactions/freebsd-vm@v1
|
|
with:
|
|
envs: 'MYTOKEN MESON_ARGS'
|
|
usesh: true
|
|
release: "14.3"
|
|
run: ./.github/scripts/freebsd/run-xserver-build.sh
|
|
|
|
- name: cleanup stale VM before final retry
|
|
if: steps.freebsd-1.outcome == 'failure' && steps.freebsd-2.outcome == 'failure'
|
|
uses: ./.github/actions/libvirt-cleanup
|
|
with:
|
|
guest: freebsd
|
|
|
|
- name: run in freebsd VM (attempt 3)
|
|
if: steps.freebsd-1.outcome == 'failure' && steps.freebsd-2.outcome == 'failure'
|
|
uses: vmactions/freebsd-vm@v1
|
|
with:
|
|
envs: 'MYTOKEN MESON_ARGS'
|
|
usesh: true
|
|
release: "14.3"
|
|
run: ./.github/scripts/freebsd/run-xserver-build.sh
|
|
|
|
xserver-build-dragonflybsd:
|
|
runs-on: ubuntu-latest
|
|
needs: ubuntu-fetch-pkg
|
|
timeout-minutes: 90
|
|
env:
|
|
MESON_ARGS: -Dwerror=true -Dxephyr=true -Dxorg=true -Dxvfb=true -Dxnest=true -Dxfbdev=false
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: ./.github/actions/ubuntu-pkg-cache
|
|
|
|
# VM boot / image provisioning flakes transiently; retry the whole
|
|
# VM step up to 3x, tearing down the leftover domain between tries
|
|
# (see .github/actions/libvirt-cleanup). Without that teardown the
|
|
# retry collides with attempt 1's leftover VM
|
|
# ("Guest name 'dragonflybsd' is already in use") and times out.
|
|
- name: run in DragonFlyBSD VM (attempt 1)
|
|
id: dfly-1
|
|
continue-on-error: true
|
|
uses: vmactions/dragonflybsd-vm@v1.1.4
|
|
with:
|
|
envs: 'MESON_ARGS'
|
|
usesh: true
|
|
release: "6.4.2"
|
|
run: ./.github/scripts/DragonFlyBSD/run-xserver-build.sh
|
|
|
|
- name: cleanup stale VM before retry
|
|
if: steps.dfly-1.outcome == 'failure'
|
|
uses: ./.github/actions/libvirt-cleanup
|
|
with:
|
|
guest: dragonflybsd
|
|
|
|
- name: run in DragonFlyBSD VM (attempt 2)
|
|
id: dfly-2
|
|
if: steps.dfly-1.outcome == 'failure'
|
|
continue-on-error: true
|
|
uses: vmactions/dragonflybsd-vm@v1.1.4
|
|
with:
|
|
envs: 'MESON_ARGS'
|
|
usesh: true
|
|
release: "6.4.2"
|
|
run: ./.github/scripts/DragonFlyBSD/run-xserver-build.sh
|
|
|
|
- name: cleanup stale VM before final retry
|
|
if: steps.dfly-1.outcome == 'failure' && steps.dfly-2.outcome == 'failure'
|
|
uses: ./.github/actions/libvirt-cleanup
|
|
with:
|
|
guest: dragonflybsd
|
|
|
|
- name: run in DragonFlyBSD VM (attempt 3)
|
|
if: steps.dfly-1.outcome == 'failure' && steps.dfly-2.outcome == 'failure'
|
|
uses: vmactions/dragonflybsd-vm@v1.1.4
|
|
with:
|
|
envs: 'MESON_ARGS'
|
|
usesh: true
|
|
release: "6.4.2"
|
|
run: ./.github/scripts/DragonFlyBSD/run-xserver-build.sh
|
|
|
|
xserver-build-netbsd:
|
|
runs-on: ubuntu-latest
|
|
needs: ubuntu-fetch-pkg
|
|
timeout-minutes: 90
|
|
env:
|
|
MESON_ARGS: -Dwerror=true -Dxephyr=true -Dxorg=true -Dxvfb=true -Dxnest=true -Dxfbdev=false
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: ./.github/actions/ubuntu-pkg-cache
|
|
|
|
# VM boot / image provisioning flakes transiently; retry the whole
|
|
# VM step up to 3x, tearing down the leftover domain between tries
|
|
# (see .github/actions/libvirt-cleanup).
|
|
- name: run in netbsd VM (attempt 1)
|
|
id: netbsd-1
|
|
continue-on-error: true
|
|
uses: vmactions/netbsd-vm@v1.2.3
|
|
with:
|
|
envs: 'MESON_ARGS'
|
|
usesh: true
|
|
release: '10.1'
|
|
run: ./.github/scripts/netbsd/run-xserver-build.sh
|
|
|
|
- name: cleanup stale VM before retry
|
|
if: steps.netbsd-1.outcome == 'failure'
|
|
uses: ./.github/actions/libvirt-cleanup
|
|
with:
|
|
guest: netbsd
|
|
|
|
- name: run in netbsd VM (attempt 2)
|
|
id: netbsd-2
|
|
if: steps.netbsd-1.outcome == 'failure'
|
|
continue-on-error: true
|
|
uses: vmactions/netbsd-vm@v1.2.3
|
|
with:
|
|
envs: 'MESON_ARGS'
|
|
usesh: true
|
|
release: '10.1'
|
|
run: ./.github/scripts/netbsd/run-xserver-build.sh
|
|
|
|
- name: cleanup stale VM before final retry
|
|
if: steps.netbsd-1.outcome == 'failure' && steps.netbsd-2.outcome == 'failure'
|
|
uses: ./.github/actions/libvirt-cleanup
|
|
with:
|
|
guest: netbsd
|
|
|
|
- name: run in netbsd VM (attempt 3)
|
|
if: steps.netbsd-1.outcome == 'failure' && steps.netbsd-2.outcome == 'failure'
|
|
uses: vmactions/netbsd-vm@v1.2.3
|
|
with:
|
|
envs: 'MESON_ARGS'
|
|
usesh: true
|
|
release: '10.1'
|
|
run: ./.github/scripts/netbsd/run-xserver-build.sh
|
|
|
|
xserver-build-alpine:
|
|
runs-on: ubuntu-latest
|
|
needs: ubuntu-fetch-pkg
|
|
container:
|
|
image: alpine:latest
|
|
env:
|
|
MESON_ARGS: -Dprefix=/usr -Dxcsecurity=true -Dxorg=true -Dxephyr=true -Dxvfb=true -Dxnest=true -Dxfbdev=false -Dsystemd_logind=false -Dwerror=false
|
|
steps:
|
|
# actions/checkout is a JS action; GitHub's bundled Node is
|
|
# glibc-linked, so musl-based Alpine needs gcompat to run it.
|
|
- name: prepare JS-action runtime
|
|
run: apk add --no-cache git gcompat libstdc++ nodejs
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v6
|
|
- name: build
|
|
run: ./.github/scripts/alpine/run-xserver-build.sh
|
|
|
|
xserver-build-cygwin:
|
|
# skip the redundant same-repo PR rebuild (see ubuntu-fetch-pkg)
|
|
if: >-
|
|
github.event_name != 'pull_request' ||
|
|
github.event.pull_request.head.repo.full_name != github.repository
|
|
runs-on: windows-latest
|
|
steps:
|
|
- name: Cygwin packages cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: D:\cygwin-packages
|
|
key: ${{ runner.os }}-packages
|
|
restore-keys: ${{ runner.os }}-packages
|
|
- uses: cygwin/cygwin-install-action@master
|
|
with:
|
|
# FIXME: temporary workaround for cygwin mirror problem
|
|
# https://github.com/cygwin/cygwin-install-action/issues/39
|
|
check-installer-sig: false
|
|
platform: x86_64
|
|
site: |
|
|
https://mirror.wisegs.com/cygwin/
|
|
https://mirrors.sonic.net/cygwin/
|
|
https://mirror.cpsc.ucalgary.ca/mirror/cygwin.com/
|
|
https://muug.ca/mirror/cygwin/
|
|
https://mirror.csclub.uwaterloo.ca/cygwin/
|
|
https://cygwin.mirror.gtcomm.net/
|
|
http://cygwin.mirror.rafal.ca/
|
|
|
|
packages: >-
|
|
binutils, bison, ccache, flex, gcc-core, meson, ninja,
|
|
pkg-config, python39, windowsdriproto, xorgproto,
|
|
libepoxy-devel, libfontenc-devel, libfreetype-devel,
|
|
libGL-devel, libnettle-devel, libpixman1-devel,
|
|
libtirpc-devel, libXRes-devel, libXaw-devel, libXdmcp-devel,
|
|
libXext-devel, libXfont2-devel, libXi-devel,
|
|
libXinerama-devel, libXmu-devel, libXpm-devel,
|
|
libXrender-devel, libXtst-devel, libxcb-composite-devel,
|
|
libxcb-ewmh-devel, libxcb-icccm-devel, libxcb-image-devel,
|
|
libxcb-keysyms-devel, libxcb-randr-devel,
|
|
libxcb-render-devel, libxcb-render-util-devel,
|
|
libxcb-shape-devel, libxcb-util-devel, libxcb-xkb-devel,
|
|
libxcvt-devel, libxkbfile-devel, font-util,
|
|
khronos-opengl-registry, python39-lxml, xkbcomp-devel,
|
|
xkeyboard-config, git
|
|
|
|
- name: Cygwin ccache cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: D:\cygwin\home\runneradmin\.ccache
|
|
key: ${{ runner.os }}-ccache
|
|
restore-keys: ${{ runner.os }}-ccache
|
|
- run: git config --global --add safe.directory /cygdrive/d/a/xserver/xserver
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
set-safe-directory: false
|
|
- run: |
|
|
PATH="/usr/bin:$(cygpath "$SYSTEMROOT")/system32"
|
|
shell: bash --noprofile --norc -e -o igncr '{0}'
|
|
- run: |
|
|
bash ./.github/scripts/Cygwin/build.sh
|
|
|
|
xserver-build-arch:
|
|
# skip the redundant same-repo PR rebuild (see ubuntu-fetch-pkg)
|
|
if: >-
|
|
github.event_name != 'pull_request' ||
|
|
github.event.pull_request.head.repo.full_name != github.repository
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with: # needed for `git describe` to work
|
|
fetch-tags: true
|
|
fetch-depth: 0
|
|
- name: determine pkg version from git
|
|
run: git describe | sed -e 's~^xlibre-xserver-~~; s~-[0-9a-z]*$~~' | tr '-' '.' > .github/arch/GIT_VERSION
|
|
- name: build arch package
|
|
uses: callmetango/archlinux-build-package-action@v0.6.0
|
|
with:
|
|
path: .github/arch
|
|
makepkg-opts: -cfse --noconfirm
|
|
- name: upload-artifacts
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: arch-binpkg
|
|
path: |
|
|
./.github/arch/xlibre-xserver-*.tar.zst
|
|
|
|
check-sign-off:
|
|
name: Check Signed-Off-By
|
|
if: github.event_name == 'pull_request'
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
FORCE_COLOR: 1
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: live627/check-pr-signoff-action@v1
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
release:
|
|
name: Release pushed tag
|
|
runs-on: ubuntu-latest
|
|
if: ${{ startsWith(github.ref, 'refs/tags/xlibre-xserver-') }}
|
|
needs:
|
|
- xserver-build-alpine
|
|
- xserver-build-ubuntu
|
|
- drivers-build-ubuntu
|
|
- xserver-build-mingw32-ubuntu
|
|
- xserver-build-macos
|
|
- xserver-build-freebsd
|
|
- xserver-build-dragonflybsd
|
|
- xserver-build-netbsd
|
|
- xserver-build-arch
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
- name: Create release
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
tag: ${{ github.ref_name }}
|
|
run: .github/scripts/github/make-release
|