version: 2.1 executors: win32-executor: docker: - image: cimg/base:edge-20.04 win64-executor: docker: - image: cimg/base:edge-20.04 autotools-executor: docker: - image: cimg/base:edge-20.04 jobs: macos-aat-fonts: macos: xcode: "12.5.1" steps: - checkout - run: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config ragel freetype glib cairo python3 icu4c graphite2 gobject-introspection ninja - run: pip3 install meson --upgrade - run: PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/libffi/lib/pkgconfig" meson setup build -Dcoretext=enabled -Dgraphite=enabled -Dauto_features=enabled -Dchafa=disabled -Ddocs=disabled - run: meson compile -Cbuild - run: meson test -Cbuild --print-errorlogs - store_artifacts: path: build/meson-logs/ # will be dropped with autotools removal distcheck: executor: autotools-executor steps: - checkout - run: sudo apt update && DEBIAN_FRONTEND=noninteractive sudo apt install -y git ninja-build binutils libtool autoconf automake make gcc g++ pkg-config ragel gtk-doc-tools gobject-introspection libfreetype6-dev libglib2.0-dev libgirepository1.0-dev libcairo2-dev libicu-dev libgraphite2-dev python3 python3-pip - run: pip3 install fonttools meson --upgrade - run: ./autogen.sh - run: make -j2 distcheck - run: rm harfbuzz-* && make distdir - run: cd harfbuzz-* && meson build && ninja -j2 -Cbuild test - run: make dist - persist_to_workspace: root: . paths: harfbuzz-*.tar.xz publish-dist: executor: autotools-executor steps: - checkout - attach_workspace: at: . - run: | .ci/publish_release_artifact.sh harfbuzz-$CIRCLE_TAG.tar.xz fedora-valgrind: docker: - image: fedora:36 steps: - checkout - run: dnf install -y pkg-config ragel valgrind gcc gcc-c++ meson git glib2-devel freetype-devel cairo-devel libicu-devel gobject-introspection-devel graphite2-devel redhat-rpm-config python python-pip || true - run: meson setup build --buildtype=debugoptimized - run: meson compile -Cbuild -j9 # TOOD: increase timeouts and remove --no-suite=slow - run: RUN_VALGRIND=1 meson test -Cbuild --no-suite=slow --wrap='valgrind --leak-check=full --error-exitcode=1' --print-errorlogs --num-processes=$(($(nproc)/2 + 1)) alpine: docker: - image: alpine steps: - checkout - run: apk update && apk add ragel gcc g++ glib-dev freetype-dev cairo-dev git py3-pip ninja - run: pip3 install meson==0.56.0 - run: meson setup build --buildtype=minsize - run: meson compile -Cbuild -j9 - run: meson test -Cbuild --print-errorlogs asan-ubsan: docker: - image: ubuntu:20.04 steps: - checkout - run: apt update || true - run: DEBIAN_FRONTEND=noninteractive apt install -y python3 python3-pip ninja-build clang lld git binutils pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev - run: pip3 install meson==0.56.0 - run: CC=clang CXX=clang++ meson setup build --default-library=static -Db_sanitize=address,undefined --buildtype=debugoptimized --wrap-mode=nodownload -Dexperimental_api=true - run: meson compile -Cbuild -j9 - run: meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt tsan: docker: - image: ubuntu:20.04 steps: - checkout - run: apt update || true - run: DEBIAN_FRONTEND=noninteractive apt install -y python3 python3-pip ninja-build clang lld git binutils pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev - run: pip3 install meson==0.56.0 - run: CC=clang CXX=clang++ meson setup build --default-library=static -Db_sanitize=thread --buildtype=debugoptimized --wrap-mode=nodownload -Dexperimental_api=true - run: meson compile -Cbuild -j9 - run: meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt msan: docker: - image: ubuntu:20.04 steps: - checkout - run: apt update || true - run: DEBIAN_FRONTEND=noninteractive apt install -y python3 python3-pip ninja-build clang lld git binutils pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev - run: pip3 install meson==0.56.0 # msan, needs --force-fallback-for=glib,freetype2 also which doesn't work yet but runs fuzzer cases at least - run: CC=clang CXX=clang++ meson setup build --default-library=static -Db_sanitize=memory --buildtype=debugoptimized --wrap-mode=nodownload -Dauto_features=disabled -Dtests=enabled -Dexperimental_api=true - run: meson compile -Cbuild -j9 - run: meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt clang-cxx2a: docker: - image: ubuntu:20.04 steps: - checkout - run: apt update || true - run: DEBIAN_FRONTEND=noninteractive apt install -y clang lld git binutils - run: clang -c src/harfbuzz-subset.cc -DHB_NO_MT -Werror -std=c++2a crossbuild-win32: executor: win32-executor steps: - checkout - run: sudo apt update && DEBIAN_FRONTEND=noninteractive sudo apt install -y ninja-build gtk-doc-tools python3 python3-pip git g++-mingw-w64-i686 zip - run: pip3 install meson==0.60.0 - run: .ci/build-win32.sh - store_artifacts: path: harfbuzz-win32.zip - persist_to_workspace: root: . paths: harfbuzz-win32.zip publish-win32: executor: win32-executor steps: - checkout - attach_workspace: at: . - run: | mv harfbuzz-win32{,-$CIRCLE_TAG}.zip .ci/publish_release_artifact.sh harfbuzz-win32-$CIRCLE_TAG.zip crossbuild-win64: executor: win64-executor steps: - checkout - run: sudo apt update && DEBIAN_FRONTEND=noninteractive sudo apt install -y ninja-build gtk-doc-tools python3 python3-pip git g++-mingw-w64-x86-64 zip - run: pip3 install meson==0.60.0 - run: bash .ci/build-win64.sh - store_artifacts: path: harfbuzz-win64.zip - persist_to_workspace: root: . paths: harfbuzz-win64.zip publish-win64: executor: win64-executor steps: - checkout - attach_workspace: at: . - run: | mv harfbuzz-win64{,-$CIRCLE_TAG}.zip .ci/publish_release_artifact.sh harfbuzz-win64-$CIRCLE_TAG.zip workflows: version: 2 build: jobs: - macos-aat-fonts - distcheck: filters: # must have filter or won't work as a dependency tags: only: /.*/ - publish-dist: requires: - distcheck filters: tags: only: /^\d+\.\d+\.\d+$/ branches: ignore: /.*/ - fedora-valgrind - alpine - asan-ubsan - tsan - msan - clang-cxx2a - crossbuild-win32: filters: # must have filter or won't work as a dependency tags: only: /.*/ - crossbuild-win64: filters: # must have filter or won't work as a dependency tags: only: /.*/ - publish-win32: requires: - crossbuild-win32 filters: tags: only: /^\d+\.\d+\.\d+$/ branches: ignore: /.*/ - publish-win64: requires: - crossbuild-win64 filters: tags: only: /^\d+\.\d+\.\d+$/ branches: ignore: /.*/