name: CI Build on: push: branches: - master pull_request: branches: - master workflow_dispatch: # cancel already running builds of the same branch or pull request concurrency: group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.head_ref || github.sha }} cancel-in-progress: true env: MATE_PANEL_DEP: 1.27.1 CONFIGURE_FLAGS: --enable-compile-warnings=maximum CFLAGS: -g -O2 -Werror=pointer-arith -Werror=implicit-function-declaration JOBS: 2 # Useful URL: https://github.com/mate-desktop/debian-packages # Useful URL: https://salsa.debian.org/debian-mate-team/mate-panel DEB_LIBRARY_DEPS: | libcaja-extension-dev libglib2.0-dev libgtk-3-dev libjson-glib-dev libmagic-dev DEB_BUILD_DEPS: | ccache autoconf-archive autopoint git gettext make mate-common yelp-tools # Useful URL: https://git.archlinux.org/svntogit/community.git/tree/mate-panel ARCH_BUILD_DEPS: | ccache autoconf-archive caja clang file gcc git glib2-devel gtk3 json-glib make mate-common which yelp-tools jobs: build: name: Build on ${{matrix.container}} (using ${{matrix.cc}}) runs-on: ubuntu-latest container: ${{matrix.container}} strategy: fail-fast: false # don't cancel other jobs in the matrix if one fails matrix: container: ['debian:testing', 'ubuntu:rolling', 'archlinux:latest'] cc: ['gcc'] cxx: ['g++'] include: # test with clang on archlinux:latest - container: 'archlinux:latest' cc: 'clang' cxx: 'clang++' env: # Speed up build with ccache CC: ccache ${{matrix.cc}} CXX: ccache ${{matrix.cxx}} steps: # For Debian and Ubuntu (apt-based with reasonably compatible packages) - name: Install dependencies if: ${{ startsWith(matrix.container, 'debian:') || startsWith(matrix.container, 'ubuntu:') }} run: | apt-get update -qq apt-get install --assume-yes --no-install-recommends \ ${DEB_BUILD_DEPS} ${DEB_LIBRARY_DEPS} # For ArchLinux - name: Install dependencies if: ${{ startsWith(matrix.container, 'archlinux:') }} # don't upgrade, although told otherwise (see link below), because # apparently in the container it doesn't quit work... # https://wiki.archlinux.org/title/System_maintenance#Partial_upgrades_are_unsupported run: | pacman --noconfirm -Syu pacman --noconfirm -S ${ARCH_BUILD_DEPS} # Checkout the repository - uses: actions/checkout@v3 with: path: engrampa submodules: true # Setup ccache cache - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: ${{ matrix.container }}-${{ matrix.cc }} # Follows regular build and test steps - name: Configure run: | cd engrampa NOCONFIGURE=1 ./autogen.sh { ./configure ${CONFIGURE_FLAGS} || { cat config.log; exit 1; } ; } - name: Build run: make -C engrampa -j ${{ env.JOBS }} - name: Run Tests run: make -C engrampa -j ${{ env.JOBS }} check - name: Run distcheck # We only run distcheck on one container, because it takes time and # doesn't seem so useful to repeat everywhere -- it mostly checks the # build system itself, rather than the build. if: ${{ startsWith(matrix.container, 'debian:') }} run: make -C engrampa -j ${{ env.JOBS }} distcheck # Do we need the real build for cppcheck run? I don't think so cppcheck: name: Run cppcheck runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: true # Install code dependencies so that cppcheck has more info - name: Install dependencies run: | sudo apt-get update -qq sudo apt-get install --assume-yes --no-install-recommends \ cppcheck ${DEB_LIBRARY_DEPS} # - define relevant configuration I can think of # - _Noreturn: this is to avoid false positive with functions that # don't return, like g_assert(false). Here, we rely on G_NORETURN # (GLib 2.68+) using _Noreturn C11 attribute if __STDC_VERSION__ is # high enough (cppcheck sets it for us in newer versions, but not on # here yet); but the version of cppcheck we run on don't know about # the C11 attribute, so map it to the GCC one it does know. # This is a tad over-specific, but it removes some spurious warnings, # and defining e.g. __GNUC__=12 is simpler, but is a *lot* slower # (more than 3 times slower), and doesn't seem to yield other # benefits for the moment. # - -I flags from pkg-config (grepped from configure.ac) # - ignore non-source directories - name: cppcheck env: checks: warning,style,performance,portability,information,missingInclude defines: > -DGETTEXT_PACKAGE="engrampa" -D__STDC_VERSION__=201112 -D_Noreturn=__attribute__((__noreturn__)) packages: > gio-2.0 gio-unix-2.0 gtk+-3.0 ice json-glib-1.0 libcaja-extension sm run: | cppcheck --enable="$checks" \ -j $JOBS \ $defines \ $(pkg-config --cflags-only-I $packages) \ -i engrampa/mate-submodules/ \ .