eSpeak NG is an open source speech synthesizer that supports more than hundred languages and accents.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ci.yml 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. name: CI
  2. on:
  3. workflow_dispatch:
  4. push:
  5. branches: [ master ]
  6. pull_request:
  7. branches: [ master ]
  8. jobs:
  9. build:
  10. runs-on: ${{ matrix.os }}
  11. name: Build with ${{ matrix.sanitizer }} sanitizer on ${{ matrix.os }} ${{ matrix.arch }}
  12. strategy:
  13. fail-fast: false
  14. matrix:
  15. os: [ubuntu-latest, macos-latest]
  16. arch: [x86-64, x86-32]
  17. sanitizer: [no, address, leak, memory, thread, undefined, valgrind]
  18. include:
  19. - sanitizer: "no"
  20. deps: ""
  21. configflags: "-g -Og -fno-omit-frame-pointer"
  22. config: ""
  23. build_env: ""
  24. check_env: ""
  25. - sanitizer: "address"
  26. deps: ""
  27. configflags: "-fsanitize=address -g -Og -fno-omit-frame-pointer"
  28. config: ""
  29. build_env: "ASAN_OPTIONS=detect_leaks=0"
  30. check_env: "ASAN_OPTIONS=detect_leaks=0"
  31. - sanitizer: "leak"
  32. deps: ""
  33. configflags: '-fsanitize=leak -g -Og -fno-omit-frame-pointer'
  34. config: ""
  35. build_env: "LSAN_OPTIONS=fast_unwind_on_malloc=0"
  36. check_env: "LSAN_OPTIONS=fast_unwind_on_malloc=0"
  37. - sanitizer: "memory"
  38. deps: "clang"
  39. configenv: "CC=clang CXX=clang++"
  40. configflags: "-fsanitize=memory -fsanitize-memory-track-origins=2 -g -Og -fno-omit-frame-pointer"
  41. config: "--without-pcaudiolib"
  42. build_env: "MSAN_OPTIONS=exitcode=42"
  43. check_env: "MSAN_OPTIONS=exitcode=42"
  44. - sanitizer: "thread"
  45. deps: ""
  46. configflags: "-fsanitize=thread -g -Og -fno-omit-frame-pointer"
  47. config: ""
  48. build_env: ""
  49. check_env: ""
  50. - sanitizer: "undefined"
  51. deps: ""
  52. configflags: "-fsanitize=undefined -g -Og -fno-omit-frame-pointer"
  53. config: ""
  54. build_env: "UBSAN_OPTIONS=halt_on_error=1"
  55. check_env: "UBSAN_OPTIONS=halt_on_error=1"
  56. - sanitizer: "valgrind"
  57. deps: "libtool-bin valgrind"
  58. configflags: '-g -Og -fno-omit-frame-pointer'
  59. config: ""
  60. build_env: 'VALGRIND="libtool --mode=execute valgrind --track-origins=yes --leak-check=full --error-exitcode=1" '
  61. check_env: 'VALGRIND="libtool --mode=execute valgrind --track-origins=yes --leak-check=full --error-exitcode=1" '
  62. - arch: x86-32
  63. archdeps: "gcc-multilib g++-multilib libpcaudio-dev:i386 libsonic-dev:i386 libc6-dbg:i386"
  64. archconfigflags: "-m32"
  65. - arch: x86-64
  66. archdeps: ""
  67. archconfigflags: ''
  68. exclude:
  69. # These are not supported on 32bit
  70. - arch: x86-32
  71. sanitizer: leak
  72. - arch: x86-32
  73. sanitizer: memory
  74. - arch: x86-32
  75. sanitizer: thread
  76. # 32-bit macOS is not supported
  77. - os: macos-latest
  78. arch: x86-32
  79. # These are not supported on macos
  80. - os: macos-latest
  81. sanitizer: leak
  82. - os: macos-latest
  83. sanitizer: memory
  84. - os: macos-latest
  85. sanitizer: valgrind
  86. steps:
  87. - uses: actions/checkout@v2
  88. - name: enable 32bit architecture
  89. run: sudo dpkg --add-architecture i386
  90. if: matrix.arch == 'x86-32'
  91. - name: dependencies-apt
  92. if: matrix.os == 'ubuntu-latest'
  93. run: sudo apt-get update && sudo apt-get install libpcaudio-dev libsonic-dev ronn kramdown ${{ matrix.deps }} ${{ matrix.archdeps }}
  94. - name: dependencies-brew
  95. if: matrix.os == 'macos-latest'
  96. run: brew install libtool automake ronn OJFord/homebrew-formulae/kramdown ${{ matrix.archdeps }} ;
  97. brew install --HEAD anarchivist/espeak-ng/waywardgeek-sonic
  98. - name: autoconf
  99. run: ./autogen.sh ; chmod -x INSTALL m4/*.m4
  100. - name: configure
  101. run: ${{ matrix.configenv }}
  102. CFLAGS="${{ matrix.configflags }} ${{ matrix.archconfigflags }}"
  103. CXXFLAGS="${{ matrix.configflags }} ${{ matrix.archconfigflags }}"
  104. ./configure ${{ matrix.config }}
  105. - name: Store the config
  106. if: ${{ failure() }}
  107. uses: actions/upload-artifact@v2
  108. with:
  109. name: config-${{ matrix.arch }}-${{ matrix.sanitizer }}.log
  110. path: config.log
  111. - name: make
  112. run: ${{ matrix.build_env }} make
  113. - name: make check
  114. run: ${{ matrix.check_env }} make check
  115. reprotest:
  116. runs-on: ubuntu-latest
  117. name: Build with reprotest on ${{ matrix.arch }}
  118. strategy:
  119. fail-fast: false
  120. matrix:
  121. arch: [x86-64, x86-32]
  122. include:
  123. - arch: x86-32
  124. archdeps: "gcc-multilib g++-multilib libpcaudio-dev:i386 libsonic-dev:i386 libc6-dbg:i386"
  125. archconfigflags: "-m32"
  126. - arch: x86-64
  127. archdeps: ""
  128. archconfigflags: ''
  129. steps:
  130. - uses: actions/checkout@v2
  131. - name: enable 32bit architecture
  132. run: sudo dpkg --add-architecture i386
  133. if: matrix.arch == 'x86-32'
  134. - name: dependencies
  135. run: sudo apt-get update && sudo apt-get install libpcaudio-dev libsonic-dev ronn kramdown reprotest ${{ matrix.archdeps }}
  136. - name: autoconf
  137. run: ./autogen.sh ; chmod -x INSTALL m4/*.m4
  138. - name: run
  139. run: reprotest 'CFLAGS="${{ matrix.archconfigflags }}" CXXFLAGS="${{ matrix.archconfigflags }}" ./configure --without-gradle && make clean && make && make check && touch success' success
  140. distcheck:
  141. runs-on: ubuntu-latest
  142. name: Run distcheck
  143. steps:
  144. - uses: actions/checkout@v2
  145. - name: dependencies
  146. run: sudo apt-get update && sudo apt-get install libpcaudio-dev libsonic-dev ronn kramdown
  147. - name: autoconf
  148. run: ./autogen.sh ; chmod -x INSTALL m4/*.m4
  149. - name: configure
  150. run: ./configure
  151. - name: make
  152. run: make
  153. - name: make check
  154. run: make check
  155. - name: make dist
  156. run: make dist
  157. - name: unpack
  158. run: mkdir unpack && tar -C unpack -xf *.tar.gz
  159. - name: re-configure
  160. run: cd unpack/espeak-ng-* && ./configure
  161. - name: re-make
  162. run: cd unpack/espeak-ng-* && make
  163. - name: re-make check
  164. run: cd unpack/espeak-ng-* && make check