mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
GitHub runners have a limit on how many concurrent jobs they can actually process (even though they will try to run them all at the same time), and similarly the Conan remote cannot handle hundreds of concurrent requests. Previously, the Conan dependency uploading was already limited to max 10 jobs running in parallel, and this change makes the same change to the build+test workflow.
148 lines
5.2 KiB
YAML
148 lines
5.2 KiB
YAML
# This workflow builds and tests the binary for various configurations.
|
|
name: Build and test
|
|
|
|
# This workflow can only be triggered by other workflows. Note that the
|
|
# workflow_call event does not support the 'choice' input type, see
|
|
# https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_callinputsinput_idtype,
|
|
# so we use 'string' instead.
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
build_dir:
|
|
description: "The directory where to build."
|
|
required: false
|
|
type: string
|
|
default: ".build"
|
|
dependencies_force_build:
|
|
description: "Force building of all dependencies."
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
dependencies_force_upload:
|
|
description: "Force uploading of all dependencies."
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
os:
|
|
description: 'The operating system to use for the build ("linux", "macos", "windows").'
|
|
required: true
|
|
type: string
|
|
strategy_matrix:
|
|
# TODO: Support additional strategies, e.g. "ubuntu" for generating all Ubuntu configurations.
|
|
description: 'The strategy matrix to use for generating the configurations ("minimal", "all").'
|
|
required: false
|
|
type: string
|
|
default: "minimal"
|
|
secrets:
|
|
codecov_token:
|
|
description: "The Codecov token to use for uploading coverage reports."
|
|
required: false
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.os }}
|
|
cancel-in-progress: true
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
# Generate the strategy matrix to be used by the following job.
|
|
generate-matrix:
|
|
uses: ./.github/workflows/reusable-strategy-matrix.yml
|
|
with:
|
|
os: ${{ inputs.os }}
|
|
strategy_matrix: ${{ inputs.strategy_matrix }}
|
|
|
|
# Build and test the binary.
|
|
build-test:
|
|
needs:
|
|
- generate-matrix
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }}
|
|
max-parallel: 10
|
|
runs-on: ${{ matrix.architecture.runner }}
|
|
container: ${{ inputs.os == 'linux' && format('ghcr.io/xrplf/ci/{0}-{1}:{2}-{3}', matrix.os.distro_name, matrix.os.distro_version, matrix.os.compiler_name, matrix.os.compiler_version) || null }}
|
|
steps:
|
|
- name: Check strategy matrix
|
|
run: |
|
|
echo 'Operating system distro name: ${{ matrix.os.distro_name }}'
|
|
echo 'Operating system distro version: ${{ matrix.os.distro_version }}'
|
|
echo 'Operating system compiler name: ${{ matrix.os.compiler_name }}'
|
|
echo 'Operating system compiler version: ${{ matrix.os.compiler_version }}'
|
|
echo 'Architecture platform: ${{ matrix.architecture.platform }}'
|
|
echo 'Architecture runner: ${{ toJson(matrix.architecture.runner) }}'
|
|
echo 'Build type: ${{ matrix.build_type }}'
|
|
echo 'Build only: ${{ matrix.build_only }}'
|
|
echo 'CMake arguments: ${{ matrix.cmake_args }}'
|
|
echo 'CMake target: ${{ matrix.cmake_target }}'
|
|
echo 'Config name: ${{ matrix.config_name }}'
|
|
|
|
- name: Cleanup workspace
|
|
if: ${{ runner.os == 'macOS' }}
|
|
uses: XRPLF/actions/.github/actions/cleanup-workspace@3f044c7478548e3c32ff68980eeb36ece02b364e
|
|
|
|
- name: Checkout repository
|
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
- name: Prepare runner
|
|
uses: XRPLF/actions/.github/actions/prepare-runner@638e0dc11ea230f91bd26622fb542116bb5254d5
|
|
with:
|
|
disable_ccache: false
|
|
|
|
- name: Check configuration (Windows)
|
|
if: ${{ inputs.os == 'windows' }}
|
|
run: |
|
|
echo 'Checking environment variables.'
|
|
set
|
|
|
|
echo 'Checking CMake version.'
|
|
cmake --version
|
|
|
|
echo 'Checking Conan version.'
|
|
conan --version
|
|
- name: Check configuration (Linux and MacOS)
|
|
if: ${{ inputs.os == 'linux' || inputs.os == 'macos' }}
|
|
run: |
|
|
echo 'Checking path.'
|
|
echo ${PATH} | tr ':' '\n'
|
|
|
|
echo 'Checking environment variables.'
|
|
env | sort
|
|
|
|
echo 'Checking CMake version.'
|
|
cmake --version
|
|
|
|
echo 'Checking compiler version.'
|
|
${{ inputs.os == 'linux' && '${CC}' || 'clang' }} --version
|
|
|
|
echo 'Checking Conan version.'
|
|
conan --version
|
|
|
|
echo 'Checking Ninja version.'
|
|
ninja --version
|
|
|
|
echo 'Checking nproc version.'
|
|
nproc --version
|
|
|
|
- name: Setup Conan
|
|
uses: ./.github/actions/setup-conan
|
|
|
|
- name: Build dependencies
|
|
uses: ./.github/actions/build-deps
|
|
with:
|
|
build_dir: ${{ inputs.build_dir }}
|
|
build_type: ${{ matrix.build_type }}
|
|
force_build: ${{ inputs.dependencies_force_build }}
|
|
|
|
- name: Build and test binary
|
|
uses: ./.github/actions/build-test
|
|
with:
|
|
build_dir: ${{ inputs.build_dir }}
|
|
build_only: ${{ matrix.build_only }}
|
|
build_type: ${{ matrix.build_type }}
|
|
cmake_args: ${{ matrix.cmake_args }}
|
|
cmake_target: ${{ matrix.cmake_target }}
|
|
codecov_token: ${{ secrets.codecov_token }}
|
|
os: ${{ inputs.os }}
|