]> wimlib.net Git - wimlib/blob - .github/workflows/ci.yml
Add a configuration file for GitHub Actions
[wimlib] / .github / workflows / ci.yml
1 name: CI
2 on: [pull_request, push]
3 env:
4   DEF_CFLAGS: -O2 -g -Wall -Werror
5   DEPENDENCIES: autoconf automake libtool pkg-config libxml2-dev libfuse-dev ntfs-3g-dev
6
7 jobs:
8   gcc-build-and-test:
9     name: Build and test with gcc
10     runs-on: ubuntu-latest
11     steps:
12     - uses: actions/checkout@v3
13     - name: Install dependencies
14       run: |
15         sudo apt-get update
16         sudo apt-get install -y $DEPENDENCIES
17     - run: ./bootstrap
18     - run: ./configure CC=gcc CFLAGS="$DEF_CFLAGS"
19     - run: make -j8 check V=1
20     - run: make -j8 install V=1 DESTDIR=$PWD/installdir
21     - run: make -j8 uninstall V=1 DESTDIR=$PWD/installdir
22     - uses: actions/upload-artifact@v3
23       if: failure()
24       with:
25         name: gcc-test-logs
26         path: tests/*.log
27
28   clang-build-and-test:
29     name: Build and test with clang
30     runs-on: ubuntu-latest
31     steps:
32     - uses: actions/checkout@v3
33     - name: Install dependencies
34       run: |
35         sudo apt-get update
36         sudo apt-get install -y clang $DEPENDENCIES
37     - run: ./bootstrap
38     - run: ./configure CC=clang CFLAGS="$DEF_CFLAGS"
39     - run: make -j8 check V=1
40     - run: make -j8 install V=1 DESTDIR=$PWD/installdir
41     - run: make -j8 uninstall V=1 DESTDIR=$PWD/installdir
42     - uses: actions/upload-artifact@v3
43       if: failure()
44       with:
45         name: clang-test-logs
46         path: tests/*.log
47
48   i386-build-and-test:
49     name: Build and test with gcc -m32
50     runs-on: ubuntu-latest
51     steps:
52     - uses: actions/checkout@v3
53     - name: Install dependencies
54       run: |
55         sudo dpkg --add-architecture i386
56         sudo apt-get update
57         sudo apt-get install -y gcc-multilib $DEPENDENCIES libxml2-dev:i386
58     - run: ./bootstrap
59     - run: ./configure CC=gcc CFLAGS="-m32 $DEF_CFLAGS" --without-fuse --without-ntfs-3g
60     - run: make -j8 check V=1
61     - run: make -j8 install V=1 DESTDIR=$PWD/installdir
62     - run: make -j8 uninstall V=1 DESTDIR=$PWD/installdir
63     - uses: actions/upload-artifact@v3
64       if: failure()
65       with:
66         name: i386-test-logs
67         path: tests/*.log
68
69   asan-build-and-test:
70     name: Build and test with ASAN enabled
71     runs-on: ubuntu-latest
72     steps:
73     - uses: actions/checkout@v3
74     - name: Install dependencies
75       run: |
76         sudo apt-get update
77         sudo apt-get install -y clang $DEPENDENCIES
78     - run: ./bootstrap
79     - run: ./configure CC=clang CFLAGS="$DEF_CFLAGS -fsanitize=address"
80     - run: make -j8 check V=1
81     - uses: actions/upload-artifact@v3
82       if: failure()
83       with:
84         name: asan-test-logs
85         path: tests/*.log
86
87   ubsan-build-and-test:
88     name: Build and test with UBSAN enabled
89     runs-on: ubuntu-latest
90     steps:
91     - uses: actions/checkout@v3
92     - name: Install dependencies
93       run: |
94         sudo apt-get update
95         sudo apt-get install -y clang $DEPENDENCIES
96     - run: ./bootstrap
97     - run: ./configure CC=clang CFLAGS="$DEF_CFLAGS -fsanitize=undefined"
98     - run: make -j8 check V=1
99     - uses: actions/upload-artifact@v3
100       if: failure()
101       with:
102         name: ubsan-test-logs
103         path: tests/*.log
104
105   macos-build-and-test:
106     name: Build and test on macOS
107     runs-on: macos-latest
108     steps:
109     - uses: actions/checkout@v3
110     - name: Install dependencies
111       run: |
112         brew install autoconf automake libtool pkg-config libxml2
113     - run: ./bootstrap
114     - run: ./configure CFLAGS="$DEF_CFLAGS" --without-fuse --without-ntfs-3g
115     - run: make -j8 check V=1
116     - run: make -j8 install DESTDIR=$PWD/installdir
117     - run: make -j8 uninstall DESTDIR=$PWD/installdir
118     - uses: actions/upload-artifact@v3
119       if: failure()
120       with:
121         name: macos-test-logs
122         path: tests/*.log
123
124   windows-build:
125     name: Build on Windows
126     runs-on: windows-latest
127     strategy:
128       matrix:
129         include:
130         - { sys: mingw32, env: i686 }
131         - { sys: mingw64, env: x86_64 }
132     defaults:
133       run:
134         shell: msys2 {0}
135     steps:
136     - uses: actions/checkout@v3
137     - uses: msys2/setup-msys2@v2
138       with:
139         msystem: ${{matrix.sys}}
140         update: true
141         install: >
142           autoconf
143           automake
144           libtool
145           pkg-config
146           make
147           mingw-w64-${{matrix.env}}-cc
148           mingw-w64-${{matrix.env}}-libxml2
149     - run: ./bootstrap
150     - run: ./configure CFLAGS="$DEF_CFLAGS" --without-fuse --without-ntfs-3g
151     - run: make -j8