CI @ devshell #285
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
name: CI @ devshell | |
on: | |
pull_request: | |
push: | |
schedule: | |
- cron: '00 21 * * *' | |
jobs: | |
general: | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/syslog-ng/dbld-devshell:latest | |
options: --privileged --ulimit core=-1 | |
strategy: | |
matrix: | |
build-tool: [autotools, cmake] | |
cc: [gcc, clang] | |
fail-fast: false | |
steps: | |
- name: Checkout syslog-ng source | |
uses: actions/[email protected] | |
- name: Setup Git safedir | |
run: git config --global --add safe.directory "${GITHUB_WORKSPACE}" | |
- name: Setup environment | |
run: | | |
. .github/workflows/gh-tools.sh | |
# Setup corefiles | |
ulimit -c unlimited | |
COREFILES_DIR=/tmp/corefiles | |
mkdir ${COREFILES_DIR} | |
echo "${COREFILES_DIR}/core.%h.%e.%t" > /proc/sys/kernel/core_pattern | |
# Setup build time environment variables | |
PYTHONUSERBASE="${HOME}/python_packages" | |
CC="${{ matrix.cc }}" | |
CXX=`[ $CC = gcc ] && echo g++ || echo clang++` | |
CFLAGS="-Werror -Wno-unused-command-line-argument" | |
CXXFLAGS="${CFLAGS}" | |
SYSLOG_NG_INSTALL_DIR=${HOME}/install/syslog-ng | |
CONFIGURE_FLAGS=" | |
`[ $CC = clang ] && echo '--enable-force-gnu99' || true` | |
--enable-extra-warnings | |
--enable-debug | |
--prefix=${SYSLOG_NG_INSTALL_DIR} | |
--enable-tests | |
--enable-all-modules | |
--with-python=3 | |
--with-ivykis=internal | |
--disable-java | |
--disable-java-modules | |
--enable-ebpf | |
" | |
CMAKE_CONFIGURE_FLAGS=" | |
`[ $CC = clang ] && echo '-DENABLE_FORCE_GNU99=ON' || true` | |
-DSUMMARY_VERBOSE=ON | |
-DCMAKE_BUILD_TYPE=Debug | |
-DCMAKE_INSTALL_PREFIX=${SYSLOG_NG_INSTALL_DIR} | |
-DBUILD_TESTING=ON | |
-DPYTHON_VERSION=3 | |
-DIVYKIS_SOURCE=internal | |
-DENABLE_JAVA=OFF | |
-DENABLE_JAVA_MODULES=OFF | |
-DENABLE_EBPF=ON | |
" | |
gh_export COREFILES_DIR PYTHONUSERBASE CC CXX SYSLOG_NG_INSTALL_DIR CFLAGS CXXFLAGS CONFIGURE_FLAGS CMAKE_CONFIGURE_FLAGS | |
gh_path "${PYTHONUSERBASE}" | |
- name: autogen.sh | |
if: matrix.build-tool == 'autotools' | |
run: ./autogen.sh | |
- name: configure | |
if: matrix.build-tool == 'autotools' | |
run: | | |
mkdir build | |
cd build | |
../configure ${CONFIGURE_FLAGS} | |
- name: cmake | |
if: matrix.build-tool == 'cmake' | |
run: | | |
mkdir build | |
cd build | |
cmake ${CMAKE_CONFIGURE_FLAGS} .. | |
- name: make | |
working-directory: ./build | |
run: make V=1 -j $(nproc) | |
- name: make check | |
id: make_check | |
working-directory: ./build | |
run: make V=1 check || (mkdir -p ${COREFILES_DIR} && find . -executable -a -type f | tar -cf ${COREFILES_DIR}/test-binaries.tar --files-from=- && cat test-suite.log && false) | |
- name: make install | |
working-directory: ./build | |
run: | | |
make install | |
"${SYSLOG_NG_INSTALL_DIR}/sbin/syslog-ng" -V | |
- name: Python virtualenv for syslog-ng runtime | |
run: ${SYSLOG_NG_INSTALL_DIR}/bin/syslog-ng-update-virtualenv -y | |
- name: Light | |
id: light | |
working-directory: ./build | |
run: | | |
make light-self-check | |
make light-check | |
- name: make func-test | |
working-directory: ./build | |
run: make VERBOSE=1 func-test | |
- name: "Artifact: test-suite.log" | |
uses: actions/[email protected] | |
if: always() && steps.make_check.outcome == 'failure' | |
with: | |
name: test-suite-${{ matrix.build-tool }}-${{ matrix.cc }} | |
path: ${{ github.workspace }}/build/test-suite.log | |
- name: "Prepare artifact: light-reports" | |
id: prepare-light-reports | |
if: always() && steps.light.outcome == 'failure' | |
run: | | |
REPORTS_DIR=tests/light/reports | |
cp -r ${REPORTS_DIR} /tmp/light-reports | |
find /tmp/light-reports -type p,s -print0 | xargs -0 rm -f | |
tar -cz -f /tmp/light-reports.tar.gz /tmp/light-reports | |
- name: "Artifact: light-reports" | |
uses: actions/[email protected] | |
if: always() && steps.prepare-light-reports.outcome == 'success' | |
with: | |
name: light-reports-${{ matrix.build-tool }}-${{ matrix.cc }} | |
path: /tmp/light-reports.tar.gz | |
- name: Dump corefile backtrace | |
working-directory: ${{ env.COREFILES_DIR }} | |
if: failure() | |
run: | | |
find -name "core.*syslog-ng*" -exec \ | |
gdb --ex="thread apply all bt full" --ex="quit" ${SYSLOG_NG_INSTALL_DIR}/sbin/syslog-ng --core {} \; | |
- name: "Artifact: corefiles" | |
uses: actions/[email protected] | |
if: failure() | |
with: | |
name: corefiles-${{ matrix.build-tool }}-${{ matrix.cc }} | |
path: ${{ env.COREFILES_DIR }} | |
distcheck: | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/syslog-ng/dbld-devshell:latest | |
options: --security-opt seccomp=unconfined --ulimit core=-1 | |
steps: | |
- name: Checkout syslog-ng source | |
uses: actions/[email protected] | |
- name: Setup Git safedir | |
run: git config --global --add safe.directory "${GITHUB_WORKSPACE}" | |
- name: Set ENV variables | |
run: | | |
. .github/workflows/gh-tools.sh | |
DISTCHECK_CONFIGURE_FLAGS=" | |
CFLAGS=-Werror | |
CXXFLAGS=-Werror | |
--prefix=${HOME}/install/syslog-ng | |
--with-ivykis=internal | |
--with-jsonc=system | |
--enable-tcp-wrapper | |
--enable-linux-caps | |
--enable-manpages | |
--enable-all-modules | |
--disable-java | |
--disable-java-modules | |
--with-python=3 | |
" | |
gh_export DISTCHECK_CONFIGURE_FLAGS | |
- name: autogen.sh | |
run: ./autogen.sh | |
- name: configure | |
run: ./configure --disable-all-modules --enable-manpages | |
- name: distcheck | |
run: | | |
. tests/build-log-cflags-propagation.sh | |
exec_prop_check "make distcheck -j 3 V=1" | |
style-check: | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/syslog-ng/dbld-devshell:latest | |
steps: | |
- name: Checkout syslog-ng source | |
uses: actions/[email protected] | |
- name: Setup Git safedir | |
run: git config --global --add safe.directory "${GITHUB_WORKSPACE}" | |
- name: Prepare | |
run: | | |
./autogen.sh | |
mkdir build && cd build | |
../configure | |
- name: Style check (C) | |
id: c-style-check | |
run: | | |
scripts/style-checker.sh format | |
git diff --exit-code > c-style-problems.diff || \ | |
(cat c-style-problems.diff && git reset --hard HEAD && exit 1) | |
- name: Style check (pylib) | |
if: always() | |
working-directory: ./build | |
run: | | |
make pymodules-linters || (git reset --hard HEAD && exit 1) | |
- name: Style check (Light) | |
id: light-style-check | |
if: always() | |
working-directory: ./build | |
shell: bash | |
run: | | |
make light-linters || \ | |
(git diff > ../light-style-problems.diff ; git reset --hard HEAD && exit 1) | |
- name: "Artifact: c-style-problems" | |
uses: actions/[email protected] | |
if: always() && steps.c-style-check.outcome == 'failure' | |
with: | |
name: c-style-problems | |
path: c-style-problems.diff | |
- name: "Artifact: light-style-problems" | |
uses: actions/[email protected] | |
if: always() && steps.light-style-check.outcome == 'failure' | |
with: | |
name: light-style-problems | |
path: light-style-problems.diff | |
copyright-check: | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/syslog-ng/dbld-devshell:latest | |
env: | |
COPYRIGHTVERBOSITY: 1 | |
steps: | |
- name: Checkout syslog-ng source | |
uses: actions/[email protected] | |
- name: Setup Git safedir | |
run: git config --global --add safe.directory "${GITHUB_WORKSPACE}" | |
- name: Copyright check | |
run: tests/copyright/check.sh . . | |
- name: "Artifact: copyright-run.log" | |
uses: actions/[email protected] | |
if: failure() | |
with: | |
name: copyright-run.log | |
path: copyright-run.log | |
commits-check: | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/syslog-ng/dbld-devshell:latest | |
steps: | |
- name: Checkout syslog-ng source | |
uses: actions/[email protected] | |
with: | |
fetch-depth: 0 | |
- name: Setup Git safedir | |
run: git config --global --add safe.directory "${GITHUB_WORKSPACE}" | |
- name: Commits check (Pull request) | |
if: github.event_name == 'pull_request' | |
run: tests/commits/check.sh origin/${{ github.base_ref }}..HEAD | |
- name: Commits check (Push) | |
if: github.event_name == 'push' | |
run: tests/commits/check.sh |