name: CI on: [pull_request, push] env: DEF_CFLAGS: -O2 -g -Wall -Werror DEPENDENCIES: autoconf automake libtool pkgconf libfuse3-dev fuse3 ntfs-3g-dev ntfs-3g jobs: gcc-build-and-test: name: Build and test with gcc runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y $DEPENDENCIES - run: ./bootstrap - run: ./configure CC=gcc CFLAGS="$DEF_CFLAGS" - run: make -j8 check V=1 - run: make -j8 install V=1 DESTDIR=$PWD/installdir - run: make -j8 uninstall V=1 DESTDIR=$PWD/installdir - uses: actions/upload-artifact@v3 if: failure() with: name: gcc-test-logs path: tests/*.log clang-build-and-test: name: Build and test with clang runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y clang $DEPENDENCIES - run: ./bootstrap - run: ./configure CC=clang CFLAGS="$DEF_CFLAGS" - run: make -j8 check V=1 - run: make -j8 install V=1 DESTDIR=$PWD/installdir - run: make -j8 uninstall V=1 DESTDIR=$PWD/installdir - uses: actions/upload-artifact@v3 if: failure() with: name: clang-test-logs path: tests/*.log i386-build-and-test: name: Build and test with gcc -m32 runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install dependencies run: | sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install -y gcc-multilib $DEPENDENCIES - run: ./bootstrap - run: ./configure CC=gcc CFLAGS="-m32 $DEF_CFLAGS" --without-fuse --without-ntfs-3g - run: make -j8 check V=1 - run: make -j8 install V=1 DESTDIR=$PWD/installdir - run: make -j8 uninstall V=1 DESTDIR=$PWD/installdir - uses: actions/upload-artifact@v3 if: failure() with: name: i386-test-logs path: tests/*.log asan-build-and-test: name: Build and test with ASAN enabled runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y clang $DEPENDENCIES - run: ./bootstrap - run: ./configure CC=clang CFLAGS="$DEF_CFLAGS -fsanitize=address -fno-sanitize-recover=address" - run: make -j8 check V=1 - uses: actions/upload-artifact@v3 if: failure() with: name: asan-test-logs path: tests/*.log ubsan-build-and-test: name: Build and test with UBSAN enabled runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y clang $DEPENDENCIES - run: ./bootstrap - run: ./configure CC=clang CFLAGS="$DEF_CFLAGS -fsanitize=undefined -fno-sanitize-recover=undefined" - run: make -j8 check V=1 - uses: actions/upload-artifact@v3 if: failure() with: name: ubsan-test-logs path: tests/*.log run-shellcheck: name: Run shellcheck runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y shellcheck - name: Run shellcheck run: shellcheck tools/*.sh tools/*/*.sh macos-build-and-test: name: Build and test on macOS runs-on: macos-latest steps: - uses: actions/checkout@v3 - name: Install dependencies run: | brew install autoconf automake libtool pkg-config - run: ./bootstrap - run: ./configure CFLAGS="$DEF_CFLAGS" --without-fuse --without-ntfs-3g - run: make -j8 check V=1 - run: make -j8 install DESTDIR=$PWD/installdir - run: make -j8 uninstall DESTDIR=$PWD/installdir - uses: actions/upload-artifact@v3 if: failure() with: name: macos-test-logs path: tests/*.log windows-build: name: Build on Windows runs-on: windows-latest strategy: matrix: include: - { msystem: MINGW32, cc_pkg: mingw-w64-i686-gcc } - { msystem: MINGW64, cc_pkg: mingw-w64-x86_64-gcc } - { msystem: CLANG32, cc_pkg: mingw-w64-clang-i686-clang } - { msystem: CLANG64, cc_pkg: mingw-w64-clang-x86_64-clang } - { msystem: CLANGARM64, options: --install-prerequisites } defaults: run: shell: msys2 {0} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 # Need tags for tools/get-version-number.sh - uses: msys2/setup-msys2@v2 with: msystem: ${{matrix.msystem}} update: true install: > autoconf automake git libtool make ${{matrix.cc_pkg}} pkgconf - run: CFLAGS="$DEF_CFLAGS" ./tools/windows-build.sh ${{matrix.options}} - uses: actions/upload-artifact@v3 with: name: windows-${{matrix.msystem}}-bin path: wimlib-*-bin win32-test-imagex-capture-and-apply: name: Run win32-test-imagex-capture_and_apply.bat runs-on: windows-latest defaults: run: shell: msys2 {0} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 # Need tags for tools/get-version-number.sh - uses: msys2/setup-msys2@v2 with: msystem: MINGW64 update: true install: > autoconf automake git libtool make mingw-w64-x86_64-gcc pkgconf - run: tests/win32-test-imagex-capture_and_apply.sh fuzz-with-libFuzzer: name: Fuzz with libFuzzer (${{matrix.target}} ${{matrix.sanitizer}}) strategy: matrix: include: - target: wim sanitizer: - target: wim sanitizer: --asan --ubsan - target: encoding sanitizer: --asan --ubsan - target: xmlproc sanitizer: - target: xmlproc sanitizer: --asan --ubsan - target: xml_windows sanitizer: --asan --ubsan - target: compress sanitizer: - target: compress sanitizer: --asan --ubsan - target: decompress sanitizer: - target: decompress sanitizer: --asan --ubsan runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y clang $DEPENDENCIES - run: ./bootstrap - name: Fuzz run: | tools/libFuzzer/fuzz.sh --time=120 ${{matrix.sanitizer}} \ ${{matrix.target}} fuzz-with-wlfuzz-linux: name: Fuzz with wlfuzz (Linux, ${{matrix.sanitizer}}) strategy: matrix: include: - sanitizer: none cflags: - sanitizer: ASAN cflags: -fsanitize=address -fno-sanitize-recover=address - sanitizer: UBSAN cflags: -fsanitize=undefined -fno-sanitize-recover=undefined runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y clang $DEPENDENCIES - run: ./bootstrap - run: ./configure --enable-test-support CC=clang CFLAGS="$DEF_CFLAGS ${{matrix.cflags}}" - run: make -j8 tests/wlfuzz - run: TMPDIR=$PWD/tmp.wlfuzz tests/wlfuzz 120 fuzz-with-wlfuzz-windows: name: Fuzz with wlfuzz (Windows) runs-on: windows-latest defaults: run: shell: msys2 {0} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 # Need tags for tools/get-version-number.sh - uses: msys2/setup-msys2@v2 with: msystem: MINGW64 update: true install: > autoconf automake git libtool make mingw-w64-x86_64-gcc pkgconf - run: CFLAGS="$DEF_CFLAGS" ./tools/windows-build.sh -- --enable-test-support - run: make tests/wlfuzz.exe - run: TMPDIR=$PWD/tmp.wlfuzz tests/wlfuzz 120