]> wimlib.net Git - wimlib/blobdiff - .github/workflows/ci.yml
ci.yml: use actions/checkout@v4 and actions/upload-artifact@v4
[wimlib] / .github / workflows / ci.yml
index 28e5ef48baf1c071b32dc45d10ee0e8c87033ec0..ee220137ef20e8301e9dc96586304071b00ea7d9 100644 (file)
@@ -2,14 +2,14 @@ name: CI
 on: [pull_request, push]
 env:
   DEF_CFLAGS: -O2 -g -Wall -Werror
-  DEPENDENCIES: autoconf automake libtool pkgconf libfuse-dev ntfs-3g-dev ntfs-3g
+  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
+    - uses: actions/checkout@v4
     - name: Install dependencies
       run: |
         sudo apt-get update
@@ -19,7 +19,7 @@ jobs:
     - 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
+    - uses: actions/upload-artifact@v4
       if: failure()
       with:
         name: gcc-test-logs
@@ -29,7 +29,7 @@ jobs:
     name: Build and test with clang
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@v3
+    - uses: actions/checkout@v4
     - name: Install dependencies
       run: |
         sudo apt-get update
@@ -39,7 +39,7 @@ jobs:
     - 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
+    - uses: actions/upload-artifact@v4
       if: failure()
       with:
         name: clang-test-logs
@@ -49,7 +49,7 @@ jobs:
     name: Build and test with gcc -m32
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@v3
+    - uses: actions/checkout@v4
     - name: Install dependencies
       run: |
         sudo dpkg --add-architecture i386
@@ -60,7 +60,7 @@ jobs:
     - 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
+    - uses: actions/upload-artifact@v4
       if: failure()
       with:
         name: i386-test-logs
@@ -70,7 +70,7 @@ jobs:
     name: Build and test with ASAN enabled
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@v3
+    - uses: actions/checkout@v4
     - name: Install dependencies
       run: |
         sudo apt-get update
@@ -78,7 +78,7 @@ jobs:
     - 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
+    - uses: actions/upload-artifact@v4
       if: failure()
       with:
         name: asan-test-logs
@@ -88,7 +88,7 @@ jobs:
     name: Build and test with UBSAN enabled
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@v3
+    - uses: actions/checkout@v4
     - name: Install dependencies
       run: |
         sudo apt-get update
@@ -96,17 +96,29 @@ jobs:
     - 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
+    - uses: actions/upload-artifact@v4
       if: failure()
       with:
         name: ubsan-test-logs
         path: tests/*.log
 
+  run-shellcheck:
+    name: Run shellcheck
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v4
+    - 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
+    - uses: actions/checkout@v4
     - name: Install dependencies
       run: |
         brew install autoconf automake libtool pkg-config
@@ -115,7 +127,7 @@ jobs:
     - 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
+    - uses: actions/upload-artifact@v4
       if: failure()
       with:
         name: macos-test-logs
@@ -136,9 +148,9 @@ jobs:
       run:
         shell: msys2 {0}
     steps:
-    - uses: actions/checkout@v3
+    - uses: actions/checkout@v4
       with:
-        fetch-depth: 0  # Need tags for tools/get-version-number
+        fetch-depth: 0  # Need tags for tools/get-version-number.sh
     - uses: msys2/setup-msys2@v2
       with:
         msystem: ${{matrix.msystem}}
@@ -151,12 +163,36 @@ jobs:
           make
           ${{matrix.cc_pkg}}
           pkgconf
-    - run: CFLAGS="$DEF_CFLAGS" ./tools/make-windows-release ${{matrix.options}}
-    - uses: actions/upload-artifact@v3
+    - run: CFLAGS="$DEF_CFLAGS" ./tools/windows-build.sh ${{matrix.options}}
+    - uses: actions/upload-artifact@v4
       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@v4
+      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:
@@ -166,9 +202,13 @@ jobs:
           sanitizer:
         - target: wim
           sanitizer: --asan --ubsan
-        - target: xml
+        - target: encoding
+          sanitizer: --asan --ubsan
+        - target: xmlproc
           sanitizer:
-        - target: xml
+        - target: xmlproc
+          sanitizer: --asan --ubsan
+        - target: xml_windows
           sanitizer: --asan --ubsan
         - target: compress
           sanitizer:
@@ -180,7 +220,7 @@ jobs:
           sanitizer: --asan --ubsan
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@v3
+    - uses: actions/checkout@v4
     - name: Install dependencies
       run: |
         sudo apt-get update
@@ -190,3 +230,52 @@ jobs:
       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@v4
+    - 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@v4
+      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