Skip to content

[ci] Add job run under ubsan and memsan #110

[ci] Add job run under ubsan and memsan

[ci] Add job run under ubsan and memsan #110

Workflow file for this run

name: CI
# Controls when the workflow will run
on:
# Triggers the workflow on push, or for pull requests against master
push:
paths-ignore:
- NEWS
pull_request:
branches: [ master ]
paths-ignore:
- NEWS
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
linux:
runs-on: 'ubuntu-20.04'
steps:
- name: Check out repository code
uses: actions/checkout@v4
with:
show-progress: false
- name: Install CCache
uses: hendrikmuhs/ccache-action@v1
with:
key: ${{ github.job }}
- name: Install package dependencies
run: |
sudo apt-get update
sudo apt-get install \
gettext \
libwxgtk3.0-gtk3-dev \
libavcodec-dev \
libavformat-dev \
libproj-dev \
libswscale-dev \
mesa-common-dev \
libglu1-mesa-dev \
libx11-dev \
libxext-dev \
ghostscript \
netpbm \
x11proto-core-dev \
liblocale-po-perl \
unifont \
docbook \
docbook-utils \
w3m
- name: bootstrap source tree
run: |
autoreconf -fiv
git checkout INSTALL
- name: configure
run: ./configure CC='ccache gcc' CXX='ccache g++'
- name: make
run: make -j2
- name: Run tests
run: make check VERBOSE=1
- name: Check generated files are in .gitignore
# grep '^' passes through all input while giving a non-zero exit status
# if that input is empty.
run: |
printf '%s\n' .ccache > ".git/info/exclude"
git status --porcelain|grep '^' && { echo "The generated files listed above are not in .gitignore" ; exit 1; }; true
valgrind:
runs-on: 'ubuntu-20.04'
steps:
- name: Check out repository code
uses: actions/checkout@v4
with:
show-progress: false
- name: Install CCache
uses: hendrikmuhs/ccache-action@v1
with:
key: ${{ github.job }}
- name: Install package dependencies
run: |
sudo apt-get update
sudo apt-get install \
gettext \
libwxgtk3.0-gtk3-dev \
libavcodec-dev \
libavformat-dev \
libproj-dev \
libswscale-dev \
mesa-common-dev \
libglu1-mesa-dev \
libx11-dev \
libxext-dev \
ghostscript \
netpbm \
x11proto-core-dev \
liblocale-po-perl \
unifont \
docbook \
docbook-utils \
w3m
sudo apt-get install valgrind
- name: bootstrap source tree
run: |
autoreconf -fiv
git checkout INSTALL
- name: configure
run: ./configure CC='ccache gcc' CXX='ccache g++'
- name: make
run: make -j2
- name: Run tests
run: VALGRIND=valgrind make check VERBOSE=1
- name: Check generated files are in .gitignore
# grep '^' passes through all input while giving a non-zero exit status
# if that input is empty.
run: |
printf '%s\n' .ccache > ".git/info/exclude"
git status --porcelain|grep '^' && { echo "The generated files listed above are not in .gitignore" ; exit 1; }; true
# Debian stable has wxWidgets 3.2.
debian-stable:
runs-on: 'ubuntu-latest'
container: debian:stable
steps:
- name: Check out repository code
uses: actions/checkout@v4
with:
show-progress: false
- name: Install package dependencies
run: |
apt-get update
apt-get install -y \
autoconf \
automake \
gettext \
libwxgtk3.2-dev \
libavcodec-dev \
libavformat-dev \
libproj-dev \
libswscale-dev \
mesa-common-dev \
libglu1-mesa-dev \
libx11-dev \
libxext-dev \
ghostscript \
netpbm \
x11proto-core-dev \
liblocale-po-perl \
unifont \
docbook \
docbook-utils \
w3m
- name: Install CCache
uses: hendrikmuhs/ccache-action@v1
with:
key: ${{ github.job }}
- name: bootstrap source tree
run: |
autoreconf -fiv
git checkout INSTALL
- name: configure
run: ./configure CC='ccache gcc' CXX='ccache g++'
- name: make
run: make -j2
- name: Run tests
run: make check VERBOSE=1
- name: Check generated files are in .gitignore
# grep '^' passes through all input while giving a non-zero exit status
# if that input is empty.
run: |
printf '%s\n' .ccache > ".git/info/exclude"
git status --porcelain|grep '^' && { echo "The generated files listed above are not in .gitignore" ; exit 1; }; true
clang-sanitisiers:
runs-on: 'ubuntu-latest'
steps:
- name: Check out repository code
uses: actions/checkout@v4
with:
show-progress: false
- name: Install CCache
uses: hendrikmuhs/ccache-action@v1
with:
key: ${{ github.job }}
- name: Install package dependencies
run: |
sudo apt-get update
sudo apt-get install \
gettext \
libwxgtk3.0-gtk3-dev \
libavcodec-dev \
libavformat-dev \
libproj-dev \
libswscale-dev \
mesa-common-dev \
libglu1-mesa-dev \
libx11-dev \
libxext-dev \
ghostscript \
netpbm \
x11proto-core-dev \
liblocale-po-perl \
unifont \
docbook \
docbook-utils \
w3m
- name: bootstrap source tree
run: |
autoreconf -fiv
git checkout INSTALL
- name: configure
run: |
# We use clang here because (at least currently) it supports a few
# extra sanitiser checks compared to GCC.
export CC='ccache clang'
export CXX='ccache clang++'
# float-divide-by-zero, nullability and unsigned-overflow aren't
# undefined behaviour checks, but they catch for things we don't expect
# our code to do.
export CFLAGS='-fsanitize=address,undefined,float-divide-by-zero,local-bounds,nullability,unsigned-integer-overflow -fsanitize-address-use-after-scope -fsanitize-recover=all -g -O2 -fno-omit-frame-pointer'
export CXXFLAGS='-fsanitize=address,undefined,float-divide-by-zero,local-bounds,nullability,unsigned-integer-overflow -fsanitize-address-use-after-scope -fsanitize-recover=all -g -O2 -fno-omit-frame-pointer'
./configure
- name: make
run: make -j2
- name: Run tests
run: make check VERBOSE=1
- name: Check generated files are in .gitignore
# grep '^' passes through all input while giving a non-zero exit status
# if that input is empty.
run: |
printf '%s\n' .ccache > ".git/info/exclude"
git status --porcelain|grep '^' && { echo "The generated files listed above are not in .gitignore" ; exit 1; }; true
linux-latest:
runs-on: 'ubuntu-latest'
steps:
- name: Check out repository code
uses: actions/checkout@v4
with:
show-progress: false
- name: Install CCache
uses: hendrikmuhs/ccache-action@v1
with:
key: ${{ github.job }}
- name: Install package dependencies
run: |
more /etc/apt/sources.list /etc/apt/sources.list.d/*|cat
sudo apt-get update
sudo apt-get purge mysql-client mysql-server
sudo apt-get dist-upgrade
sudo apt-get install update-manager libio-pty-perl
# `do-release-upgrade` fails (trying to run `screen` it seems) if stdin
# isn't a tty so fake one for it using the Perl IO::Pty module.
perl -ne '/use blib|clone_winsize_from/ or print' /usr/share/doc/libio-pty-perl/examples/try > $HOME/try
# Run in home directory so logs, etc don't end up in source tree.
cd "$HOME" && perl ./try sudo do-release-upgrade -d --mode=server
sudo apt-get install \
gettext \
libwxgtk3.0-gtk3-dev \
libavcodec-dev \
libavformat-dev \
libproj-dev \
libswscale-dev \
mesa-common-dev \
libglu1-mesa-dev \
libx11-dev \
libxext-dev \
ghostscript \
netpbm \
x11proto-core-dev \
liblocale-po-perl \
unifont \
docbook \
docbook-utils \
w3m
- name: bootstrap source tree
run: |
autoreconf -fiv
git checkout INSTALL
- name: configure
run: ./configure CC='ccache gcc' CXX='ccache g++'
- name: make
run: make -j2
- name: Run tests
run: make check VERBOSE=1
- name: Check generated files are in .gitignore
# grep '^' passes through all input while giving a non-zero exit status
# if that input is empty.
run: |
printf '%s\n' .ccache > ".git/info/exclude"
git status --porcelain|grep '^' && { echo "The generated files listed above are not in .gitignore" ; exit 1; }; true
macos:
runs-on: 'macos-latest'
steps:
- name: Check out repository code
uses: actions/checkout@v4
with:
show-progress: false
- name: Install CCache
uses: hendrikmuhs/ccache-action@v1
with:
key: ${{ github.job }}
- name: Install package dependencies
run: |
# Workaround apparent homebrew bug 2024-03-05
rm -f /usr/local/bin/2to3-3.* /usr/local/bin/idle3.* /usr/local/bin/pydoc3.* /usr/local/bin/python3.* /usr/local/bin/python3.*-config
rm -f /usr/local/bin/2to3 /usr/local/bin/idle3 /usr/local/bin/pydoc3 /usr/local/bin/python3 /usr/local/bin/python3-config
brew update
brew install \
automake \
ffmpeg \
gettext \
gnu-tar \
netpbm \
proj \
wxwidgets
brew link --force gettext
cpan -T -i local::lib < /dev/null
cpan -I -T -i Locale::PO < /dev/null
- name: bootstrap source tree
run: |
autoreconf -fiv
git checkout INSTALL
V=`sed -e 's/^AC_INIT[^,]*, *\[\([^]]*\)\].*/\1/p;d' configure.ac` ; curl https://survex.com/software/$V/survex-$V.tar.gz | gtar --strip-components=1 --skip-old-files --wildcards -zxf - '*/lib' '*/doc'; ls -lrt lib ; touch lib/unifont.pixelfont lib/preload_font.h; echo ; ls -lrt doc; touch doc/*.1 doc/manual.txt doc/manual.pdf doc/manual/stampfile
- name: configure
run: ./configure CC='ccache gcc' CXX='ccache g++'
- name: make
run: |
eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
make -j3
- name: Run tests
run: make check VERBOSE=1
- name: Check generated files are in .gitignore
# grep '^' passes through all input while giving a non-zero exit status
# if that input is empty.
run: |
printf '%s\n' .ccache > ".git/info/exclude"
git status --porcelain|grep '^' && { echo "The generated files listed above are not in .gitignore" ; exit 1; }; true