# # 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: ["*"] 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-latest build_shared: ON cmake_generator: Ninja vcpkg_triplet: x64-windows arch: x64 run_tests: true - name: Windows, shared, x64, vs2022, with tests os: windows-latest build_shared: ON cmake_generator: 'Visual Studio 17 2022' vcpkg_triplet: x64-windows arch: x64 run_tests: true - name: Windows, shared, x86 os: windows-latest build_shared: ON cmake_generator: Ninja vcpkg_triplet: x86-windows arch: x86 - name: Windows, static, x64, with tests os: windows-latest 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 extra_packages: > libkf5wallet-dev libkf5coreaddons-dev libkf5i18n-dev libdbus-1-dev qtbase5-dev libsecret-1-dev runs-on: ${{ matrix.os }} name: ${{ matrix.name }} env: VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite" CMAKE_GENERATOR: ${{ matrix.cmake_generator }} steps: - name: Prepare Environment (Windows) if: runner.os == 'Windows' run: | $root = "C:\Program Files\Microsoft Visual Studio\2022\Enterprise" Import-Module "$root\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath $root -DevCmdArguments "-arch=${{ matrix.arch }}" ls env: | foreach { "$($_.Name)=$($_.Value)" >> $env:GITHUB_ENV } - name: Prepare Environment (Linux) if: runner.os == 'Windows' run: | # nothing yet - name: Export GitHub Actions cache environment variables if: runner.os == 'Windows' uses: actions/github-script@v7 with: script: | core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); - name: Install dependencies (Windows, vcpkg) if: runner.os == 'Windows' run: | C:\vcpkg\vcpkg.exe install --triplet ${{ matrix.vcpkg_triplet }} ` apr apr-util serf expat zlib sqlite3 "CMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake" >> $env:GITHUB_ENV - 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 ninja-build ${{ matrix.extra_packages }} - name: Use LF for Git checkout run: | git config --global core.autocrlf false git config --global core.eol lf - uses: actions/checkout@v4 - 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 -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/installdir -DVCPKG_TARGET_TRIPLET=${{ matrix.vcpkg_triplet }} -DSVN_TEST_CONFIGURE_FOR_PARALLEL=ON ${{ matrix.extra_config_opts }} - name: Build CMake run: cmake --build out --config Release - name: Install run: cmake --install 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: Rerun failed tests if: ${{ matrix.run_tests && failure() && steps.run_all_tests.conclusion == 'failure' }} working-directory: out run: ctest --output-on-failure --verbose -C Release --rerun-failed