name: Testing on: push: pull_request: jobs: smoketest: name: Smoke test runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Run minimal test set run: | ./autogen.sh ./configure make test test_linux: needs: smoketest name: Test Linux runs-on: ${{ matrix.os }} strategy: fail-fast: true matrix: os: - ubuntu-20.04 - ubuntu-18.04 steps: - uses: actions/checkout@v2 - name: Install essential run: | sudo apt-get update sudo apt-get install build-essential - name: generate a makefile and use it to install more packages run: | ./autogen.sh ./configure make build-dep shell: bash - name: Run the real configure step run: | CFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS="--coverage" ./configure --with-zstd shell: bash - name: Run embedded tests run: make test shell: bash - if: ${{ always() }} name: Upload tests output uses: actions/upload-artifact@v2 with: name: tests-out-${{matrix.os}} path: tests/*.out - name: Generate coverage reports run: | make gcov make cover shell: bash - name: Upload gcovr report artifact uses: actions/upload-artifact@v2 with: name: coverage-${{matrix.os}} path: coverage - name: Upload data to codecov uses: codecov/codecov-action@v2 test_macos: needs: smoketest name: Test MacOS runs-on: ${{ matrix.os }} strategy: fail-fast: true matrix: os: - macos-10.15 - macos-11 steps: - uses: actions/checkout@v2 - name: Install packages run: | brew install automake - name: generate a makefile and use it to install more packages run: | ./autogen.sh ./configure make build-dep shell: bash - name: Run the real configure step run: | CFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS="--coverage" ./configure --with-zstd shell: bash - name: Run embedded tests run: make test shell: bash - if: ${{ always() }} name: Upload tests output uses: actions/upload-artifact@v2 with: name: tests-out-${{matrix.os}} path: tests/*.out - name: Generate coverage reports run: | make gcov make cover shell: bash - name: Upload gcovr report artifact uses: actions/upload-artifact@v2 with: name: coverage-${{matrix.os}} path: coverage - name: Upload data to codecov uses: codecov/codecov-action@v2 test_windows: needs: smoketest name: Test Windows runs-on: ${{ matrix.os }} strategy: fail-fast: true matrix: os: - windows-2016 - windows-2019 - windows-2022 steps: - uses: actions/checkout@v2 # This is a pretty big hammer, but gets the windows compile moving - name: Hack up a fake autoconf run: | echo true >autogen.sh cp scripts/hack_fakeautoconf configure shell: bash - name: generate a makefile and use it to install more packages run: | ./autogen.sh ./configure make build-dep shell: bash - name: Run the real configure step run: | CFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS="--coverage" ./configure --with-zstd shell: bash - name: Run embedded tests run: make test shell: bash - if: ${{ always() }} name: Upload tests output uses: actions/upload-artifact@v2 with: name: tests-out-${{matrix.os}} path: tests/*.out - name: Generate coverage data run: | make gcov shell: bash - name: Upload data to codecov uses: codecov/codecov-action@v2 package_dpkg: needs: test_linux name: Package for Debian/Ubuntu runs-on: ubuntu-latest strategy: fail-fast: true matrix: arch: - amd64 - arm64 - armhf - i386 steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: Install packages needed for build run: | sudo apt-get install debhelper build-essential crossbuild-essential-${{ matrix.arch }} - name: Configure run: | # This will warn about CC, but we cannot set CC until we run it :-S HOST_TRIPLET=$(dpkg-architecture -a${{ matrix.arch }} -q DEB_HOST_GNU_TYPE) export CC=$HOST_TRIPLET-gcc export AR=$HOST_TRIPLET-ar ./autogen.sh ./configure --host $HOST_TRIPLET cd packages/debian/ ./configure EXTN=${{ matrix.arch }} - name: Build run: | cd packages/debian/ make - name: Upload dpkg uses: actions/upload-artifact@v2 with: name: package-dpkg-${{ matrix.arch }} path: packages/debian/*.deb package_rpm: needs: test_linux name: Package for Redhat/RPM runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: Install packages needed for build run: | sudo apt-get install rpm - name: Configure run: | ./autogen.sh ./configure cd packages/rpm/ ./configure - name: Build run: | make HOME=$(pwd)/../ cd packages/rpm/ make cd ../../ mv ../rpmbuild ./ - name: Upload rpm uses: actions/upload-artifact@v2 with: name: package-rpm-x86_64 path: rpmbuild/RPMS/x86_64/*.rpm binaries_windows: needs: test_windows name: Binaries for Windows (x86_64-pc-mingw64) runs-on: windows-latest steps: - uses: actions/checkout@v2 - name: Configure and Build shell: bash run: | ./scripts/hack_fakeautoconf make - name: Create binary dir shell: bash run: | make install DESTDIR=binaries - name: Upload binary zip uses: actions/upload-artifact@v2 with: name: binaries-x86_64-pc-mingw64 path: binaries binaries_macos: needs: test_macos name: Binaries for MacOS (x86_64-apple-darwin) runs-on: macos-latest steps: - uses: actions/checkout@v2 - name: Install packages needed for build run: | brew install automake - name: Configure and Build shell: bash run: | ./autogen.sh ./configure make - name: Create binary dir shell: bash run: | make install DESTDIR=binaries - name: Upload binary zip uses: actions/upload-artifact@v2 with: name: binaries-x86_64-apple-darwin path: binaries binaries_linux_crosscompile: needs: test_linux name: Binaries for linux runs-on: ubuntu-latest strategy: fail-fast: true matrix: arch: - arm-linux-gnueabi # I assume these architectures produce working code, but this has # not been directly confirmed. # They are compiled dynamically against normal libc, so will not # work on openwrt. - aarch64-linux-gnu - mips-linux-gnu - mipsel-linux-gnu steps: - uses: actions/checkout@v2 - name: Install cross compiler run: | sudo apt-get install binutils-${{ matrix.arch }} gcc-${{ matrix.arch }} - name: Configure and Build shell: bash run: | ./autogen.sh export CC=${{ matrix.arch }}-gcc export AR=${{ matrix.arch }}-ar ./configure --host ${{ matrix.arch }} make - name: Create binary dir shell: bash run: | make install DESTDIR=binaries - name: Upload binary zip uses: actions/upload-artifact@v2 with: name: binaries-${{ matrix.arch }} path: binaries