Merge branch 'develop' into pratik/Add-sanitizers-to-CI-builds

Signed-off-by: Pratik Mankawde <pmankawde@ripple.com>
This commit is contained in:
Pratik Mankawde
2025-11-11 18:30:47 +00:00
6 changed files with 97 additions and 70 deletions

View File

@@ -61,6 +61,10 @@ on:
description: "The Codecov token to use for uploading coverage reports." description: "The Codecov token to use for uploading coverage reports."
required: true required: true
defaults:
run:
shell: bash
jobs: jobs:
build-and-test: build-and-test:
name: ${{ inputs.config_name }} name: ${{ inputs.config_name }}
@@ -107,7 +111,6 @@ jobs:
log_verbosity: ${{ runner.os == 'Windows' && 'quiet' || 'verbose' }} log_verbosity: ${{ runner.os == 'Windows' && 'quiet' || 'verbose' }}
- name: Configure CMake - name: Configure CMake
shell: bash
working-directory: ${{ inputs.build_dir }} working-directory: ${{ inputs.build_dir }}
env: env:
BUILD_TYPE: ${{ inputs.build_type }} BUILD_TYPE: ${{ inputs.build_type }}
@@ -120,7 +123,6 @@ jobs:
${{ inputs.cmake_args }} ${{ inputs.cmake_args }}
- name: Build the binary - name: Build the binary
shell: bash
working-directory: ${{ inputs.build_dir }} working-directory: ${{ inputs.build_dir }}
env: env:
BUILD_NPROC: ${{ steps.nproc.outputs.nproc }} BUILD_NPROC: ${{ steps.nproc.outputs.nproc }}
@@ -147,7 +149,6 @@ jobs:
- name: Check linking (Linux) - name: Check linking (Linux)
if: ${{ runner.os == 'Linux' }} if: ${{ runner.os == 'Linux' }}
working-directory: ${{ inputs.build_dir }} working-directory: ${{ inputs.build_dir }}
shell: bash
run: | run: |
ldd ./rippled ldd ./rippled
if [ "$(ldd ./rippled | grep -E '(libstdc\+\+|libgcc)' | wc -l)" -eq 0 ]; then if [ "$(ldd ./rippled | grep -E '(libstdc\+\+|libgcc)' | wc -l)" -eq 0 ]; then
@@ -160,7 +161,6 @@ jobs:
- name: Verify presence of instrumentation (Linux) - name: Verify presence of instrumentation (Linux)
if: ${{ runner.os == 'Linux' && env.ENABLED_VOIDSTAR == 'true' }} if: ${{ runner.os == 'Linux' && env.ENABLED_VOIDSTAR == 'true' }}
working-directory: ${{ inputs.build_dir }} working-directory: ${{ inputs.build_dir }}
shell: bash
run: | run: |
./rippled --version | grep libvoidstar ./rippled --version | grep libvoidstar
@@ -173,7 +173,6 @@ jobs:
PARALLELISM: ${{ runner.os == 'Windows' && '1' || steps.nproc.outputs.nproc }} PARALLELISM: ${{ runner.os == 'Windows' && '1' || steps.nproc.outputs.nproc }}
# ASAN_OPTIONS: suppressions=${GITHUB_WORKSPACE}/external/asan_suppressions.txt # ASAN_OPTIONS: suppressions=${GITHUB_WORKSPACE}/external/asan_suppressions.txt
# TSAN_OPTIONS: suppressions=${GITHUB_WORKSPACE}/external/tsan_suppressions.txt # TSAN_OPTIONS: suppressions=${GITHUB_WORKSPACE}/external/tsan_suppressions.txt
shell: bash
run: | run: |
ctest \ ctest \
--output-on-failure \ --output-on-failure \
@@ -183,7 +182,6 @@ jobs:
- name: Run the embedded tests - name: Run the embedded tests
if: ${{ !inputs.build_only }} if: ${{ !inputs.build_only }}
working-directory: ${{ runner.os == 'Windows' && format('{0}/{1}', inputs.build_dir, inputs.build_type) || inputs.build_dir }} working-directory: ${{ runner.os == 'Windows' && format('{0}/{1}', inputs.build_dir, inputs.build_type) || inputs.build_dir }}
shell: bash
env: env:
BUILD_NPROC: ${{ steps.nproc.outputs.nproc }} BUILD_NPROC: ${{ steps.nproc.outputs.nproc }}
run: | run: |
@@ -191,7 +189,6 @@ jobs:
- name: Debug failure (Linux) - name: Debug failure (Linux)
if: ${{ failure() && runner.os == 'Linux' && !inputs.build_only }} if: ${{ failure() && runner.os == 'Linux' && !inputs.build_only }}
shell: bash
run: | run: |
echo "IPv4 local port range:" echo "IPv4 local port range:"
cat /proc/sys/net/ipv4/ip_local_port_range cat /proc/sys/net/ipv4/ip_local_port_range
@@ -204,7 +201,6 @@ jobs:
env: env:
BUILD_NPROC: ${{ steps.nproc.outputs.nproc }} BUILD_NPROC: ${{ steps.nproc.outputs.nproc }}
BUILD_TYPE: ${{ inputs.build_type }} BUILD_TYPE: ${{ inputs.build_type }}
shell: bash
run: | run: |
cmake \ cmake \
--build . \ --build . \

View File

@@ -18,6 +18,10 @@ on:
description: "The generated strategy matrix." description: "The generated strategy matrix."
value: ${{ jobs.generate-matrix.outputs.matrix }} value: ${{ jobs.generate-matrix.outputs.matrix }}
defaults:
run:
shell: bash
jobs: jobs:
generate-matrix: generate-matrix:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View File

@@ -40,6 +40,10 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }} group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true cancel-in-progress: true
defaults:
run:
shell: bash
jobs: jobs:
# Generate the strategy matrix to be used by the following job. # Generate the strategy matrix to be used by the following job.
generate-matrix: generate-matrix:

View File

@@ -78,12 +78,15 @@ namespace detail {
#undef XRPL_FEATURE #undef XRPL_FEATURE
#pragma push_macro("XRPL_FIX") #pragma push_macro("XRPL_FIX")
#undef XRPL_FIX #undef XRPL_FIX
#pragma push_macro("XRPL_RETIRE") #pragma push_macro("XRPL_RETIRE_FEATURE")
#undef XRPL_RETIRE #undef XRPL_RETIRE_FEATURE
#pragma push_macro("XRPL_RETIRE_FIX")
#undef XRPL_RETIRE_FIX
#define XRPL_FEATURE(name, supported, vote) +1 #define XRPL_FEATURE(name, supported, vote) +1
#define XRPL_FIX(name, supported, vote) +1 #define XRPL_FIX(name, supported, vote) +1
#define XRPL_RETIRE(name) +1 #define XRPL_RETIRE_FEATURE(name) +1
#define XRPL_RETIRE_FIX(name) +1
// This value SHOULD be equal to the number of amendments registered in // This value SHOULD be equal to the number of amendments registered in
// Feature.cpp. Because it's only used to reserve storage, and determine how // Feature.cpp. Because it's only used to reserve storage, and determine how
@@ -94,8 +97,10 @@ static constexpr std::size_t numFeatures =
#include <xrpl/protocol/detail/features.macro> #include <xrpl/protocol/detail/features.macro>
); );
#undef XRPL_RETIRE #undef XRPL_RETIRE_FEATURE
#pragma pop_macro("XRPL_RETIRE") #pragma pop_macro("XRPL_RETIRE_FEATURE")
#undef XRPL_RETIRE_FIX
#pragma pop_macro("XRPL_RETIRE_FIX")
#undef XRPL_FIX #undef XRPL_FIX
#pragma pop_macro("XRPL_FIX") #pragma pop_macro("XRPL_FIX")
#undef XRPL_FEATURE #undef XRPL_FEATURE
@@ -339,17 +344,22 @@ foreachFeature(FeatureBitset bs, F&& f)
#undef XRPL_FEATURE #undef XRPL_FEATURE
#pragma push_macro("XRPL_FIX") #pragma push_macro("XRPL_FIX")
#undef XRPL_FIX #undef XRPL_FIX
#pragma push_macro("XRPL_RETIRE") #pragma push_macro("XRPL_RETIRE_FEATURE")
#undef XRPL_RETIRE #undef XRPL_RETIRE_FEATURE
#pragma push_macro("XRPL_RETIRE_FIX")
#undef XRPL_RETIRE_FIX
#define XRPL_FEATURE(name, supported, vote) extern uint256 const feature##name; #define XRPL_FEATURE(name, supported, vote) extern uint256 const feature##name;
#define XRPL_FIX(name, supported, vote) extern uint256 const fix##name; #define XRPL_FIX(name, supported, vote) extern uint256 const fix##name;
#define XRPL_RETIRE(name) #define XRPL_RETIRE_FEATURE(name)
#define XRPL_RETIRE_FIX(name)
#include <xrpl/protocol/detail/features.macro> #include <xrpl/protocol/detail/features.macro>
#undef XRPL_RETIRE #undef XRPL_RETIRE_FEATURE
#pragma pop_macro("XRPL_RETIRE") #pragma pop_macro("XRPL_RETIRE_FEATURE")
#undef XRPL_RETIRE_FIX
#pragma pop_macro("XRPL_RETIRE_FIX")
#undef XRPL_FIX #undef XRPL_FIX
#pragma pop_macro("XRPL_FIX") #pragma pop_macro("XRPL_FIX")
#undef XRPL_FEATURE #undef XRPL_FEATURE

View File

@@ -4,8 +4,11 @@
#if !defined(XRPL_FIX) #if !defined(XRPL_FIX)
#error "undefined macro: XRPL_FIX" #error "undefined macro: XRPL_FIX"
#endif #endif
#if !defined(XRPL_RETIRE) #if !defined(XRPL_RETIRE_FEATURE)
#error "undefined macro: XRPL_RETIRE" #error "undefined macro: XRPL_RETIRE_FEATURE"
#endif
#if !defined(XRPL_RETIRE_FIX)
#error "undefined macro: XRPL_RETIRE_FIX"
#endif #endif
// Add new amendments to the top of this list. // Add new amendments to the top of this list.
@@ -90,45 +93,46 @@ XRPL_FEATURE(CryptoConditionsSuite, Supported::yes, VoteBehavior::Obsolete)
// All known amendments and amendments that may appear in a validated ledger // All known amendments and amendments that may appear in a validated ledger
// must be registered either here or above with the "active" amendments // must be registered either here or above with the "active" amendments
// //
// Please keep this list sorted alphabetically for convenience. // Please keep both lists sorted alphabetically for convenience.
XRPL_RETIRE(fix1201) XRPL_RETIRE_FIX(1201)
XRPL_RETIRE(fix1368) XRPL_RETIRE_FIX(1368)
XRPL_RETIRE(fix1373) XRPL_RETIRE_FIX(1373)
XRPL_RETIRE(fix1512) XRPL_RETIRE_FIX(1512)
XRPL_RETIRE(fix1513) XRPL_RETIRE_FIX(1513)
XRPL_RETIRE(fix1515) XRPL_RETIRE_FIX(1515)
XRPL_RETIRE(fix1523) XRPL_RETIRE_FIX(1523)
XRPL_RETIRE(fix1528) XRPL_RETIRE_FIX(1528)
XRPL_RETIRE(fix1543) XRPL_RETIRE_FIX(1543)
XRPL_RETIRE(fix1571) XRPL_RETIRE_FIX(1571)
XRPL_RETIRE(fix1578) XRPL_RETIRE_FIX(1578)
XRPL_RETIRE(fix1623) XRPL_RETIRE_FIX(1623)
XRPL_RETIRE(fix1781) XRPL_RETIRE_FIX(1781)
XRPL_RETIRE(fixAmendmentMajorityCalc) XRPL_RETIRE_FIX(AmendmentMajorityCalc)
XRPL_RETIRE(fixCheckThreading) XRPL_RETIRE_FIX(CheckThreading)
XRPL_RETIRE(fixMasterKeyAsRegularKey) XRPL_RETIRE_FIX(MasterKeyAsRegularKey)
XRPL_RETIRE(fixNonFungibleTokensV1_2) XRPL_RETIRE_FIX(NonFungibleTokensV1_2)
XRPL_RETIRE(fixNFTokenRemint) XRPL_RETIRE_FIX(NFTokenRemint)
XRPL_RETIRE(fixPayChanRecipientOwnerDir) XRPL_RETIRE_FIX(PayChanRecipientOwnerDir)
XRPL_RETIRE(fixQualityUpperBound) XRPL_RETIRE_FIX(QualityUpperBound)
XRPL_RETIRE(fixReducedOffersV1) XRPL_RETIRE_FIX(ReducedOffersV1)
XRPL_RETIRE(fixRmSmallIncreasedQOffers) XRPL_RETIRE_FIX(RmSmallIncreasedQOffers)
XRPL_RETIRE(fixSTAmountCanonicalize) XRPL_RETIRE_FIX(STAmountCanonicalize)
XRPL_RETIRE(fixTakerDryOfferRemoval) XRPL_RETIRE_FIX(TakerDryOfferRemoval)
XRPL_RETIRE(fixTrustLinesToSelf) XRPL_RETIRE_FIX(TrustLinesToSelf)
XRPL_RETIRE(CheckCashMakesTrustLine)
XRPL_RETIRE(CryptoConditions) XRPL_RETIRE_FEATURE(CheckCashMakesTrustLine)
XRPL_RETIRE(DepositAuth) XRPL_RETIRE_FEATURE(CryptoConditions)
XRPL_RETIRE(DepositPreauth) XRPL_RETIRE_FEATURE(DepositAuth)
XRPL_RETIRE(Escrow) XRPL_RETIRE_FEATURE(DepositPreauth)
XRPL_RETIRE(EnforceInvariants) XRPL_RETIRE_FEATURE(Escrow)
XRPL_RETIRE(FeeEscalation) XRPL_RETIRE_FEATURE(EnforceInvariants)
XRPL_RETIRE(FlowCross) XRPL_RETIRE_FEATURE(FeeEscalation)
XRPL_RETIRE(HardenedValidations) XRPL_RETIRE_FEATURE(FlowCross)
XRPL_RETIRE(ImmediateOfferKilled) XRPL_RETIRE_FEATURE(HardenedValidations)
XRPL_RETIRE(MultiSign) XRPL_RETIRE_FEATURE(ImmediateOfferKilled)
XRPL_RETIRE(NonFungibleTokensV1_1) XRPL_RETIRE_FEATURE(MultiSign)
XRPL_RETIRE(PayChan) XRPL_RETIRE_FEATURE(NonFungibleTokensV1_1)
XRPL_RETIRE(SortedDirectories) XRPL_RETIRE_FEATURE(PayChan)
XRPL_RETIRE(TickSize) XRPL_RETIRE_FEATURE(SortedDirectories)
XRPL_RETIRE(TrustSetAuth) XRPL_RETIRE_FEATURE(TickSize)
XRPL_RETIRE_FEATURE(TrustSetAuth)

View File

@@ -411,8 +411,10 @@ featureToName(uint256 const& f)
#undef XRPL_FEATURE #undef XRPL_FEATURE
#pragma push_macro("XRPL_FIX") #pragma push_macro("XRPL_FIX")
#undef XRPL_FIX #undef XRPL_FIX
#pragma push_macro("XRPL_RETIRE") #pragma push_macro("XRPL_RETIRE_FEATURE")
#undef XRPL_RETIRE #undef XRPL_RETIRE_FEATURE
#pragma push_macro("XRPL_RETIRE_FIX")
#undef XRPL_RETIRE_FIX
#define XRPL_FEATURE(name, supported, vote) \ #define XRPL_FEATURE(name, supported, vote) \
uint256 const feature##name = registerFeature(#name, supported, vote); uint256 const feature##name = registerFeature(#name, supported, vote);
@@ -420,16 +422,23 @@ featureToName(uint256 const& f)
uint256 const fix##name = registerFeature("fix" #name, supported, vote); uint256 const fix##name = registerFeature("fix" #name, supported, vote);
// clang-format off // clang-format off
#define XRPL_RETIRE(name) \ #define XRPL_RETIRE_FEATURE(name) \
[[deprecated("The referenced amendment has been retired")]] \ [[deprecated("The referenced feature amendment has been retired")]] \
[[maybe_unused]] \ [[maybe_unused]] \
uint256 const retired##name = retireFeature(#name); uint256 const retiredFeature##name = retireFeature(#name);
#define XRPL_RETIRE_FIX(name) \
[[deprecated("The referenced fix amendment has been retired")]] \
[[maybe_unused]] \
uint256 const retiredFix##name = retireFeature("fix" #name);
// clang-format on // clang-format on
#include <xrpl/protocol/detail/features.macro> #include <xrpl/protocol/detail/features.macro>
#undef XRPL_RETIRE #undef XRPL_RETIRE_FEATURE
#pragma pop_macro("XRPL_RETIRE") #pragma pop_macro("XRPL_RETIRE_FEATURE")
#undef XRPL_RETIRE_FIX
#pragma pop_macro("XRPL_RETIRE_FIX")
#undef XRPL_FIX #undef XRPL_FIX
#pragma pop_macro("XRPL_FIX") #pragma pop_macro("XRPL_FIX")
#undef XRPL_FEATURE #undef XRPL_FEATURE