Skip to content

Commit 5658f95

Browse files
Kevengie-eign
authored andcommitted
Introduce GH action to build&tests atf with potentially different configurations
Build on macOS Sonoma/aarch64 and Ubuntu 24.04/amd64.
1 parent 8d18094 commit 5658f95

File tree

1 file changed

+174
-0
lines changed

1 file changed

+174
-0
lines changed

.github/workflows/build.yaml

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
name: build
2+
# GitHub action to compile atf on ubuntu-24.04 (amd64) and macos-latest (aarch64)
3+
# * set-up prerequisites
4+
# * configure && make && make check && make install
5+
# * upload installed binaries as well as kyua reports as build artefact
6+
#
7+
# We run in a matrix with os/sanitize flags.
8+
9+
on:
10+
pull_request:
11+
branches:
12+
- main
13+
push:
14+
workflow_dispatch:
15+
16+
permissions:
17+
contents: read
18+
19+
jobs:
20+
build:
21+
name: build ${{ join(matrix.sanitize, '+') }} ${{ matrix.build-os }} ${{ matrix.compiler }}
22+
runs-on: "${{ matrix.build-os }}"
23+
strategy:
24+
fail-fast: false
25+
matrix:
26+
build-os:
27+
- ubuntu-24.04
28+
- macos-latest
29+
sanitize:
30+
- []
31+
include:
32+
- build-os: macos-latest
33+
compiler: clang-19
34+
pkgs:
35+
- llvm@19
36+
- automake
37+
- libtool # for AC
38+
# - pkgconf pre-installed on GH
39+
llvm-bindir: /opt/homebrew/opt/llvm@19/bin
40+
- build-os: ubuntu-24.04
41+
compiler: clang-18
42+
pkgs:
43+
- clang-18
44+
- automake
45+
- libtool
46+
- kyua
47+
- pkgconf
48+
llvm-bindir: /usr/lib/llvm-18/bin
49+
steps:
50+
- name: install packages (macOS)
51+
if: runner.os == 'macOS'
52+
run: |
53+
# on MacOS we build with
54+
# * latest clang@19 from brew (system provided clang lacks sanitizers)
55+
# * ld from system
56+
#
57+
58+
brew update --quiet || true
59+
brew install ${{ join(matrix.pkgs, ' ') }}
60+
61+
# kyua was kicked out of brew due to lack of activity
62+
# we patch away the disabled line and install the last built binary version
63+
# note that it cannot be rebuilt as compiler defaults have changed
64+
curl https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/k/kyua.rb | sed 's/[[:space:]]*disable!.*$//' > kyua.rb
65+
brew install --formula ./kyua.rb
66+
67+
- name: install packages (Linux)
68+
if: runner.os == 'Linux'
69+
run: |
70+
sudo apt-get update --quiet || true
71+
sudo apt-get -yq --no-install-suggests --no-install-recommends install ${{ join(matrix.pkgs, ' ') }}
72+
- uses: actions/checkout@v4
73+
with:
74+
path: src.atf
75+
- name: setup environment
76+
run: |
77+
echo "CC=${{ matrix.llvm-bindir }}/clang" >> "${GITHUB_ENV}"
78+
echo "CXX=${{ matrix.llvm-bindir }}/clang++" >> "${GITHUB_ENV}"
79+
echo "CPP=${{ matrix.llvm-bindir }}/clang-cpp" >> "${GITHUB_ENV}"
80+
echo "AR=${{ matrix.llvm-bindir }}/llvm-ar" >> "${GITHUB_ENV}"
81+
echo "OBJDUMP=${{ matrix.llvm-bindir }}/llvm-objdump" >> "${GITHUB_ENV}"
82+
echo "STRIP=${{ matrix.llvm-bindir }}/llvm-strip" >> "${GITHUB_ENV}"
83+
echo "RANLIB=${{ matrix.llvm-bindir }}/llvm-ranlib" >> "${GITHUB_ENV}"
84+
echo "NM=${{ matrix.llvm-bindir }}/llvm-nm" >> "${GITHUB_ENV}"
85+
echo "SRC_ATF=${GITHUB_WORKSPACE}/src.atf" >> "${GITHUB_ENV}"
86+
echo "BUILD_ATF=${GITHUB_WORKSPACE}/build.atf" >> "${GITHUB_ENV}"
87+
echo "INST_ATF=${GITHUB_WORKSPACE}/inst.atf" >> "${GITHUB_ENV}"
88+
echo "NPROC=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1`" >> "${GITHUB_ENV}"
89+
90+
- name: build atf
91+
run: |
92+
CFG_OPTS="--disable-dependency-tracking"
93+
CFG_OPTS="${CFG_OPTS} --prefix=${INST_ATF}"
94+
for i in ${{ join(matrix.sanitize, ' ') }}; do
95+
CFG_OPTS="${CFG_OPTS} --enable-${i}"
96+
done
97+
echo Building atf with ${{ matrix.sanitize }} .. ${CFG_OPTS}
98+
echo uname -a: $(uname -a)
99+
echo uname -m: $(uname -m)
100+
echo uname -p: $(uname -p)
101+
kyua about | head -1
102+
echo NPROC="${NPROC}"
103+
echo CC="${CC}"
104+
echo CPP="${CPP}"
105+
echo PKG_CONFIG_PATH="${PKG_CONFIG_PATH}"
106+
echo SRC_ATF="${SRC_ATF}"
107+
echo BUILD_ATF="${BUILD_ATF}"
108+
echo INST_ATF="${INST_ATF}"
109+
110+
cd "${SRC_ATF}"
111+
autoreconf -isv -I/usr/local/share/aclocal
112+
113+
mkdir -p "${BUILD_ATF}"
114+
cd "${BUILD_ATF}"
115+
${SRC_ATF}/configure ${CFG_OPTS}
116+
make -j${NPROC} | tee make-all.log
117+
118+
- name: install&check atf
119+
run: |
120+
set +e
121+
echo Installing and Checking atf
122+
cd "${BUILD_ATF}"
123+
make install installcheck-kyua
124+
check_exit=$?
125+
126+
cd "${INST_ATF}/tests/atf"
127+
if [ $check_exit -eq 0 ]; then
128+
echo "# ✅ All mandatory checks passed" >> $GITHUB_STEP_SUMMARY
129+
# kyua report
130+
else
131+
echo "# ❌ Some checks failed" >> $GITHUB_STEP_SUMMARY
132+
echo "::error file=.github/workflows/build.yaml,line=173,endLine=173,title=Checks failed!::make check failed"
133+
# kyua report --verbose
134+
fi
135+
136+
# example run with tweaks
137+
# running one test directly without overriding exitcode and not logging to stderr
138+
ASAN_OPTIONS=exitcode=0:log_path=$PWD/testlog kyua debug atf-c++/atf_c++_test:include
139+
cat testlog.*
140+
141+
kyua report --results-filter=xfail,broken,failed | sed 's/===>/##/' >> $GITHUB_STEP_SUMMARY
142+
if [ $check_exit -ne 0 ]; then
143+
kyua report --verbose --results-filter=xfail,broken,failed | sed 's/===>/##/' >> $GITHUB_STEP_SUMMARY
144+
fi
145+
146+
kyua report-html --output ${BUILD_ATF}/html # produces html subdirectory
147+
# also include plain text
148+
kyua report --verbose --results-filter=xfail,broken,failed > ${BUILD_ATF}/html/test-reportfailed.txt
149+
# also include plain JUnit
150+
kyua report-junit --output ${BUILD_ATF}/html/test-reportfailed.xml
151+
# also include the kyua log
152+
cp -a ~/.kyua/logs ${BUILD_ATF}/html/
153+
154+
exit $check_exit
155+
156+
- name: tar install archive
157+
run: |
158+
test -d ${INST_ATF} && tar cvf atf-${{ matrix.build-os }}-${{ matrix.compiler }}.tar -C ${INST_ATF} .
159+
if: ${{ success() && '' == join(matrix.sanitize, '') }} # only install successful non-debug builds
160+
161+
- name: tar test reports
162+
run: |
163+
tar cvf atf-${{ matrix.build-os }}-${{ matrix.compiler }}-report${{ join(matrix.sanitize, '_') }}.tar -C "${BUILD_ATF}/html" .
164+
if: ${{ always() }}
165+
166+
- name: archive build artefacts
167+
uses: actions/upload-artifact@v4
168+
with:
169+
name: atf-test${{ join(matrix.sanitize, '_') }}-${{ matrix.build-os }}-${{ matrix.compiler }}
170+
path: atf*.tar
171+
compression-level: 0
172+
retention-days: 10
173+
overwrite: true
174+
if: ${{ always() }}

0 commit comments

Comments
 (0)