diff options
author | Martin Pärtel <martin.partel@gmail.com> | 2023-11-12 20:43:24 +0200 |
---|---|---|
committer | Martin Pärtel <martin.partel@gmail.com> | 2023-11-19 21:30:18 +0200 |
commit | bea88937f4564e282063fb44aeac485012cfae87 (patch) | |
tree | 51c60f83d52d394974d8c6d805db661b96c8e67b /.github/workflows/tests.yml | |
parent | 1fdf240aec17b6525ee2ebc76152ea8109f83595 (diff) | |
download | bindfs-bea88937f4564e282063fb44aeac485012cfae87.tar.gz |
CI: run Vagrant tests.
Diffstat (limited to '.github/workflows/tests.yml')
-rw-r--r-- | .github/workflows/tests.yml | 159 |
1 files changed, 159 insertions, 0 deletions
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 }} |