name: CI on: push: branches: - main pull_request: jobs: macOS: strategy: fail-fast: false matrix: os: - macos-13 target: - macos-x86_64-dyn - ios-arm64-dyn - ios-x86_64-dyn include: - target: macos-x86_64-dyn arch_name: x86_64-apple-darwin run_test: true - target: ios-arm64-dyn arch_name: aarch64-apple-ios run_test: true - target: ios-x86_64-dyn arch_name: x86-apple-ios-simulator run_test: true runs-on: ${{ matrix.os }} env: HOME: /Users/runner steps: - name: Retrieve source code uses: actions/checkout@v3 - name: Install packages run: | brew update brew unlink python3 # upgrade from python@3.12 to python@3.12.2 fails to overwrite those rm -f /usr/local/bin/2to3 /usr/local/bin/2to3-3.12 /usr/local/bin/idle3 /usr/local/bin/idle3.12 /usr/local/bin/pydoc3 /usr/local/bin/pydoc3.12 /usr/local/bin/python3 /usr/local/bin/python3-config /usr/local/bin/python3.12 /usr/local/bin/python3.12-config brew install pkg-config ninja meson env: HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 - name: Install dependencies uses: kiwix/kiwix-build/actions/dl_deps_archive@main with: target_platform: ${{ matrix.target }} - name: Compile env: PKG_CONFIG_PATH: ${{env.HOME}}/BUILD_${{matrix.arch_name}}/INSTALL/lib/pkgconfig CPPFLAGS: -I${{env.HOME}}/BUILD_${{matrix.arch_name}}/INSTALL/include MESON_OPTION: --default-library=shared -Db_coverage=true MESON_CROSSFILE: ${{env.HOME}}/BUILD_${{matrix.arch_name}}/meson_cross_file.txt shell: bash run: | if [ -e $MESON_CROSSFILE ]; then MESON_OPTION="$MESON_OPTION --cross-file $MESON_CROSSFILE -Dstatic-linkage=true" fi meson . build ${MESON_OPTION} ninja -C build - name: Test libkiwix if: matrix.run_test env: SKIP_BIG_MEMORY_TEST: 1 LD_LIBRARY_PATH: ${{env.HOME}}/BUILD_${{matrix.arch_name}}/INSTALL/lib:${{env.HOME}}/BUILD_${{matrix.arch_name}}/INSTALL/lib64 run: meson test -C build --verbose Windows: runs-on: windows-2022 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup python 3.10 uses: actions/setup-python@v5 with: python-version: '3.10' - name: Install packages run: choco install pkgconfiglite ninja - name: Install python modules run: pip3 install meson - name: Setup MSVC compiler uses: bus1/cabuild/action/msdevshell@v1 with: architecture: x64 - name: Install dependencies uses: kiwix/kiwix-build/actions/dl_deps_archive@main with: target_platform: win-x86_64-static - name: Compile shell: cmd run: | set PKG_CONFIG_PATH=%cd%\BUILD_win-amd64\INSTALL\lib\pkgconfig set CPPFLAGS=-I%cd%\BUILD_win-amd64\INSTALL\include meson.exe setup . build -Dwerror=false --default-library=static --buildtype=debug cd build ninja.exe - name: Test shell: cmd run: | cd build meson.exe test --verbose env: WAIT_TIME_FACTOR_TEST: 10 Linux: strategy: fail-fast: false matrix: target: - linux-x86_64-static - linux-x86_64-dyn - android-arm - android-arm64 - win32-static - win32-dyn include: - target: linux-x86_64-static image_variant: focal lib_postfix: '/x86_64-linux-gnu' arch_name: linux-x86_64 run_test: true coverage: true - target: linux-x86_64-dyn image_variant: focal lib_postfix: '/x86_64-linux-gnu' arch_name: linux-x86_64 run_test: true coverage: true - target: android-arm image_variant: focal lib_postfix: '/arm-linux-androideabi' arch_name: arm-linux-androideabi run_test: false coverage: false - target: android-arm64 image_variant: focal lib_postfix: '/aarch64-linux-android' arch_name: aarch64-linux-android run_test: false coverage: false - target: win32-static image_variant: f35 lib_postfix: '64' arch_name: i686-w64-mingw32 run_test: false coverage: false - target: win32-dyn image_variant: f35 lib_postfix: '64' arch_name: i686-w64-mingw32 run_test: false coverage: false env: HOME: /home/runner runs-on: ubuntu-20.04 container: image: "ghcr.io/kiwix/kiwix-build_ci_${{matrix.image_variant}}:38" steps: - name: Checkout code uses: actions/checkout@v3 - name: Install dependencies uses: kiwix/kiwix-build/actions/dl_deps_archive@main with: target_platform: ${{ matrix.target }} - name: Compile shell: bash run: | meson --version if [[ "${{matrix.target}}" =~ .*-dyn ]]; then MESON_OPTION="--default-library=shared" else MESON_OPTION="--default-library=static" fi if [ -e "${{env.HOME}}/BUILD_${{matrix.arch_name}}/meson_cross_file.txt" ]; then MESON_OPTION="$MESON_OPTION --cross-file ${{env.HOME}}/BUILD_${{matrix.arch_name}}/meson_cross_file.txt" else MESON_OPTION="$MESON_OPTION -Db_coverage=true" fi if [[ "${{matrix.target}}" =~ android-.* ]]; then MESON_OPTION="$MESON_OPTION -Dstatic-linkage=true" fi meson . build ${MESON_OPTION} cd build ninja env: PKG_CONFIG_PATH: "/home/runner/BUILD_${{matrix.arch_name}}/INSTALL/lib/pkgconfig:/home/runner/BUILD_${{matrix.arch_name}}/INSTALL/lib${{matrix.lib_postfix}}/pkgconfig" CPPFLAGS: "-I/home/runner/BUILD_${{matrix.arch_name}}/INSTALL/include" - name: Test if: matrix.run_test shell: bash run: | cd build meson test --verbose if [[ "${{matrix.coverage}}" = "true" ]]; then ninja coverage fi env: LD_LIBRARY_PATH: "/home/runner/BUILD_${{matrix.arch_name}}/INSTALL/lib:/home/runner/BUILD_${{matrix.arch_name}}/INSTALL/lib${{matrix.lib_postfix}}" SKIP_BIG_MEMORY_TEST: 1 - name: Publish coverage if: matrix.coverage uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }}