From f2043285e3dfcfdc61689d9a0921eaeea85a4eda Mon Sep 17 00:00:00 2001 From: Matt Jolly Date: Tue, 15 Oct 2024 13:51:46 +1000 Subject: [PATCH] CI/CD: Expand Linux CI - Add CI/CD for Meson - Add CI/CD for Clang - Consolidate configs using matrixes --- .github/workflows/build.yml | 308 ++++++++++++++++-------------------- 1 file changed, 139 insertions(+), 169 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d78cb9fb..f983686b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,176 +3,146 @@ name: CI on: [push, pull_request] jobs: - ubuntu-latest-html-tests: + build-test-linux: runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - name: Install dependencies - run: sudo apt install -y libfltk1.3-dev libssl-dev xvfb x11-apps x11-utils imagemagick + container: + image: ${{ matrix.os == 'alpine' && 'alpine:latest' || matrix.os == 'ubuntu-20.04' && 'ubuntu:20.04' || 'ubuntu:latest' }} + strategy: + matrix: + os: [ubuntu, ubuntu-20.04, alpine] + build-system: [autotools, meson] + compiler: [gcc, clang] + tls: [openssl, mbedtls, none] + html-tests: [true, false] + exclude: + - os: ubuntu + html-tests: false + - os: ubuntu-20.04 + html-tests: true + - os: alpine + html-tests: true + - os: alpine + tls: none + - os: ubuntu-20.04 + tls: none - - name: autogen - run: ./autogen.sh - - name: Make install dir - run: mkdir install build - - name: configure - run: cd build && ../configure --prefix=$(readlink -f ../install) --enable-html-tests - - name: make - run: cd build && make - - name: make install - run: cd build && make install - - name: Copy config to .dillo - run: | - mkdir -p ~/.dillo/ - cp install/etc/dillo/* ~/.dillo/ - - name: make check - run: | - export DILLOBIN=$(readlink -f install/bin/dillo) - cd build && make check || (cat test/html/test-suite.log; false) - export DILLOBIN= - - name: Check release fits in a floppy disk of 1.44 MB - run: | - cd build - make dist-gzip - size=$(stat -c %s dillo-*.tar.gz) - floppy=$((1474560 - 32*1024)) # Leave room for FAT table - echo "Floppy occupation: $(($size * 100 / $floppy)) %" - if [ $size -lt $floppy ]; then - echo 'OK: Fits in floopy disk' - else - echo "FAIL: Release size too big: $size / $floppy" - exit 1 - fi - - name: make distcheck (with HTML tests) - run: | - export DILLOBIN= - mkdir build-distcheck install-distcheck - cd build-distcheck && ../configure --prefix=$(readlink -f ../install-distcheck) --enable-html-tests - make distcheck DISTCHECK_CONFIGURE_FLAGS=--enable-html-tests -# - name: Remove pipes -# run: find test/html -type p -delete || true -# - name: Archive production artifacts -# uses: actions/upload-artifact@v3 -# with: -# name: upload-html-test-results -# path: | -# build/test/html - ubuntu-latest-no-tls: - needs: ubuntu-latest-html-tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - name: Install dependencies - run: sudo apt install -y libfltk1.3-dev - - name: autogen - run: ./autogen.sh - - name: configure - run: ./configure --disable-tls - - name: make - run: make - - name: make check - run: make check - - name: make distcheck - run: make distcheck - ubuntu-latest-mbedtls2: - needs: ubuntu-latest-html-tests - runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - name: Install dependencies - run: sudo apt install -y libfltk1.3-dev libmbedtls-dev - - name: autogen - run: ./autogen.sh - - name: configure - run: ./configure --disable-openssl - - name: make - run: make - - name: make check - run: make check - - name: make distcheck - run: make distcheck - ubuntu-latest-openssl-3: - needs: ubuntu-latest-html-tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - name: Install dependencies - run: sudo apt install -y libfltk1.3-dev libssl-dev - - name: autogen - run: ./autogen.sh - - name: configure - run: ./configure --disable-mbedtls - - name: make - run: make - - name: make check - run: make check - - name: make distcheck - run: make distcheck - ubuntu-latest-with-old-std: - needs: ubuntu-latest-html-tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - name: Install dependencies - run: sudo apt install -y libfltk1.3-dev libssl-dev - - name: autogen - run: ./autogen.sh - - name: configure - run: ./configure --disable-mbedtls CFLAGS="-Werror" CXXFLAGS="-Werror" - - name: make - run: make - - name: make check - run: make check - ubuntu-20-04-openssl-1-1: - needs: ubuntu-latest-html-tests - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - name: Install dependencies - run: sudo apt install -y libfltk1.3-dev libssl-dev - - name: autogen - run: ./autogen.sh - - name: configure - run: ./configure --disable-mbedtls - - name: make - run: make - - name: make check - run: make check - - name: make distcheck - run: make distcheck - alpine-mbedtls-3_6_0: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: jirutka/setup-alpine@v1 - with: - packages: > - build-base - autoconf - automake - fltk-dev - libpng-dev - libjpeg-turbo-dev - mbedtls-dev - - run: | - ./autogen.sh - ./configure - make - make check - shell: alpine.sh {0} + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + if [ "${{ matrix.os }}" = "ubuntu" ] || [ "${{ matrix.os }}" = "ubuntu-20.04" ]; then + apt-get update + apt-get install -y autotools-dev autoconf automake clang git imagemagick libfltk1.3-dev libjpeg-turbo-dev libssl-dev lld meson ninja-build x11-apps x11-utils xvfb zlib1g-dev + else + apk add build-base autoconf automake clang fltk-dev git libpng-dev libjpeg-turbo-dev lld mbedtls-dev meson ninja-build openssl-dev + fi + + - name: Set git safe directory + run: git config --global --add safe.directory ${GITHUB_WORKSPACE} + + - name: Prepare Autotools + run: | + if [ ${{ matrix.build-system }} = "autotools" ]; then + ./autogen.sh + mkdir install build + fi + + - name: Configure Build + run: | + HTML_TESTS_OPT="" + if [ "${{matrix.compiler}}" = "clang" ]; then + export CC=clang CXX=clang++ LDFLAGS="-fuse-ld=lld -Wl,--as-needed" + fi + if [ "${{ matrix.build-system }}" = "autotools" ]; then + if [ "${{ matrix.tls }}" = "none" ]; then + export TLS_OPT="--disable-tls" + elif [ "${{ matrix.tls }}" = "mbedtls" ]; then + export TLS_OPT="--disable-openssl" + else + export TLS_OPT="--disable-mbedtls" + fi + if [ "${{ matrix.html-tests }}" = "true" ]; then + export HTML_TESTS_OPT="--enable-html-tests" + fi + else + if [ "${{ matrix.tls }}" = "none" ]; then + export TLS_OPT="-Dtls=disabled -Dopenssl=false -Dmbedtls=false" + elif [ "${{ matrix.tls }}" = "mbedtls" ]; then + export TLS_OPT="-Dmbedtls=true -Dopenssl=false" + else + export TLS_OPT="-Dopenssl=true -Dmbedtls=false" + fi + if [ "${{ matrix.html-tests }}" = "true" ]; then + export HTML_TESTS_OPT="-Denable-html-tests=true" + fi + fi + + if [ "${{ matrix.build-system }}" = "autotools" ]; then + cd build + ../configure --prefix=$(readlink -f ../install) ${TLS_OPT} ${HTML_TESTS_OPT} + else + meson setup build --prefix="$(pwd)/install" ${TLS_OPT} ${HTML_TESTS_OPT} + fi + + - name: Build Dillo for ${{ matrix.os }} with ${{ matrix.build-system }} and ${{ matrix.compiler }} + run: | + if [ "${{ matrix.build-system }}" = "autotools" ]; then + cd build + make && make install + mkdir -p ~/.dillo/ + cp ../install/etc/dillo/* ~/.dillo/ + else + ninja -C build + fi + + - name: Run tests + run: | + if [ "${{ matrix.build-system }}" = "autotools" ]; then + cd build + export DILLOBIN=$(readlink -f bin/dillo) + make check || (cat test/html/test-suite.log; false) + export DILLOBIN= + else + meson test -C build + fi + + - name: Check release fits in a floppy disk of 1.44 MB + run: | + if [ "${{ matrix.build-system }}" = "autotools" ]; then + cd build + make dist-gzip + size=$(stat -c %s dillo-*.tar.gz) + floppy=$((1474560 - 32*1024)) # Leave room for FAT table + echo "Floppy occupation: $(($size * 100 / $floppy)) %" + if [ $size -lt $floppy ]; then + echo 'OK: Fits in floopy disk' + else + echo "FAIL: Release size too big: $size / $floppy" + exit 1 + fi + else + echo "Skipping floppy disk check for Meson build; not yet implemented" + fi + + - name: Run distcheck + run: | + HTML_TESTS_OPT="" + if [ "${{ matrix.html-tests }}" = "true" ]; then + HTML_TESTS_OPT="--enable-html-tests" + fi + if [ "${{ matrix.build-system }}" = "autotools" ]; then + mkdir build-distcheck install-distcheck + cd build-distcheck && ../configure --prefix=$(readlink -f ../install-distcheck) ${HTML_TESTS_OPT} + make distcheck DISTCHECK_CONFIGURE_FLAGS="${HTML_TESTS_OPT}" + else + if [ "${{ matrix.os}}" = "ubuntu*" ]; then + meson dist -C build + fi + fi + macOS-13-openssl-1-1: - needs: ubuntu-latest-html-tests runs-on: macos-13 steps: - uses: actions/checkout@v1 @@ -190,8 +160,8 @@ jobs: run: make check - name: make distcheck run: make distcheck + macOS-13-openssl-3: - needs: ubuntu-latest-html-tests runs-on: macos-13 steps: - uses: actions/checkout@v1 @@ -211,8 +181,8 @@ jobs: run: make check - name: make distcheck run: make distcheck + freebsd-14-openssl-3: - needs: ubuntu-latest-html-tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -235,8 +205,8 @@ jobs: make make check ldd src/dillo + windows-mbedtls: - needs: ubuntu-latest-html-tests runs-on: windows-latest steps: - run: git config --global core.autocrlf input