Skip to content

Commit

Permalink
Add initial GitHub Actions support for lutok
Browse files Browse the repository at this point in the history
This proposed GitHub Actions workflow file runs tests on MacOS and
Ubuntu Linux, similar to what is being proposed in
freebsd/atf#93 .

Signed-off-by: Enji Cooper <ngie@FreeBSD.org>
  • Loading branch information
ngie-eign committed Dec 27, 2024
1 parent c1fd8b6 commit 09e5042
Showing 1 changed file with 174 additions and 0 deletions.
174 changes: 174 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
---
# 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
KYUA_REF: kyua-0.13

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

0 comments on commit 09e5042

Please sign in to comment.