Skip to content

WIP: Enable a github actions build #53

WIP: Enable a github actions build

WIP: Enable a github actions build #53

Workflow file for this run

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.head_ref }} || concat(${{ github.ref }}
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
DEBUG: 1
# Useful URL: https://github.com/mate-desktop/debian-packages
# Useful URL: https://salsa.debian.org/debian-mate-team/mate-panel
DEB_LIBRARY_DEPS: |
libatk1.0-dev
libcairo2-dev
libdconf-dev
libgirepository1.0-dev
libglib2.0-dev
libgtk-3-dev
libgtk-layer-shell-dev
libice-dev
libmate-desktop-dev
libmate-menu-dev
libmateweather-dev
libpango1.0-dev
libsm-dev
libsoup2.4-dev
libwnck-3-dev
libx11-dev
libxrandr-dev
# mate-desktop dependencies
DEB_LIBRARY_DEPS_MATE_DESKTOP: |
libgirepository1.0-dev
DEB_BUILD_DEPS: |
ccache
autoconf-archive
autopoint
gir1.2-freedesktop
git
gobject-introspection
gtk-doc-tools
lsb-release
make
mate-common
meson
yelp-tools
# mate-desktop dependencies
DEB_BUILD_DEPS_MATE_DESKTOP: |
iso-codes
gobject-introspection
# TODO
DEB_SCAN_BUILD_DEPS: |
clang
clang-tools
# Useful URL: https://git.archlinux.org/svntogit/community.git/tree/mate-panel
ARCH_BUILD_DEPS: |
ccache
autoconf-archive
clang
gcc
git
gobject-introspection
gtk-layer-shell
itstool
libcanberra
libmateweather
libsm
libwnck3
make
mate-common
mate-desktop
mate-menus
meson
which
yelp-tools
# mate-desktop dependencies
ARCH_BUILD_DEPS_MATE_DESKTOP: |
iso-codes
gobject-introspection
jobs:
build:
name: Build on ${{matrix.container}} with in-process=${{matrix.in-process}} (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:
in-process: [all, none]
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++'
in-process: all
- container: 'archlinux:latest'
cc: 'clang'
cxx: 'clang++'
in-process: none
env:
# Speed up build with ccache
CC: ccache ${{matrix.cc}}
CXX: ccache ${{matrix.cxx}}
# root install path for the mate-desktop dependency
MATE_DESKTOP_INSTALL_PATH: ${{github.workspace}}/mate-desktop-install
steps:
# We can't *extend* the environment in 'env' directly, so use GITHUB_ENV
# output variable to do so.
- name: Setup environment
run: |
echo "PATH=${MATE_DESKTOP_INSTALL_PATH}/bin:${PATH}" >> "$GITHUB_ENV"
echo "PKG_CONFIG_PATH=${MATE_DESKTOP_INSTALL_PATH}/lib/pkgconfig:${PKG_CONFIG_PATH}" >> "$GITHUB_ENV"
# Debugging
- name: Show environment
run: env | sort
if: ${{ env.DEBUG == '1' }}
# 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_BUILD_DEPS_MATE_DESKTOP} \
${DEB_LIBRARY_DEPS} ${DEB_LIBRARY_DEPS_MATE_DESKTOP}
# 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} ${ARCH_BUILD_DEPS_MATE_DESKTOP}
# Checkout the repository
- uses: actions/checkout@v3
with:
path: mate-panel
submodules: true
# Setup ccache cache
- name: ccache
uses: hendrikmuhs/[email protected]
# Cache the build of the mate-desktop dependency
- name: Cache mate-desktop v${{env.MATE_PANEL_DEP}} dependency
uses: actions/cache@v3
id: cache-mate-desktop
with:
path: ${{env.MATE_DESKTOP_INSTALL_PATH}}
# We try and be as specific as possible not to use the wrongly cached
# build, as this is a *binary*.
key: ${{runner.os}}-${{runner.arch}}-${{matrix.container}}-build-mate-desktop-${{env.MATE_PANEL_DEP}}
# Checkout mate-desktop dep, if not already cached
- name: Checkout mate-desktop v${{env.MATE_PANEL_DEP}}
uses: actions/checkout@v3
if: ${{ steps.cache-mate-desktop.outputs.cache-hit != 'true' }}
with:
repository: mate-desktop/mate-desktop
ref: v${{env.MATE_PANEL_DEP}}
path: mate-desktop
submodules: true
# Build and install mate-desktop dep, if not already cached
- name: Install mate-desktop v${{env.MATE_PANEL_DEP}}
if: ${{ steps.cache-mate-desktop.outputs.cache-hit != 'true' }}
run: |
cd mate-desktop
NOCONFIGURE=1 ./autogen.sh
{ ./configure --prefix="${MATE_DESKTOP_INSTALL_PATH}" || { cat config.log; exit 1; } ; }
make -j ${{ env.JOBS }}
make -j ${{ env.JOBS }} install
# Follows regular mate-panel build and test steps
- name: Configure
run: |
cd mate-panel
NOCONFIGURE=1 ./autogen.sh
{ ./configure ${CONFIGURE_FLAGS} --with-in-process-applets=${{matrix.in-process}} || { cat config.log; exit 1; } ; }
- name: Build
run: make -C mate-panel -j ${{ env.JOBS }}
- name: Run Tests
run: make -C mate-panel -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 mate-panel -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
container: 'ubuntu:rolling'
steps:
# 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 \
git cppcheck ${DEB_LIBRARY_DEPS} ${DEB_LIBRARY_DEPS_MATE_DESKTOP}
- uses: actions/checkout@v3
with:
submodules: true
# - ignore non-source directories
# - define relevant configuration I can think of
# - X11-related stuff
# - Wayland-related stuff
# - in-process for Wayland
# - optional features
# - -I flags from pkg-config (grepped from configure.ac)
- name: cppcheck
env:
checks: warning,style,performance,portability,information,missingInclude
defines: >
-DHAVE_X11 -DHAVE_RANDR
-DHAVE_WAYLAND
-DCLOCK_INPROCESS -DFISH_INPROCESS -DNOTIFICATION_AREA_INPROCESS -DWNCKLET_INPROCESS
-DHAVE_WINDOW_PREVIEWS
packages: >
gdk-pixbuf-2.0
gio-unix-2.0
gmodule-2.0
gtk+-3.0
ice
libwnck-3.0
mate-desktop-2.0
sm
run: |
cppcheck --enable=${{env.checks}} \
-j ${{env.JOBS}} \
${{env.defines}} \
$(pkg-config --cflags-only-I ${{env.packages}}) \
-i gtk-layer-shell-build \
-i mate-panel/mate-submodules/ \
.