# Copyright (c) 2023 Sebastian Pipping # Licensed under GPL v2 or later name: Build and test on: pull_request: push: schedule: - cron: '0 3 * * 5' # Every Friday at 3am workflow_dispatch: jobs: linux: name: Build and test (${{ matrix.cc }} on ${{ matrix.runs-on }}) runs-on: ${{ matrix.runs-on }} strategy: fail-fast: false matrix: include: - cc: gcc-13 cxx: g++-13 clang_major_version: null clang_repo_suffix: null runs-on: ubuntu-22.04 - cc: clang-17 cxx: clang++-17 clang_major_version: 17 clang_repo_suffix: -17 runs-on: ubuntu-22.04 - cc: clang-18 cxx: clang++-18 clang_major_version: 18 clang_repo_suffix: runs-on: ubuntu-22.04 steps: - name: Add Clang/LLVM repositories if: "${{ contains(matrix.cxx, 'clang') }}" run: |- set -x source /etc/os-release wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo add-apt-repository "deb http://apt.llvm.org/${UBUNTU_CODENAME}/ llvm-toolchain-${UBUNTU_CODENAME}${{ matrix.clang_repo_suffix }} main" - name: Install build dependencies run: |- sudo apt-get update sudo apt-get install --yes --no-install-recommends \ autoconf \ automake \ libfuse3-dev \ libtool \ pkg-config - name: Install build dependency Clang ${{ matrix.clang_major_version }} if: "${{ contains(matrix.cxx, 'clang') }}" run: |- sudo apt-get install --yes --no-install-recommends -V \ clang-${{ matrix.clang_major_version }} - name: Checkout Git branch uses: actions/checkout@v4 - name: 'Bootstrap with ./autogen.sh' run: |- ./autogen.sh - name: 'Configure' env: CFLAGS: -Werror run: |- set -x ./configure - name: 'Build' run: |- set -x make -j$(nproc) VERBOSE=1 - name: 'Test as non-root' run: |- set -x whoami make check - name: 'Test as root' run: |- set -x sudo make check - name: 'Install' run: |- set -x -o pipefail make install DESTDIR="${PWD}"/ROOT/ find ROOT/ | sort | xargs ls -ld vagrant: name: Run Vagrant tests runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: # TODO: automatically check that this list is up-to-date box: - centos8 - debian10 - debian11 #- freebsd12 # https://github.com/mpartel/bindfs/issues/144#issuecomment-1807258383 - ubuntu1804 - ubuntu2004 - ubuntu2204 steps: - name: Install dependencies run: |- set -x for FILE in /etc/apt/sources.list /etc/apt/sources.list.d/*; do if [[ -e "${FILE}" ]]; then sudo sed -i 's/# deb-src /deb-src /' "${FILE}" fi done # The following is based on these instructions: # https://developer.hashicorp.com/vagrant/install?product_intent=vagrant # https://vagrant-libvirt.github.io/vagrant-libvirt/installation.html wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt-get update sudo apt-get build-dep vagrant ruby-libvirt sudo apt-get install -y vagrant \ qemu-system-x86 \ autoconf automake libtool pkg-config \ qemu libvirt-daemon-system ebtables libguestfs-tools \ libxslt-dev libxml2-dev zlib1g-dev ruby-dev vagrant plugin install vagrant-libvirt sudo adduser "${USER}" libvirt - name: Checkout Git branch uses: actions/checkout@v4 - name: 'Generate build files with ./autogen.sh' run: |- ./autogen.sh - name: Check for KVM run: |- if [[ -e /dev/kvm ]]; then echo "This GitHub Action runner has KVM. This run will be fast." else echo "This GitHub Action runner does NOT have KVM. This run will be slow." fi - name: Test with Vagrant box ${{ matrix.box }} env: VAGRANT_DEFAULT_PROVIDER: libvirt run: |- # sudo needed because the current shell is not yet in group "libvirt" # https://github.com/actions/runner-images/discussions/5981 sudo -E -s -u "${USER}" vagrant/test.rb --print-logs ${{ matrix.box }}