• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1version: 2.1
2
3executors:
4  win32-executor:
5    docker:
6      - image: cimg/base:2023.10
7  win64-executor:
8    docker:
9      - image: cimg/base:2023.10
10  dist-executor:
11    docker:
12      - image: cimg/base:2023.10
13
14jobs:
15
16  macos-aat-fonts:
17    macos:
18      xcode: "15.3.0"
19    steps:
20      - checkout
21      - run: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config ragel freetype glib cairo python3 icu4c graphite2 gobject-introspection ninja
22      - run: pip3 install meson --upgrade
23      - run: brew link --force icu4c
24      - run: PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig" meson setup build -Dcoretext=enabled -Dgraphite=enabled -Dauto_features=enabled -Dchafa=disabled -Ddocs=disabled
25      - run: meson compile -Cbuild
26      - run: meson test -Cbuild --print-errorlogs
27      - store_artifacts:
28          path: build/meson-logs/
29
30  dist:
31    executor: dist-executor
32    steps:
33      - checkout
34      - run: sudo apt update && DEBIAN_FRONTEND=noninteractive sudo apt install -y git ninja-build binutils 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
35      - run: pip3 install fonttools meson --upgrade
36      - run: meson setup build
37      - run: meson dist --no-tests -Cbuild
38      - persist_to_workspace:
39          root: .
40          paths: build/meson-dist/harfbuzz-*.tar.xz
41
42  publish-dist:
43    executor: dist-executor
44    steps:
45      - checkout
46      - attach_workspace:
47          at: .
48      - run: |
49          .ci/publish_release_artifact.sh build/meson-dist/harfbuzz-$CIRCLE_TAG.tar.xz
50
51  fedora-valgrind:
52    docker:
53      - image: fedora:36
54    steps:
55      - checkout
56      - 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
57      - run: meson setup build --buildtype=debugoptimized
58      - run: meson compile -Cbuild -j9
59      # TOOD: increase timeouts and remove --no-suite=slow
60      - 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))
61
62  alpine:
63    docker:
64      - image: alpine
65    steps:
66      - checkout
67      - run: apk update && apk add ragel gcc g++ glib-dev freetype-dev cairo-dev git py3-pip ninja
68      - run: |
69          python3 -m venv venv
70          source venv/bin/activate
71          pip3 install meson==0.56.0
72          meson setup build --buildtype=minsize
73          meson compile -Cbuild -j9
74          meson test -Cbuild --print-errorlogs
75
76  asan-ubsan:
77    docker:
78      - image: ubuntu
79    steps:
80      - checkout
81      - run: apt update || true
82      - run: DEBIAN_FRONTEND=noninteractive apt install -y python3 python3-pip python3-venv ninja-build clang lld git binutils pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev
83      - run: |
84          python3 -m venv venv
85          source venv/bin/activate
86          pip3 install meson==0.56.0
87          CC=clang CXX=clang++ meson setup build --default-library=static -Db_sanitize=address,undefined --buildtype=debugoptimized --wrap-mode=nodownload -Dexperimental_api=true
88          meson compile -Cbuild -j9
89          meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt
90
91  tsan:
92    docker:
93      - image: ubuntu:20.04
94    steps:
95      - checkout
96      - run: apt update || true
97      - run: DEBIAN_FRONTEND=noninteractive apt install -y python3 python3-pip python3-venv ninja-build clang lld git binutils pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev
98      - run: |
99          python3 -m venv venv
100          source venv/bin/activate
101          pip3 install meson==0.56.0
102          CC=clang CXX=clang++ meson setup build --default-library=static -Db_sanitize=thread --buildtype=debugoptimized --wrap-mode=nodownload -Dexperimental_api=true
103          meson compile -Cbuild -j9
104          meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt
105
106  msan:
107    docker:
108      - image: ubuntu:20.04
109    steps:
110      - checkout
111      - run: apt update || true
112      - run: DEBIAN_FRONTEND=noninteractive apt install -y python3 python3-pip python3-venv ninja-build clang lld git binutils pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev
113      - run: |
114          python3 -m venv venv
115          source venv/bin/activate
116          pip3 install meson==0.56.0
117          # msan, needs --force-fallback-for=glib,freetype2 also which doesn't work yet but runs fuzzer cases at least
118          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
119          meson compile -Cbuild -j9
120          meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt
121
122  clang-cxx2a:
123    docker:
124      - image: ubuntu
125    steps:
126      - checkout
127      - run: apt update || true
128      - run: DEBIAN_FRONTEND=noninteractive apt install -y clang lld git binutils
129      - run: clang -c src/harfbuzz-subset.cc -DHB_NO_MT -Werror -std=c++2a
130
131  crossbuild-win32:
132    executor: win32-executor
133    steps:
134      - checkout
135      - run: sudo apt update && DEBIAN_FRONTEND=noninteractive sudo apt install -y ninja-build python3 python3-pip python3-venv git g++-mingw-w64-i686 zip
136      - run: |
137          python3 -m venv venv
138          source venv/bin/activate
139          pip3 install meson==1.6.0
140          bash .ci/build-win32.sh
141      - store_artifacts:
142          path: harfbuzz-win32.zip
143      - persist_to_workspace:
144          root: .
145          paths: harfbuzz-win32.zip
146
147  publish-win32:
148    executor: win32-executor
149    steps:
150      - checkout
151      - attach_workspace:
152          at: .
153      - run: |
154          mv harfbuzz-win32{,-$CIRCLE_TAG}.zip
155          .ci/publish_release_artifact.sh harfbuzz-win32-$CIRCLE_TAG.zip
156
157  crossbuild-win64:
158    executor: win64-executor
159    steps:
160      - checkout
161      - run: sudo apt update && DEBIAN_FRONTEND=noninteractive sudo apt install -y ninja-build python3 python3-pip python3-venv git g++-mingw-w64-x86-64 zip
162      - run: |
163          python3 -m venv venv
164          source venv/bin/activate
165          pip3 install meson==1.6.0
166          bash .ci/build-win64.sh
167      - store_artifacts:
168          path: harfbuzz-win64.zip
169      - persist_to_workspace:
170          root: .
171          paths: harfbuzz-win64.zip
172
173  publish-win64:
174    executor: win64-executor
175    steps:
176      - checkout
177      - attach_workspace:
178          at: .
179      - run: |
180          mv harfbuzz-win64{,-$CIRCLE_TAG}.zip
181          .ci/publish_release_artifact.sh harfbuzz-win64-$CIRCLE_TAG.zip
182
183
184workflows:
185  version: 2
186
187  build:
188    jobs:
189      - macos-aat-fonts
190      - dist:
191          filters: # must have filter or won't work as a dependency
192            tags:
193              only: /.*/
194      - publish-dist:
195          requires:
196            - dist
197          filters:
198            tags:
199              only: /^\d+\.\d+\.\d+$/
200            branches:
201              ignore: /.*/
202      - fedora-valgrind
203      - alpine
204      - asan-ubsan
205      - tsan
206      - msan
207      - clang-cxx2a
208      - crossbuild-win32:
209          filters: # must have filter or won't work as a dependency
210            tags:
211              only: /.*/
212      - crossbuild-win64:
213          filters: # must have filter or won't work as a dependency
214            tags:
215              only: /.*/
216      - publish-win32:
217          requires:
218            - crossbuild-win32
219          filters:
220            tags:
221              only: /^\d+\.\d+\.\d+$/
222            branches:
223              ignore: /.*/
224      - publish-win64:
225          requires:
226            - crossbuild-win64
227          filters:
228            tags:
229              only: /^\d+\.\d+\.\d+$/
230            branches:
231              ignore: /.*/
232