move working_dir up #8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and test configuration | ||
|
Check failure on line 1 in .github/workflows/reusable-build-test-config.yml
|
||
| on: | ||
| workflow_call: | ||
| inputs: | ||
| build_dir: | ||
| description: "The directory where to build." | ||
| required: true | ||
| type: string | ||
| build_only: | ||
| description: 'Whether to only build or to build and test the code ("true", "false").' | ||
| required: true | ||
| type: boolean | ||
| build_type: | ||
| description: 'The build type to use ("Debug", "Release").' | ||
| type: string | ||
| required: true | ||
| cmake_args: | ||
| description: "Additional arguments to pass to CMake." | ||
| required: false | ||
| type: string | ||
| default: "" | ||
| cmake_target: | ||
| description: "The CMake target to build." | ||
| type: string | ||
| required: true | ||
| sanitizers: | ||
| description: "The sanitizers to enable ('Address+UndefinedBehaviour' or 'Thread+UndefinedBehaviour')." | ||
| required: true | ||
| type: string | ||
| default: "" | ||
| runs_on: | ||
| description: Runner to run the job on as a JSON string | ||
| required: true | ||
| type: string | ||
| image: | ||
| description: "The image to run in (leave empty to run natively)" | ||
| required: true | ||
| type: string | ||
| config_name: | ||
| description: "The configuration string (used for naming artifacts and such)." | ||
| required: true | ||
| type: string | ||
| nproc_subtract: | ||
| description: "The number of processors to subtract when calculating parallelism." | ||
| required: false | ||
| type: number | ||
| default: 2 | ||
| secrets: | ||
| CODECOV_TOKEN: | ||
| description: "The Codecov token to use for uploading coverage reports." | ||
| required: true | ||
| jobs: | ||
| build-and-test: | ||
| name: ${{ inputs.config_name }} | ||
| runs-on: ${{ fromJSON(inputs.runs_on) }} | ||
| container: ${{ inputs.image != '' && inputs.image || null }} | ||
| timeout-minutes: 60 | ||
| env: | ||
| ENABLED_VOIDSTAR: ${{ contains(inputs.cmake_args, '-Dvoidstar=ON') }} | ||
| ENABLED_COVERAGE: ${{ contains(inputs.cmake_args, '-Dcoverage=ON') }} | ||
| steps: | ||
| - 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@99685816bb60a95a66852f212f382580e180df3a | ||
| with: | ||
| disable_ccache: false | ||
| - name: Print build environment | ||
| uses: ./.github/actions/print-env | ||
| - name: Get number of processors | ||
| uses: XRPLF/actions/.github/actions/get-nproc@046b1620f6bfd6cd0985dc82c3df02786801fe0a | ||
| id: nproc | ||
| with: | ||
| subtract: ${{ inputs.nproc_subtract }} | ||
| - name: Setup Conan | ||
| uses: ./.github/actions/setup-conan | ||
| - name: Build dependencies | ||
| uses: ./.github/actions/build-deps | ||
| with: | ||
| build_dir: ${{ inputs.build_dir }} | ||
| build_nproc: ${{ steps.nproc.outputs.nproc }} | ||
| build_type: ${{ inputs.build_type }} | ||
| sanitizers: ${{ inputs.sanitizers }} | ||
| # Set the verbosity to "quiet" for Windows to avoid an excessive | ||
| # amount of logs. For other OSes, the "verbose" logs are more useful. | ||
| log_verbosity: ${{ runner.os == 'Windows' && 'quiet' || 'verbose' }} | ||
| - name: Configure CMake | ||
| shell: bash | ||
| working-directory: ${{ inputs.build_dir }} | ||
| env: | ||
| BUILD_TYPE: ${{ inputs.build_type }} | ||
| run: | | ||
| cmake .. \ | ||
| -G '${{ runner.os == 'Windows' && 'Visual Studio 17 2022' || 'Ninja' }}' \ | ||
| -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake \ | ||
| -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \ | ||
| ${{ inputs.cmake_args }} | ||
| - name: Build the binary | ||
| shell: bash | ||
| working-directory: ${{ inputs.build_dir }} | ||
| env: | ||
| BUILD_NPROC: ${{ steps.nproc.outputs.nproc }} | ||
| BUILD_TYPE: ${{ inputs.build_type }} | ||
| CMAKE_TARGET: ${{ inputs.cmake_target }} | ||
| run: | | ||
| cmake \ | ||
| --build . \ | ||
| --config "${BUILD_TYPE}" \ | ||
| --parallel "${BUILD_NPROC}" \ | ||
| --target "${CMAKE_TARGET}" | ||
| - name: Upload rippled artifact (Linux) | ||
| if: ${{ runner.os == 'Linux' }} | ||
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | ||
| env: | ||
| BUILD_DIR: ${{ inputs.build_dir }} | ||
| with: | ||
| name: rippled-${{ inputs.config_name }} | ||
| path: ${{ env.BUILD_DIR }}/rippled | ||
| retention-days: 3 | ||
| if-no-files-found: error | ||
| - name: Check linking (Linux) | ||
| if: ${{ runner.os == 'Linux' }} | ||
| working-directory: ${{ inputs.build_dir }} | ||
| shell: bash | ||
| run: | | ||
| ldd ./rippled | ||
| if [ "$(ldd ./rippled | grep -E '(libstdc\+\+|libgcc)' | wc -l)" -eq 0 ]; then | ||
| echo 'The binary is statically linked.' | ||
| else | ||
| echo 'The binary is dynamically linked.' | ||
| exit 1 | ||
| fi | ||
| - name: Verify presence of instrumentation (Linux) | ||
| if: ${{ runner.os == 'Linux' && env.ENABLED_VOIDSTAR == 'true' }} | ||
| working-directory: ${{ inputs.build_dir }} | ||
| shell: bash | ||
| run: | | ||
| ./rippled --version | grep libvoidstar | ||
| - name: Run the separate tests | ||
| if: ${{ !inputs.build_only }} | ||
| working-directory: ${{ inputs.build_dir }} | ||
| with: | ||
| sanitizers_supp_dir: ${{ github.workspace }}/external/ | ||
| # Windows locks some of the build files while running tests, and parallel jobs can collide | ||
| env: | ||
| BUILD_TYPE: ${{ inputs.build_type }} | ||
| PARALLELISM: ${{ runner.os == 'Windows' && '1' || steps.nproc.outputs.nproc }} | ||
| ASAN_OPTIONS: "suppressions=${{ sanitizers_supp_dir }}/asan_suppressions.txt" | ||
| TSAN_OPTIONS: "suppressions=${{ sanitizers_supp_dir }}/tsan_suppressions.txt" | ||
| shell: bash | ||
| run: | | ||
| ctest \ | ||
| --output-on-failure \ | ||
| -C "${BUILD_TYPE}" \ | ||
| -j "${PARALLELISM}" | ||
| - name: Run the embedded tests | ||
| if: ${{ !inputs.build_only }} | ||
| working-directory: ${{ runner.os == 'Windows' && format('{0}/{1}', inputs.build_dir, inputs.build_type) || inputs.build_dir }} | ||
| shell: bash | ||
| env: | ||
| BUILD_NPROC: ${{ steps.nproc.outputs.nproc }} | ||
| run: | | ||
| ./rippled --unittest --unittest-jobs "${BUILD_NPROC}" | ||
| - name: Debug failure (Linux) | ||
| if: ${{ failure() && runner.os == 'Linux' && !inputs.build_only }} | ||
| shell: bash | ||
| run: | | ||
| echo "IPv4 local port range:" | ||
| cat /proc/sys/net/ipv4/ip_local_port_range | ||
| echo "Netstat:" | ||
| netstat -an | ||
| - name: Prepare coverage report | ||
| if: ${{ !inputs.build_only && env.ENABLED_COVERAGE == 'true' }} | ||
| working-directory: ${{ inputs.build_dir }} | ||
| env: | ||
| BUILD_NPROC: ${{ steps.nproc.outputs.nproc }} | ||
| BUILD_TYPE: ${{ inputs.build_type }} | ||
| shell: bash | ||
| run: | | ||
| cmake \ | ||
| --build . \ | ||
| --config "${BUILD_TYPE}" \ | ||
| --parallel "${BUILD_NPROC}" \ | ||
| --target coverage | ||
| - name: Upload coverage report | ||
| if: ${{ github.repository_owner == 'XRPLF' && !inputs.build_only && env.ENABLED_COVERAGE == 'true' }} | ||
| uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 | ||
| with: | ||
| disable_search: true | ||
| disable_telem: true | ||
| fail_ci_if_error: true | ||
| files: ${{ inputs.build_dir }}/coverage.xml | ||
| plugins: noop | ||
| token: ${{ secrets.CODECOV_TOKEN }} | ||
| verbose: true | ||