Add initial GitHub Actions support for lutok #28
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | ||
# GitHub action to compile and test lutok on supported platforms. | ||
# | ||
# Steps executed: | ||
# * Handle prerequisites | ||
# * Install binary packages | ||
# * Build packages from source (if needed). | ||
# * Build | ||
# * Install | ||
# * Run tests | ||
# | ||
# On MacOS we build with: | ||
# * latest clang from brew (system provided clang lacks sanitizers). | ||
# * ld from system | ||
# | ||
# Notes re: building with 5.3... | ||
# - In order to build/test with 5.3 on MacOS, we would need to build lutok | ||
# and kyua from scratch (installing via the formula unfortunately picks | ||
# up the binary package). | ||
# - I'm not sure why Ubuntu doesn't distribute the liblua5.3-dev package on | ||
# 24.04. | ||
env: | ||
KYUA_REPO: freebsd/kyua | ||
# XXX: kyua-0.13 doesn't build because of std::auto_array no longer being a thing.. | ||
# KYUA_REF: kyua-0.13 | ||
KYUA_REF: master | ||
name: build | ||
on: | ||
pull_request: | ||
branches: | ||
- master | ||
push: | ||
workflow_dispatch: | ||
permissions: | ||
contents: read | ||
jobs: | ||
build: | ||
name: Build ${{ matrix.build-os }} ${{ matrix.compiler }} ${{ matrix.enable-atf }} ${{ matrix.lua }} | ||
runs-on: "${{ matrix.build-os }}" | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
build-os: | ||
- ubuntu-24.04 | ||
- macos-latest | ||
enable-atf: [--disable-atf, --enable-atf] | ||
include: | ||
- build-os: macos-latest | ||
compiler: clang-19 | ||
pkgs: | ||
- llvm@19 | ||
- atf | ||
- autoconf | ||
- automake | ||
- libtool | ||
- pkgconf | ||
- lua@5.4 | ||
llvm-bindir: /opt/homebrew/opt/llvm/bin | ||
- build-os: ubuntu-24.04 | ||
compiler: clang-18 | ||
pkgs: | ||
- clang-18 | ||
- atf-sh | ||
- libatf-c++-2 | ||
- libatf-c-1 | ||
- libatf-dev | ||
- autoconf | ||
- automake | ||
- libtool | ||
- pkgconf | ||
- liblua5.4-dev | ||
- lua5.4 | ||
kyua-dep-pkgs: | ||
- libsqlite3-dev | ||
llvm-bindir: /usr/lib/llvm-18/bin | ||
steps: | ||
- name: Install packages (macOS) | ||
if: runner.os == 'macOS' | ||
run: | | ||
brew update --quiet || true | ||
brew install ${{ join(matrix.pkgs, ' ') }} | ||
- name: Install packages (Ubuntu) | ||
if: runner.os == 'Linux' | ||
run: | | ||
sudo apt update --quiet | ||
sudo apt --quiet -y --no-install-suggests \ | ||
--no-install-recommends install \ | ||
${{ join(matrix.pkgs, ' ') }} | ||
- name: Install Kyua dependencies (Ubuntu) | ||
if: runner.os == 'Linux' and matrix.enable-atf == '--enable-atf' | ||
Check failure on line 93 in .github/workflows/build.yaml GitHub Actions / buildInvalid workflow file
|
||
run: | | ||
sudo apt --quiet -y --no-install-suggests \ | ||
--no-install-recommends install \ | ||
${{ join(matrix.kyua-dep-pkgs, ' ') }} | ||
- name: Checking out source | ||
uses: actions/checkout@v4 | ||
with: | ||
# Same as `LUTOK_SRCDIR`. | ||
path: ${{ github.workspace }}/lutok-src | ||
- name: Setup Environment | ||
run: | | ||
echo "AR=${{ matrix.llvm-bindir }}/llvm-ar" >> "${GITHUB_ENV}" | ||
echo "CC=${{ matrix.llvm-bindir }}/clang" >> "${GITHUB_ENV}" | ||
echo "CPP=${{ matrix.llvm-bindir }}/clang-cpp" >> "${GITHUB_ENV}" | ||
echo "CXX=${{ matrix.llvm-bindir }}/clang++" >> "${GITHUB_ENV}" | ||
echo "NM=${{ matrix.llvm-bindir }}/llvm-nm" >> "${GITHUB_ENV}" | ||
echo "PKG_CONFIG_PATH=${PKG_CONFIG_PATH}" >> "${GITHUB_ENV}" | ||
echo "RANLIB=${{ matrix.llvm-bindir }}/llvm-ranlib" >> "${GITHUB_ENV}" | ||
echo "OBJDUMP=${{ matrix.llvm-bindir }}/llvm-objdump" >> "${GITHUB_ENV}" | ||
echo "STRIP=${{ matrix.llvm-bindir }}/llvm-strip" >> "${GITHUB_ENV}" | ||
echo "KYUA_SRCDIR=${GITHUB_WORKSPACE}/kyua-src" >> "${GITHUB_ENV}" | ||
echo "KYUA_OBJDIR=${GITHUB_WORKSPACE}/kyua-obj" >> "${GITHUB_ENV}" | ||
echo "LUTOK_SRCDIR=${GITHUB_WORKSPACE}/lutok-src" >> "${GITHUB_ENV}" | ||
echo "LUTOK_OBJDIR=${GITHUB_WORKSPACE}/lutok-obj" >> "${GITHUB_ENV}" | ||
echo "LUTOK_PREFIX=/usr/local" >> "${GITHUB_ENV}" | ||
echo "NPROC=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1`" >> "${GITHUB_ENV}" | ||
- name: Build Lutok | ||
run: | | ||
CFG_OPTS="--disable-dependency-tracking ${{ matrix.enable-atf }}" | ||
CFG_OPTS="${CFG_OPTS} --prefix=${LUTOK_PREFIX}" | ||
echo "Building lutok with ${CFG_OPTS}..." | ||
echo "uname -a: $(uname -a)" | ||
echo "uname -m: $(uname -m)" | ||
echo "uname -p: $(uname -p)" | ||
echo "Build environment:" | ||
cat "${GITHUB_ENV}" | ||
cd "${LUTOK_SRCDIR}" | ||
autoreconf -isv -I/usr/local/share/aclocal | ||
mkdir -p "${LUTOK_OBJDIR}" | ||
cd "${LUTOK_OBJDIR}" | ||
"${LUTOK_SRCDIR}/configure" ${CFG_OPTS} | ||
make -j${NPROC} all | tee lutok-make-all.log | ||
- name: Install Lutok | ||
run: | | ||
cd "${LUTOK_OBJDIR}" | ||
sudo make install | ||
# Everything from here on out is --enable-atf related. | ||
- name: Clone Kyua source | ||
if: matrix.enable-atf == '--enable-atf' | ||
uses: actions/checkout@v4 | ||
with: | ||
repository: "${{ env.KYUA_REPO }}" | ||
ref: "${{ env.KYUA_REF }}" | ||
# Same as `KYUA_SRCDIR`. | ||
path: "${{ github.workspace }}/kyua-src" | ||
- name: Build and Install Kyua | ||
if: matrix.enable-atf == '--enable-atf' | ||
run: | | ||
CFG_OPTS="--disable-dependency-tracking" | ||
CFG_OPTS="${CFG_OPTS} --prefix=${LUTOK_PREFIX}" | ||
echo "Building lutok with ${CFG_OPTS}..." | ||
echo "uname -a: $(uname -a)" | ||
echo "uname -m: $(uname -m)" | ||
echo "uname -p: $(uname -p)" | ||
cd "${KYUA_SRCDIR}" | ||
autoreconf -isv -I/usr/local/share/aclocal | ||
mkdir -p "${KYUA_OBJDIR}" | ||
cd "${KYUA_OBJDIR}" | ||
"${KYUA_SRCDIR}/configure" ${CFG_OPTS} | ||
make -j${NPROC} all | tee kyua-make-all.log | ||
sudo make install | ||
- name: Test Lutok | ||
if: matrix.enable-atf == '--enable-atf' | ||
run: | | ||
cd "${LUTOK_OBJDIR}" | ||
make installcheck | ||
check_exit=$? | ||
if [ $check_exit -eq 0 ]; then | ||
echo "# ✅ All mandatory checks passed" >> $GITHUB_STEP_SUMMARY | ||
else | ||
echo "# ❌ Some checks failed" >> $GITHUB_STEP_SUMMARY | ||
echo "::error file=.github/workflows/build.yaml,line=173,endLine=173,title=Checks failed!::checks failed" | ||
fi | ||
cd "${LUTOK_PREFIX}/tests/lutok" | ||
kyua report-html --output ${LUTOK_OBJDIR}/html # produces html subdirectory | ||
# Include the plaintext and JUnit reports. | ||
kyua report --verbose --results-filter=xfail,broken,failed > ${LUTOK_OBJDIR}/html/test-reportfailed.txt | ||
kyua report-junit --output ${LUTOK_OBJDIR}/html/test-reportfailed.xml | ||
# Include the kyua log. | ||
cp -a ~/.kyua/logs ${LUTOK_OBJDIR}/html/ | ||
exit $check_exit |