diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..ffa3736f5 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,95 @@ +name: test SWIG CI + +on: + push: + #branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ${{ matrix.os }} + strategy: + matrix: + # the agent machine operating systems + os: [ubuntu-latest] + SWIGJOBS: ["-j2"] + CSTD: [""] + CC: ["gcc"] + CPP11: ["1"] + CPP14: [""] + CPP17: [""] + CONFIGOPTS: [""] + SWIGLANG: ["", "python"] + VER: [""] + SWIG_FEATURES: [""] + # let's run all of them, as opposed to aborting when one fails + fail-fast: false + + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + - name: ccache + uses: hendrikmuhs/ccache-action@v1 + with: + key: ${{ matrix.os }}-${{ matrix.SWIGLANG }} + - name: configure + shell: bash + env: + SWIGLANG: ${{ matrix.SWIGLANG }} + CONFIGOPTS: ${{ matrix.CONFIGOPTS }} + CC: ${{ matrix.CC }} + run: | + set -ex + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + source Tools/GHA-linux-install.sh + if test -n "$CPP11"; then CONFIGOPTS+=(--enable-cpp11-testing "CXXFLAGS=-std=c++11 $CXXFLAGS" "CFLAGS=-std=c11 $CFLAGS") && export CSTD=c11 && export CPPSTD=c++11; fi + if test -n "$CPP14"; then CONFIGOPTS+=(--enable-cpp11-testing "CXXFLAGS=-std=c++14 $CXXFLAGS" "CFLAGS=-std=c11 $CFLAGS") && export CSTD=c11 && export CPPSTD=c++14; fi + if test -n "$CPP17"; then CONFIGOPTS+=(--enable-cpp11-testing "CXXFLAGS=-std=c++17 $CXXFLAGS" "CFLAGS=-std=c17 $CFLAGS") && export CSTD=c17 && export CPPSTD=c++17; fi + if test -n "$SWIGLANG"; then CONFIGOPTS+=(--without-alllang --with-$WITHLANG); fi + echo "${CONFIGOPTS[@]}" + ./autogen.sh && mkdir -p build/build && cd build/build && ../../configure "${CONFIGOPTS[@]}" + + - name: build + shell: bash + env: + SWIGLANG: ${{ matrix.SWIGLANG }} + SWIGJOBS: ${{ matrix.SWIGJOBS }} + run: | + set -ex + cd ${GITHUB_WORKSPACE}/build/build; + make -s $SWIGJOBS + ./swig -version && ./swig -pcreversion + if test -z "$SWIGLANG"; then make -s $SWIGJOBS check-ccache; fi + if test -z "$SWIGLANG"; then make -s $SWIGJOBS check-errors-test-suite; fi + echo 'Installing...' + if test -z "$SWIGLANG"; then sudo make -s install && swig -version && ccache-swig -V; fi + - name: tests + shell: bash + env: + SWIGLANG: ${{ matrix.SWIGLANG }} + SWIGJOBS: ${{ matrix.SWIGJOBS }} + SWIG_FEATURES: ${{ matrix.SWIG_FEATURES }} + CC: ${{ matrix.CC }} + CSTD: ${{ matrix.CSTD }} + CPP11: ${{ matrix.CPP11 }} + CPP14: ${{ matrix.CPP14 }} + CPP17: ${{ matrix.CPP17 }} + run: | + set -ex + cd ${GITHUB_WORKSPACE}/build/build; + if test -n "$CPP11"; then export CPPSTD=c++11; fi + if test -n "$CPP14"; then export CPPSTD=c++14; fi + if test -n "$CPP17"; then export CPPSTD=c++17; fi + # Stricter compile flags for examples. Various headers and SWIG generated code prevents full use of -pedantic. + if test -n "$SWIGLANG"; then cflags=$($GITHUB_WORKSPACE/Tools/testflags.py --language $SWIGLANG --cflags --std=$CSTD --compiler=$CC) && echo $cflags; fi + if test -n "$SWIGLANG"; then cxxflags=$($GITHUB_WORKSPACE/Tools/testflags.py --language $SWIGLANG --cxxflags --std=$CPPSTD --compiler=$CC) && echo $cxxflags; fi + if test -n "$SWIGLANG"; then make -s check-$SWIGLANG-version; fi + if test -n "$SWIGLANG"; then make check-$SWIGLANG-enabled; fi + if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-examples CFLAGS="$cflags" CXXFLAGS="$cxxflags"; fi + if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-test-suite CFLAGS="$cflags" CXXFLAGS="$cxxflags"; fi + #echo 'Cleaning...' + # Skip on osx as often fails with: rm: Resource temporarily unavailable + #if test "$TRAVIS_OS_NAME" != "osx"; then make check-maintainer-clean && ../../configure $CONFIGOPTS; fi