• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1version: 2.1
2
3executors:
4  win32-executor:
5    docker:
6      - image: cimg/base:edge-20.04
7  autotools-executor:
8    docker:
9      - image: cimg/base:edge-20.04
10
11jobs:
12
13  macos-10_14_4-aat-fonts:
14    macos:
15      xcode: "11.1.0"
16    steps:
17      - checkout
18      - run: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config ragel freetype glib cairo python3 icu4c graphite2 ninja
19      - run: pip3 install meson --upgrade
20      - run: PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/libffi/lib/pkgconfig" meson build -Dcoretext=enabled
21      - run: meson compile -Cbuild
22      - run: meson test -Cbuild --print-errorlogs
23      - store_artifacts:
24          path: build/meson-logs/
25
26  macos-10_15_3-aat-fonts:
27    macos:
28      xcode: "11.4.0"
29    steps:
30      - checkout
31      - run: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config ragel freetype glib cairo python3 icu4c graphite2 gobject-introspection gtk-doc ninja
32      - run: pip3 install meson --upgrade
33      - run: PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/libffi/lib/pkgconfig" meson build -Dcoretext=enabled -Dgraphite=enabled -Dauto_features=enabled -Dchafa=disabled
34      - run: meson compile -Cbuild
35      - run: meson test -Cbuild --print-errorlogs
36      - store_artifacts:
37          path: build/meson-logs/
38
39  # will be dropped with autotools removal
40  distcheck:
41    executor: autotools-executor
42    steps:
43      - checkout
44      - 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
45      - run: pip3 install fonttools meson --upgrade
46      - run: ./autogen.sh
47      - run: make -j2 distcheck
48      - run: rm harfbuzz-* && make distdir
49      - run: cd harfbuzz-* && meson build && ninja -j2 -Cbuild test
50      - run: make dist
51      - persist_to_workspace:
52          root: .
53          paths: harfbuzz-*.tar.xz
54
55  publish-dist:
56    executor: autotools-executor
57    steps:
58      - checkout
59      - attach_workspace:
60          at: .
61      - run: |
62          .ci/publish_release_artifact.sh harfbuzz-$CIRCLE_TAG.tar.xz
63
64  fedora-valgrind:
65    docker:
66      - image: fedora:33
67    steps:
68      - checkout
69      - 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
70      - run: meson build --buildtype=debugoptimized
71      - run: ninja -Cbuild -j9
72      # TOOD: increase timeouts and remove --no-suite=slow
73      - run: RUN_VALGRIND=1 meson test -Cbuild --no-suite=slow --wrap='valgrind --leak-check=full --error-exitcode=1' --print-errorlogs
74
75  alpine:
76    docker:
77      - image: alpine
78    steps:
79      - checkout
80      - run: apk update && apk add ragel gcc g++ glib-dev freetype-dev cairo-dev git py3-pip ninja
81      - run: pip3 install meson==0.47.0
82      - run: meson build --buildtype=minsize
83      - run: ninja -Cbuild -j9
84      - run: meson test -Cbuild --print-errorlogs
85
86  archlinux:
87    docker:
88      - image: archlinux/base
89    steps:
90      - checkout
91      - run: pacman --noconfirm -Syu freetype2 meson git clang cairo icu gettext gobject-introspection gcc gcc-libs glib2 graphite pkg-config ragel python python-pip base-devel gtk-doc
92      - run: pip install flake8 fonttools
93      - run: flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
94      - run: meson build -Dgraphite=enabled -Dauto_features=enabled -Dexperimental_api=true
95      - run: meson compile -Cbuild -j9
96      - run: meson test -Cbuild --print-errorlogs
97      - run: meson dist -Cbuild
98      - run: clang -c src/harfbuzz.cc -DHB_NO_MT
99      - run: clang -c src/hb-*.cc -DHB_NO_MT -DHB_TINY -DHB_NO_OT_FONT
100
101  sanitizers:
102    docker:
103      - image: ubuntu:20.04
104    steps:
105      - checkout
106      - run: apt update || true
107      - run: DEBIAN_FRONTEND=noninteractive apt install -y clang lld git binutils meson pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev
108      # asan+ubsan
109      - run: rm -rf build && meson build --default-library=static -Db_sanitize=address,undefined --buildtype=debugoptimized --wrap-mode=nodownload -Dexperimental_api=true
110      - run: ninja -Cbuild -j8 && meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt
111      # tsan
112      - run: rm -rf build && meson build --default-library=static -Db_sanitize=thread --buildtype=debugoptimized --wrap-mode=nodownload -Dexperimental_api=true
113      - run: ninja -Cbuild -j8 && meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt
114      # msan, needs --force-fallback-for=glib,freetype2 also which doesn't work yet but runs fuzzer cases at least
115      - run: rm -rf build && meson build --default-library=static -Db_sanitize=memory --buildtype=debugoptimized --wrap-mode=nodownload -Dauto_features=disabled -Dtests=enabled -Dexperimental_api=true
116      - run: ninja -Cbuild -j8 && meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt
117      - run: clang -c src/harfbuzz.cc src/hb-subset*.cc -DHB_NO_MT -Werror -std=c++2a
118
119  crossbuild-win32:
120    executor: win32-executor
121    steps:
122      - checkout
123      - run: sudo apt update && DEBIAN_FRONTEND=noninteractive sudo apt install -y ninja-build binutils gcc g++ pkg-config ragel gtk-doc-tools libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python3 python3-pip git g++-mingw-w64-i686 zip
124      - run: pip3 install meson==0.56.0 --upgrade
125      - run: .ci/build-win32.sh
126      - store_artifacts:
127          path: harfbuzz-win32.zip
128      - persist_to_workspace:
129          root: .
130          paths: harfbuzz-win32.zip
131
132  publish-win32:
133    executor: win32-executor
134    steps:
135      - checkout
136      - attach_workspace:
137          at: .
138      - run: |
139          mv harfbuzz-win32{,-$CIRCLE_TAG}.zip
140          .ci/publish_release_artifact.sh harfbuzz-win32-$CIRCLE_TAG.zip
141
142workflows:
143  version: 2
144
145  build:
146    jobs:
147      - macos-10_14_4-aat-fonts
148      - macos-10_15_3-aat-fonts
149      - distcheck: # will be dropped with autotools removal
150          filters:
151            tags:
152              only: /^\d+.\d+.\d+$/
153      - publish-dist:
154          requires:
155            - distcheck
156          filters:
157            tags:
158              only: /^\d+\.\d+\.\d+$/
159            branches:
160              ignore: /.*/
161      - fedora-valgrind
162      - alpine
163     #- archlinux
164      - sanitizers
165      - crossbuild-win32:
166          filters:
167            tags:
168              only: /^\d+.\d+.\d+$/
169      - publish-win32:
170          requires:
171            - crossbuild-win32
172          filters:
173            tags:
174              only: /^\d+\.\d+\.\d+$/
175            branches:
176              ignore: /.*/
177