Skip to content

Add initial GitHub Actions support for lutok #28

Add initial GitHub Actions support for lutok

Add initial GitHub Actions support for lutok #28

Workflow file for this run

---
# 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

View workflow run for this annotation

GitHub Actions / build

Invalid workflow file

The workflow is not valid. .github/workflows/build.yaml (Line: 93, Col: 19): Unexpected symbol: 'and'. Located at position 22 within expression: runner.os == 'Linux' and matrix.enable-atf == '--enable-atf'
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