xserver/.github/workflows/build-xserver.yml
Enrico Weigelt, metux IT consult c4252526cf ci: make BSD VM build jobs resilient to transient failures
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>
2026-06-25 15:00:36 +02:00

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