diff options
author | Yann Collet <Cyan4973@users.noreply.github.com> | 2021-05-28 06:57:55 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-28 06:57:55 (GMT) |
commit | 6ac3b7ba9486c0fc0bf98baf3755f9dd55120aa8 (patch) | |
tree | 64a9e9e84c1aa2d2330cc58f269cf662ea564840 | |
parent | dd7a6fbdc4a1f683705ee6550089fde5527639ca (diff) | |
parent | 54b695800d6be3cc4e1b32dbf390c37e427d1c5b (diff) | |
download | lz4-6ac3b7ba9486c0fc0bf98baf3755f9dd55120aa8.zip lz4-6ac3b7ba9486c0fc0bf98baf3755f9dd55120aa8.tar.gz lz4-6ac3b7ba9486c0fc0bf98baf3755f9dd55120aa8.tar.bz2 |
Merge pull request #985 from t-mat/add-github-actions
Add GitHub Actions script ci.yml
-rw-r--r-- | .github/workflows/ci.yml | 474 |
1 files changed, 474 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..1d10b1f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,474 @@ +# Known issues: +# - For now, this CI script ignores exit code of `make usan`. Because +# there're several issues which may take relatively long time to +# resolve. We'll fully enable it when we ensure `make usan` is ready +# for all commits and PRs. +# See https://github.com/lz4/lz4/pull/983 for details. Also you can +# investigate its raw log in "Linux x64 usan" at the GitHub Actions. +# +# - This test script ignores exit code of cppcheck which can see under +# Job:Linux x64 scan-build + cppcheck in the GitHub Actions report. +# Because this project doesn't 100% follow their recommendation. +# Also sometimes it reports false positives. +# +# Notes: +# - You can investigate various information at the right pane of GitHub +# Actions report page. +# +# | Item | Section in the right pane | +# | ------------------------- | ------------------------------------- | +# | OS, VM | Set up job | +# | git repo, commit hash | Run actions/checkout@v2 | +# | gcc, tools | Environment info | +# +# - To fail earlier, order of tests in the same job are roughly sorted by +# elapsed time. +# +# Tests which we still leave at travis-ci +# - name: (Trusty) gcc-4.4 compilation +# - name: (Xenial) gcc-5 compilation +# - name: (Trusty) clang-3.8 compilation +# - name: Compile OSS-Fuzz targets +# - name: tag build +# - name: aarch64 real-hw tests +# - name: PPC64LE real-hw tests +# - name: IBM s390x real-hw tests + + +# Name of the workflow is also displayed as a SVG badge +name: lz4 CI + +on: [push, pull_request] + +jobs: + # CI Environment information + # + # - "ubuntu-latest" (Ubuntu 20.04) has the following software + # https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md + basic-env-info: + name: Linux x64 Environment Info (ubuntu-latest) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: gcc + run: echo && gcc --version + + - name: clang + run: echo && clang --version + + - name: make + run: echo && make -v + + - name: gcc packages + run: apt-cache search gcc | grep "^gcc-[0-9\.]* " | sort + + - name: clang packages + run: apt-cache search clang | grep "^clang-[0-9\.]* " | sort + + - name: QEMU packages + run: apt-cache search qemu | grep "^qemu-system-.*QEMU full system" | sort + + - name: git + run: echo && git --version + + - name: g++ + run: echo && g++ --version + + + # travis-ci: (Precise) benchmark test + ubuntu-benchmark: + name: Linux x64 benchmark test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: benchmark + run: | + make -C tests test-lz4 test-lz4c test-fullbench + + + # travis-ci: Custom LZ4_DISTANCE_MAX ; lz4-wlib (CLI linked to dynamic library); LZ4_USER_MEMORY_FUNCTIONS + ubuntu-custom-distance: + name: Linux x64 Custom LZ4_DISTANCE_MAX + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: custom LZ4_DISTANCE_MAX + run: | + MOREFLAGS=-DLZ4_DISTANCE_MAX=8000 make check + make clean + make -C programs lz4-wlib + make clean + make -C tests fullbench-wmalloc # test LZ4_USER_MEMORY_FUNCTIONS + make clean + CC="c++ -Wno-deprecated" make -C tests fullbench-wmalloc # stricter function signature check + + + # travis-ci: (Precise) frame and fuzzer test + ubuntu-frame-and-fuzzer: + name: Linux x64 frame and fuzzer test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: apt-get install + run: | + sudo sysctl -w vm.mmap_min_addr=4096 + - name: frame + fuzzer test + run: | + make -C tests test-frametest test-fuzzer + + + # travis-ci: (Trusty) i386 frame + fuzzer test + ubuntu-i386-frame-and-fuzzer: + name: Linux x64 i386 frame + fuzzer test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: apt-get install + run: | + sudo apt-get install gcc-multilib + sudo sysctl -w vm.mmap_min_addr=4096 + - name: frame + fuzzer test (i386) + run: | + make -C tests test-frametest32 test-fuzzer32 + + + # travis-ci: (Trusty) i386 benchmark + version test + ubuntu-i386-bench-and-versions: + name: Linux x64 i386 benchmark + version test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: apt-get install + run: | + sudo apt-get install gcc-multilib + - name: benchmark & versionsTest + run: | + make -C tests test-lz4c32 test-fullbench32 versionsTest + + + # travis-ci: x32 compatibility test + ubuntu-x32: + name: Linux x64 x32 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: apt-get install + run: | + sudo apt-get install gcc-multilib + - name: make -C tests + run: | + make -C tests test MOREFLAGS=-mx32 + + + # travis-ci: (Precise) g++ and clang CMake test + ubuntu-gxx-clang-cmake-test: + name: Linux x64 g++ and clang CMake test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: g++ + # note : This test can be merged with ubntu-latest-cc. + run: | + make clean cxxtest + - name: examples + run: | + make clean examples + - name: cmake + run: | + make clean examples + - name: travis-install + run: | + make clean travis-install + - name: clang + # note : This test can be merged with ubntu-latest-cc. + run: | + make clean clangtest + + + ubuntu-ctocpp: + name: Linux x64 c-to-c++ + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: c-to-c++ + run: | + make clean ctocpptest + + + ubuntu-usan: + name: Linux x64 usan + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: usan + # For now, we ignore the exit code of `make usan`. + # See "Known issues" at the top of the this file. + run: | + make clean usan MOREFLAGS='-Wcomma -Werror' || echo Ignore these errors for now. For details, see https://github.com/lz4/lz4/pull/983 + + + ubuntu-valgrind: + name: Linux x64 valgrind + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: apt-get install + run: | + sudo apt-get install valgrind + + - name: Environment info + run: | + echo && gcc --version + echo && valgrind --version + + - name: valgrind + run: | + make -C tests test-mem + + + ubuntu-cppcheck: + name: Linux x64 scan-build + cppcheck + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: apt-get install + run: | + sudo apt-get install cppcheck clang-tools + + - name: Environment info + run: | + echo && gcc --version + echo && clang --version + echo && cppcheck --version + echo && which scan-build # scan-build doesn't have any --version equivalent option + echo && make -v + echo && cat /proc/cpuinfo || echo /proc/cpuinfo is not present + + - name: staticAnalyze + run: | + make clean staticAnalyze + + - name: cppcheck + run: | + # This test script ignores exit code of cppcheck. See knowin issues + # at the top of this file. + make clean cppcheck || echo There are some cppcheck reports + + + # Test various C compilers + # + # Invoke the following commands for each C compiler + # make all c_standards + # make -C programs + # make -C tests + # + ubuntu-latest-cc: + name: Linux x64 ${{ matrix.xcc_name }} + runs-on: ubuntu-latest + strategy: + fail-fast: false # 'false' means Don't stop matrix workflows even if some matrix failed. + matrix: + include: [ + { xcc_name: 'gcc 7', xcc_pkg: gcc-7, xcc: gcc-7 }, + { xcc_name: 'gcc 8', xcc_pkg: gcc-8, xcc: gcc-8 }, + { xcc_name: 'gcc 9', xcc_pkg: gcc-9, xcc: gcc-9 }, + { xcc_name: 'gcc 10', xcc_pkg: gcc-10, xcc: gcc-10 }, + { xcc_name: 'clang 6', xcc_pkg: clang-6.0, xcc: clang-6.0 }, + { xcc_name: 'clang 7', xcc_pkg: clang-7, xcc: clang-7 }, + { xcc_name: 'clang 8', xcc_pkg: clang-8, xcc: clang-8 }, + { xcc_name: 'clang 9', xcc_pkg: clang-9, xcc: clang-9 }, + { xcc_name: 'clang 10', xcc_pkg: clang-10, xcc: clang-10 }, + { xcc_name: 'clang 11', xcc_pkg: clang-11, xcc: clang-11 }, + ] + env: # Set environment variables + XCC: ${{ matrix.xcc }} + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: apt-get install + run: | + sudo apt-get install gcc-multilib ${{ matrix.xcc_pkg }} + + - name: Environment info + run: | + echo && which $XCC + echo && $XCC --version + + - name: make all + run: | + CC=$XCC make clean all MOREFLAGS=-Werror + + - name: make c_standards + run: | + CC=$XCC make clean c_standards + + - name: make -C programs + run: | + CC=$XCC make -C programs CFLAGS=-fPIC LDFLAGS='-pie -fPIE -D_FORTIFY_SOURCE=2' + + - name: make -C tests + run: | + CC=$XCC make -C tests test-lz4 clean test-lz4c32 MOREFLAGS=-Werror + + + ubuntu-build-meson: + name: Linux x64 Meson + Ninja + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - uses: actions/setup-python@v2 # https://github.com/actions/setup-python + with: + python-version: '3.x' + + - name: install + run: | + sudo apt-get install tree ninja-build + python -m pip install --upgrade pip + pip3 install --user meson + + - name: Environment info + run: | + echo && clang --version + echo && python --version + echo && meson --version + echo && cat /proc/cpuinfo || echo /proc/cpuinfo is not present + + - name: meson + # 'run: >' replaces all newlines in the following block with spaces + run: > + meson setup + --buildtype=debug + -Db_lundef=false + -Dauto_features=enabled + -Ddefault_library=both + -Dbin_programs=true + -Dbin_contrib=true + -Dbin_tests=true + -Dbin_examples=true + contrib/meson build + + - name: staging + run: | + pushd build + DESTDIR=./staging ninja install + tree ./staging + + + ubuntu-build-cmake: + name: Linux x64 cmake + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + + - name: Environment info + run: | + echo && gcc --version + echo && cmake --version + echo && make -v + echo && cat /proc/cpuinfo || echo /proc/cpuinfo is not present + + - name: cmake + run: | + cd build/cmake + mkdir build + cd build + cmake .. + CFLAGS=-Werror make + + + # make cmake + # note: This test can be merged with ubuntu-build-cmake + ubuntu-cmake: + name: Linux x64 make cmake + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: make cmake + run: | + make clean cmake + + + # Linux, { ARM, ARM64, PPC, PPC64LE, S390X } + # All tests are using QEMU and gcc cross compiler. + qemu-platformtest: + name: QEMU ${{ matrix.name }} + runs-on: ubuntu-latest + strategy: + fail-fast: false # 'false' means Don't stop matrix workflows even if some matrix failed. + matrix: + include: [ + { name: ARM, xcc_pkg: gcc-arm-linux-gnueabi, xcc: arm-linux-gnueabi-gcc, xemu_pkg: qemu-system-arm, xemu: qemu-arm-static }, + { name: ARM64, xcc_pkg: gcc-aarch64-linux-gnu, xcc: aarch64-linux-gnu-gcc, xemu_pkg: qemu-system-arm, xemu: qemu-aarch64-static }, + { name: PPC, xcc_pkg: gcc-powerpc-linux-gnu, xcc: powerpc-linux-gnu-gcc, xemu_pkg: qemu-system-ppc, xemu: qemu-ppc-static }, + { name: PPC64LE, xcc_pkg: gcc-powerpc64le-linux-gnu, xcc: powerpc64le-linux-gnu-gcc, xemu_pkg: qemu-system-ppc, xemu: qemu-ppc64le-static }, + { name: S390X, xcc_pkg: gcc-s390x-linux-gnu, xcc: s390x-linux-gnu-gcc, xemu_pkg: qemu-system-s390x, xemu: qemu-s390x-static }, + ] + env: # Set environment variables + XCC: ${{ matrix.xcc }} + XEMU: ${{ matrix.xemu }} + steps: + - uses: actions/checkout@v2 # https://github.com/actions/checkout + - name: apt update & install + run: | + sudo apt-get update + sudo apt-get install gcc-multilib g++-multilib qemu-utils qemu-user-static + sudo apt-get install ${{ matrix.xcc_pkg }} ${{ matrix.xemu_pkg }} + + - name: Environment info + run: | + echo && which $XCC + echo && $XCC --version + echo && $XCC -v # Show built-in specs + echo && which $XEMU + echo && $XEMU --version + + - name: ARM + if: ${{ matrix.name == 'ARM' }} + run: | + make platformTest CC=$XCC QEMU_SYS=$XEMU + + - name: ARM64 + if: ${{ matrix.name == 'ARM64' }} + run: | + make platformTest CC=$XCC QEMU_SYS=$XEMU + + - name: PPC + if: ${{ matrix.name == 'PPC' }} + run: | + make platformTest CC=$XCC QEMU_SYS=$XEMU + + - name: PPC64LE + if: ${{ matrix.name == 'PPC64LE' }} + run: | + make platformTest CC=$XCC QEMU_SYS=$XEMU MOREFLAGS=-m64 + + - name: S390X + if: ${{ matrix.name == 'S390X' }} + run: | + make platformTest CC=$XCC QEMU_SYS=$XEMU + + + # macOS + macos-latest-general: + name: macOS general test + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + + - name: Environment info + run: | + echo && clang --version + echo && sysctl -a | grep machdep.cpu # cpuinfo + + - name: make + run: | + CFLAGS="-Werror" make clean default + + - name: library build + run: | + make clean default + + - name: test + run: | + # test scenario where `stdout` is not the console + make clean test MOREFLAGS='-Werror -Wconversion -Wno-sign-conversion' | tee |