| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| # cmake.yml -- Configuration for CMake GitHub Action workflow. |
| # |
| |
| name: CMake |
| |
| on: |
| push: |
| branches: ["*"] |
| paths-ignore: |
| - 'doc/**' |
| - 'notes/**' |
| - CHANGES |
| - COMMITTERS |
| - INSTALL |
| - STATUS |
| - README |
| pull_request: |
| branches: ["*"] |
| paths-ignore: |
| - 'doc/**' |
| - 'notes/**' |
| - CHANGES |
| - COMMITTERS |
| - INSTALL |
| - STATUS |
| - README |
| |
| concurrency: |
| group: ${{ github.ref }} |
| cancel-in-progress: false |
| |
| defaults: |
| run: |
| shell: pwsh |
| |
| jobs: |
| build: |
| strategy: |
| fail-fast: false |
| matrix: |
| include: |
| - name: Windows, shared, x64, with tests |
| os: windows-2022 |
| build_shared: ON |
| cmake_generator: Ninja |
| vcpkg_triplet: x64-windows |
| arch: x64 |
| run_tests: true |
| - name: Windows, shared, x64, vs2022, with tests |
| os: windows-2022 |
| build_shared: ON |
| cmake_generator: 'Visual Studio 17 2022' |
| vcpkg_triplet: x64-windows |
| arch: x64 |
| run_tests: true |
| - name: Windows, shared, x86 |
| os: windows-2022 |
| build_shared: ON |
| cmake_generator: Ninja |
| vcpkg_triplet: x86-windows |
| arch: x86 |
| - name: Windows, static, x64, with tests |
| os: windows-2022 |
| build_shared: OFF |
| cmake_generator: Ninja |
| vcpkg_triplet: x64-windows-static-md |
| arch: x64 |
| run_tests: true |
| - name: Linux, shared, with tests |
| os: ubuntu-latest |
| cmake_generator: Ninja |
| build_shared: ON |
| run_tests: true |
| extra_config_opts: > |
| -DSVN_ENABLE_AUTH_KWALLET=ON |
| -DSVN_ENABLE_AUTH_GNOME_KEYRING=ON |
| -DSVN_ENABLE_SASL=ON |
| -DSVN_ENABLE_LIBMAGIC=ON |
| extra_packages: > |
| libkf5wallet-dev |
| libkf5coreaddons-dev |
| libkf5i18n-dev |
| libdbus-1-dev |
| qtbase5-dev |
| libsecret-1-dev |
| python3-lxml |
| python3-rnc2rng |
| libsasl2-dev |
| libmagic-dev |
| - name: Mac OS |
| os: macos-latest |
| build_shared: ON |
| cmake_generator: Ninja |
| run_tests: true |
| |
| runs-on: ${{ matrix.os }} |
| name: ${{ matrix.name }} |
| |
| env: |
| CMAKE_GENERATOR: ${{ matrix.cmake_generator }} |
| |
| steps: |
| - name: Prepare Environment (Windows) |
| if: runner.os == 'Windows' |
| run: | |
| $root = &(Join-Path ${env:ProgramFiles(x86)} "\Microsoft Visual Studio\Installer\vswhere.exe") -property installationpath -latest |
| Import-Module (Join-Path $root "Common7\Tools\Microsoft.VisualStudio.DevShell.dll") |
| Enter-VsDevShell -VsInstallPath $root -DevCmdArguments "-arch=${{ matrix.arch }}" |
| |
| ls env: | foreach { "$($_.Name)=$($_.Value)" >> $env:GITHUB_ENV } |
| |
| - name: Get vcpkg sha (Windows, vcpkg) |
| if: runner.os == 'Windows' |
| id: vcpkg-sha |
| run: | |
| cd C:\vcpkg |
| $sha = git rev-parse HEAD |
| echo "sha=$sha" >> $env:GITHUB_OUTPUT |
| |
| - name: Restore vcpkg archives (Windows, vcpkg) |
| if: runner.os == 'Windows' |
| uses: actions/cache/restore@v5 |
| with: |
| path: vcpkg-archives |
| key: vcpkg/${{ runner.os }}/${{ matrix.vcpkg_triplet }}/${{ steps.vcpkg-sha.outputs.sha }} |
| restore-keys: vcpkg/${{ runner.os }}/${{ matrix.vcpkg_triplet }}/ |
| |
| - name: Install dependencies (Windows, vcpkg) |
| if: runner.os == 'Windows' |
| env: |
| VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}\vcpkg-archives |
| run: | |
| if (-not (Test-Path $env:VCPKG_DEFAULT_BINARY_CACHE)) { |
| New-Item $env:VCPKG_DEFAULT_BINARY_CACHE -ItemType Directory | Out-Null |
| } |
| C:\vcpkg\vcpkg.exe install --triplet ${{ matrix.vcpkg_triplet }} ` |
| apr apr-util serf expat zlib sqlite3 gettext[tools] pdcurses |
| |
| "CMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake" >> $env:GITHUB_ENV |
| |
| - name: Save vcpkg archives (Windows, vcpkg) |
| if: runner.os == 'Windows' |
| uses: actions/cache/save@v5 |
| with: |
| path: vcpkg-archives |
| key: vcpkg/${{ runner.os }}/${{ matrix.vcpkg_triplet }}/${{ steps.vcpkg-sha.outputs.sha }} |
| |
| - name: Install dependencies (Windows, python) |
| if: runner.os == 'Windows' |
| run: python -m pip -v --disable-pip-version-check install lxml==6.1.0 rnc2rng==2.7.0 |
| |
| - name: Install dependencies (Linux, apt-get) |
| if: runner.os == 'Linux' |
| run: > |
| sudo apt-get update && |
| sudo apt-get install |
| libtool |
| libtool-bin |
| libapr1-dev |
| libaprutil1-dev |
| libserf-dev |
| libexpat1-dev |
| zlib1g-dev |
| libsqlite3-dev |
| apache2-dev |
| gettext |
| libncurses-dev |
| ninja-build |
| ${{ matrix.extra_packages }} |
| |
| - name: Install dependencies (Mac OS, homebrew) |
| if: runner.os == 'macOS' |
| run: | |
| $packages = @('apr', 'apr-util', 'expat', 'sqlite', 'apache-serf', |
| 'gettext', 'ncurses') |
| brew install ninja apache2 swig $packages |
| $PKG_CONFIG_PATH = ` |
| $packages | ` |
| % { "$(& brew --prefix $_)/lib/pkgconfig" } | ` |
| Join-String -Separator ':' |
| "PKG_CONFIG_PATH=$PKG_CONFIG_PATH" >> $env:GITHUB_ENV |
| |
| - name: Install dependencies (Mac OS, python) |
| if: runner.os == 'macOS' |
| run: python -m pip -v --disable-pip-version-check install lxml==6.1.0 rnc2rng==2.7.0 |
| |
| - name: Set platform-specific values |
| id: platform |
| run: | |
| $PYTHON_ROOT=$(python -c 'import pathlib, sys; print(str(pathlib.Path(sys.executable).resolve().parent.parent))') |
| "python_root=$PYTHON_ROOT" >> "$env:GITHUB_OUTPUT" |
| |
| - name: Use LF for Git checkout |
| run: | |
| git config --global core.autocrlf false |
| git config --global core.eol lf |
| |
| - uses: actions/checkout@v6 |
| |
| - name: Checkout py3c (Linux and macOS) |
| if: runner.os == 'Linux' || runner.os == 'macOS' |
| uses: actions/checkout@v6 |
| with: |
| repository: encukou/py3c |
| ref: v1.4 |
| path: py3c |
| |
| - name: gen-make |
| run: python ./gen-make.py -t cmake |
| |
| - name: Configure CMake |
| run: > |
| cmake -B out |
| -DBUILD_SHARED_LIBS=${{ matrix.build_shared }} |
| -DSVN_ENABLE_TESTS=ON |
| -DSVN_ENABLE_RA_SERF=ON |
| -DSVN_ENABLE_NLS=ON |
| -DSVN_ENABLE_APACHE_MODULES=${{ runner.os != 'Windows' && 'ON' || 'OFF' }} |
| -DSVN_ENABLE_TUI=ON |
| -DSVN_ENABLE_SWIG_PERL=${{ runner.os != 'Windows' && 'ON' || 'OFF' }} |
| -DSVN_ENABLE_SWIG_PERL_MAN_PAGES=${{ runner.os != 'Windows' && 'ON' || 'OFF' }} |
| -DSVN_ENABLE_SWIG_PYTHON=${{ runner.os != 'Windows' && 'ON' || 'OFF' }} |
| -DSVN_ENABLE_SWIG_RUBY=${{ runner.os != 'Windows' && 'ON' || 'OFF' }} |
| -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/installdir |
| -DVCPKG_TARGET_TRIPLET=${{ matrix.vcpkg_triplet }} |
| -DSVN_TEST_CONFIGURE_FOR_PARALLEL=ON |
| -DSVN_TEST_CHECK_XML_SCHEMA=ON |
| -DPython3_ROOT_DIR="${{ steps.platform.outputs.python_root }}" |
| -DPython3_FIND_REGISTRY=NEVER |
| -DPython3_FIND_STRATEGY=LOCATION |
| -DPython3_FIND_UNVERSIONED_NAMES=FIRST |
| -DPY3C_INCLUDE_DIR=${{ github.workspace }}/py3c/include |
| ${{ matrix.extra_config_opts }} |
| |
| - name: Build CMake |
| run: cmake --build out --config Release |
| |
| - name: Run all tests |
| id: run_all_tests |
| if: matrix.run_tests |
| working-directory: out |
| run: ctest --output-on-failure --verbose -C Release --parallel 16 |
| |
| - name: Test shelf2 |
| if: matrix.run_tests |
| working-directory: out |
| env: |
| SVN_EXPERIMENTAL_COMMANDS: shelf2 |
| run: ctest -R shelf2 --verbose -C Release |
| |
| - name: Test shelf3 |
| if: matrix.run_tests |
| working-directory: out |
| env: |
| SVN_EXPERIMENTAL_COMMANDS: shelf3 |
| run: ctest -R shelf3 --verbose -C Release |
| |
| - name: Install |
| run: cmake --install out --config Release |