diff options
Diffstat (limited to '.github')
-rw-r--r-- | .github/workflows/linux.yml | 95 | ||||
-rw-r--r-- | .github/workflows/tests.yml | 159 |
2 files changed, 159 insertions, 95 deletions
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml deleted file mode 100644 index cef2939..0000000 --- a/.github/workflows/linux.yml +++ /dev/null @@ -1,95 +0,0 @@ -# Copyright (c) 2023 Sebastian Pipping <sebastian@pipping.org> -# Licensed under GPL v2 or later - -name: Build on Linux - -on: - pull_request: - push: - schedule: - - cron: '0 3 * * 5' # Every Friday at 3am - workflow_dispatch: - -jobs: - linux: - name: Build (${{ 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 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..c7a3317 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,159 @@ +# Copyright (c) 2023 Sebastian Pipping <sebastian@pipping.org> +# 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 }} |