name: CI permissions: read-all on: push: branches: [ main, dev ] pull_request: branches: [ main, dev ] # When a PR is updated, cancel the jobs from the previous version. Merges # do not define head_ref, so use run_id to never cancel those jobs. concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: TinyCBOR: timeout-minutes: 45 # Common environment variables env: HOMEBREW_NO_INSTALL_CLEANUP: 1 HOMEBREW_NO_ANALYTICS: 1 strategy: # Always run all jobs in the matrix, even if one fails. fail-fast: false matrix: os: [ ubuntu-latest ] build_cfg: [ { "name": "gcc-no-math", "flags": '{ "QMAKESPEC": "linux-gcc-no-math", "EVAL": "export CXX=false && touch math.h float.h", "CFLAGS": "-ffreestanding -DCBOR_NO_FLOATING_POINT -Os", "LDFLAGS": "-Wl,--no-undefined", "LDLIBS": "" }', }, { "name": "gcc-freestanding", "flags": '{ "QMAKESPEC": "linux-gcc-freestanding", "EVAL": "export CXX=false", "CFLAGS": "-ffreestanding -Os", "LDFLAGS": "-Wl,--no-undefined -lm" }', }, { "name": "clang", "flags": '{ "QMAKESPEC": "linux-clang", "EVAL": "export CC=clang && export CXX=clang++", "CFLAGS": "-Oz", "LDFLAGS": "-Wl,--no-undefined -lm", "QMAKEFLAGS": "-config release", "MAKEFLAGS": "-s", "TESTARGS": "-silent" }', }, { "name": "linux-g++", "flags": '{ "QMAKESPEC": "linux-g++", "EVAL": "export CC=gcc && export CXX=g++", "CFLAGS": "-Os", "LDFLAGS": "-Wl,--no-undefined -lm", "QMAKEFLAGS": "-config release", "QT_NO_CPU_FEATURE": "rdrnd" }' } ] include: - os: macos-13 build_cfg: { "name": "clang", "flags": '{ "QMAKESPEC": "macx-clang", "EVAL": "export CC=clang && export CXX=clang++", "CFLAGS": "-Oz", "QMAKEFLAGS": "-config debug", "MAKEFLAGS": "-s", "TESTARGS": "-silent", "PATH": "/usr/local/opt/qt/bin:$PATH" }' } # Default job name is too long to be visible in the "Checks" tab. name: ${{ matrix.os }}/${{ matrix.build_cfg.name }} # The type of runner that the job will run on runs-on: ${{ matrix.os }} steps: - name: Clone tinycbor uses: actions/checkout@v4 - name: install Linux software if: matrix.os == 'ubuntu-latest' run: | # Need a recent Valgrind, otherwise debug info cannot be read. sudo snap install valgrind --classic sudo apt-get update sudo apt-get install -y --no-install-recommends \ doxygen \ jq \ libc6-dbg \ libcjson-dev \ libfuntools-dev \ qtbase5-dev - name: install macOS software if: runner.os == 'macOS' run: | # Doxygen 1.9.7 is broken with ifdefs again, install 1.9.4 which works. wget https://raw.githubusercontent.com/Homebrew/homebrew-core/41828ee36b96e35b63b2a4c8cfc2df2c3728944a/Formula/doxygen.rb brew install doxygen.rb rm doxygen.rb brew install qt cjson - name: Execute tests run: | set -x PATH=`echo /opt/qt*/bin`:$PATH eval $(echo '${{ matrix.build_cfg.flags }}' | jq -r 'to_entries[] | "\(.key)=\"\(.value)\""') eval "$EVAL" # FIXME: remove -Wno-error-line below. export CFLAGS="$CFLAGS -Wno-error=implicit-function-declaration" make OUT=.config V=1 -s -f Makefile.configure configure && cat .config make -k \ CFLAGS="$CFLAGS -march=native -g1 -Wall -Wextra -Werror" \ CPPFLAGS="-DNDEBUG -DCBOR_ENCODER_WRITER_CONTROL=-1 -DCBOR_PARSER_READER_CONTROL=-1" \ lib/libtinycbor.a size lib/libtinycbor.a | tee sizes make -s clean make -k \ CFLAGS="$CFLAGS -O0 -g" \ LDFLAGS="$LDFLAGS" ${LDLIBS+LDLIBS="$LDLIBS"} grep -q freestanding-pass .config || make \ QMAKEFLAGS="$QMAKEFLAGS QMAKE_CXX=$CXX" \ tests/Makefile grep -q freestanding-pass .config || \ (cd tests && make TESTARGS=-silent check -k \ TESTRUNNER=`which valgrind 2>/dev/null`) make -s clean ! [ $BUILD_DOCS ] || ./scripts/update-docs.sh