forked from freebsd/kyua
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add initial GitHub Actions support for kyua
This proposed GitHub Actions workflow file runs tests on MacOS and Ubuntu Linux, similar to what is being proposed in freebsd/atf#93 . The delta between this change and the one being made in ATF mostly relates to the additional package dependencies, e.g., with and without ATF. Kyua is built from scratch because of issues with dependent packages and runtime linker collisions on both MacOS and Ubuntu. The binary package versions are built against a different version of Lutok, ergo they can have runtime linker collisions. Signed-off-by: Enji Cooper <[email protected]>
- Loading branch information
Showing
1 changed file
with
214 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,214 @@ | ||
--- | ||
# GitHub action to compile and test kyua 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 | ||
# | ||
env: | ||
ATF_REPO: freebsd/atf | ||
ATF_REF: atf-0.22 | ||
#LUTOK_REPO: freebsd/lutok | ||
#LUTOK_REF: lutok-0.6 | ||
LUTOK_REPO: ngie-eign/lutok | ||
LUTOK_REF: build-cleanup | ||
|
||
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 }} | ||
runs-on: "${{ matrix.build-os }}" | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
build-os: | ||
- ubuntu-24.04 | ||
- macos-latest | ||
#enable-atf: [--disable-atf, --enable-atf] | ||
enable-atf: [--enable-atf] | ||
include: | ||
- build-os: macos-latest | ||
compiler: clang-19 | ||
pkgs: | ||
- llvm@19 | ||
- autoconf | ||
- automake | ||
- libtool | ||
- pkgconf | ||
- [email protected] | ||
- sqlite | ||
enable-atf-pkgs: | ||
# gdb is not built for ARM64 yet :(. | ||
# - gdb | ||
llvm-bindir: /opt/homebrew/opt/llvm/bin | ||
- build-os: ubuntu-24.04 | ||
compiler: clang-18 | ||
pkgs: | ||
- clang-18 | ||
- autoconf | ||
- automake | ||
- libtool | ||
- pkgconf | ||
- liblua5.4-dev | ||
- lua5.4 | ||
- libsqlite3-dev | ||
enable-atf-pkgs: | ||
- gdb | ||
llvm-bindir: /usr/lib/llvm-18/bin | ||
steps: | ||
- name: Install base dependencies (macOS) | ||
if: runner.os == 'macOS' | ||
run: | | ||
brew update -q || true | ||
brew install -q \ | ||
${{ join(matrix.pkgs, ' ') }} \ | ||
${{ join(matrix.enable-atf-pkgs, ' ') }} | ||
- name: Install base dependencies (Ubuntu) | ||
if: runner.os == 'Linux' | ||
run: | | ||
sudo apt -Uqy --no-install-suggests \ | ||
--no-install-recommends install \ | ||
${{ join(matrix.pkgs, ' ') }} \ | ||
${{ join(matrix.enable-atf-pkgs, ' ') }} | ||
- name: Checking out source (ATF) | ||
uses: actions/checkout@v4 | ||
with: | ||
repository: "${{ env.ATF_REPO }}" | ||
ref: "${{ env.ATF_REF }}" | ||
# Same as `ATF_SRCDIR`. | ||
path: "${{ github.workspace }}/atf-src" | ||
- name: Checking out source (Lutok) | ||
uses: actions/checkout@v4 | ||
with: | ||
repository: "${{ env.LUTOK_REPO }}" | ||
ref: "${{ env.LUTOK_REF }}" | ||
# Same as `LUTOK_SRCDIR`. | ||
path: "${{ github.workspace }}/lutok-src" | ||
- name: Clone Kyua source | ||
if: matrix.enable-atf == '--enable-atf' | ||
uses: actions/checkout@v4 | ||
with: | ||
# Same as `KYUA_SRCDIR`. | ||
path: "${{ github.workspace }}/kyua-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:/usr/local/lib/pkgconfig'" >> "${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 "ATF_SRCDIR=${GITHUB_WORKSPACE}/atf-src" >> "${GITHUB_ENV}" | ||
echo "ATF_OBJDIR=${GITHUB_WORKSPACE}/atf-obj" >> "${GITHUB_ENV}" | ||
echo "KYUA_SRCDIR=${GITHUB_WORKSPACE}/kyua-src" >> "${GITHUB_ENV}" | ||
echo "KYUA_OBJDIR=${GITHUB_WORKSPACE}/kyua-obj" >> "${GITHUB_ENV}" | ||
echo "KYUA_PREFIX=/usr/local" >> "${GITHUB_ENV}" | ||
echo "KYUA_STOREDIR=${GITHUB_WORKSPACE}/kyua-obj/store" >> "${GITHUB_ENV}" | ||
echo "KYUA_STORETESTDATADIR=${GITHUB_WORKSPACE}/kyua-obj/store" >> "${GITHUB_ENV}" | ||
echo "LUTOK_SRCDIR=${GITHUB_WORKSPACE}/lutok-src" >> "${GITHUB_ENV}" | ||
echo "LUTOK_OBJDIR=${GITHUB_WORKSPACE}/lutok-obj" >> "${GITHUB_ENV}" | ||
echo "NPROC=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1`" >> "${GITHUB_ENV}" | ||
- name: Build Environment Dump | ||
run: | | ||
echo "ATF flag: ${{ matrix.enable-atf }}" | ||
echo "uname -a: $(uname -a)" | ||
echo "uname -m: $(uname -m)" | ||
echo "uname -p: $(uname -p)" | ||
echo "Build environment:" | ||
cat "${GITHUB_ENV}" | ||
- name: Build and install ATF | ||
if: matrix.enable-atf == '--enable-atf' | ||
run: | | ||
set -x | ||
CFG_OPTS="--disable-dependency-tracking" | ||
CFG_OPTS="${CFG_OPTS} --prefix=${KYUA_PREFIX}" | ||
echo "Building lutok with ${CFG_OPTS}..." | ||
cd "${ATF_SRCDIR}" | ||
autoreconf -isv | ||
mkdir -p "${ATF_OBJDIR}" | ||
cd "${ATF_OBJDIR}" | ||
"${ATF_SRCDIR}/configure" ${CFG_OPTS} | ||
make -j${NPROC} all | tee atf-make-all.log | ||
sudo make install | ||
- name: Build and Install Lutok | ||
run: | | ||
set -x | ||
CFG_OPTS="--disable-dependency-tracking" | ||
CFG_OPTS="${CFG_OPTS} --prefix=${KYUA_PREFIX}" | ||
echo "Building lutok with ${CFG_OPTS}..." | ||
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 | ||
cd "${LUTOK_OBJDIR}" | ||
sudo make install | ||
- name: Build and Install Kyua | ||
run: | | ||
set -x | ||
CFG_OPTS="--disable-dependency-tracking" | ||
CFG_OPTS="${CFG_OPTS} ${{ matrix.enable-atf }}" | ||
CFG_OPTS="${CFG_OPTS} --prefix=${KYUA_PREFIX}" | ||
if [ "x${{ matrix.enable-atf }}" = "x--enable-atf" ]; then | ||
CXXFLAGS="$CXXFLAGS $(pkgconf --cflags atf-c++)" | ||
LDFLAGS="$LDFLAGS $(pkgconf --libs-only-L atf-c++)" | ||
fi | ||
CXXFLAGS="${CXXFLAGS} $(pkgconf --cflags lutok)"; | ||
LDFLAGS="${LDFLAGS} $(pkgconf --libs-only-L lutok)"; | ||
cd "${KYUA_SRCDIR}" | ||
autoreconf -isv -I/usr/local/share/aclocal | ||
mkdir -p "${KYUA_OBJDIR}" | ||
cd "${KYUA_OBJDIR}" | ||
echo "syntax(2)" > kyua.conf | ||
echo "unprivileged_user = 'nobody'" >> kyua.conf | ||
env CXXFLAGS="${CXXFLAGS}" \ | ||
KYUA_CONFIG_FILE_FOR_CHECK="$(pwd)/kyua.conf" \ | ||
LDFLAGS="${LDFLAGS}" \ | ||
"${KYUA_SRCDIR}/configure" ${CFG_OPTS} | ||
make -j${NPROC} all | tee kyua-make-all.log | ||
sudo make install | ||
- name: Test Kyua Setup (Ubuntu) | ||
if: runner.os == 'Linux' && matrix.enable-atf == '--enable-atf' | ||
run: | | ||
sudo sysctl kernel.core_pattern="/cores/core.%p.%e" | ||
sudo ldconfig | ||
- name: Test Kyua | ||
if: matrix.enable-atf == '--enable-atf' | ||
run: | | ||
cd "${KYUA_OBJDIR}" | ||
sudo sh -c 'ulimit -c unlimited; 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 "${KYUA_PREFIX}/tests/kyua" | ||
chmod -R a+rx "${KYUA_STOREDIR}" ~/.kyua | ||
kyua report-html \ | ||
--results-file ${KYUA_STOREDIR}/*.db \ | ||
--output ${KYUA_OBJDIR}/html | ||
exit $check_exit |