Compare commits

..

3 Commits

Author SHA1 Message Date
Michael Legleux
8585055d6e fix output 2026-02-27 17:20:40 -08:00
Michael Legleux
a35308399d readable ui output 2026-02-27 17:16:57 -08:00
Michael Legleux
8068a7b513 Trigger run 2026-02-27 15:57:17 -08:00
25 changed files with 93 additions and 46 deletions

View File

@@ -10,7 +10,6 @@ Checks: "-*,
bugprone-copy-constructor-init,
bugprone-dangling-handle,
bugprone-dynamic-static-initializers,
bugprone-empty-catch,
bugprone-fold-init-type,
bugprone-forward-declaration-namespace,
bugprone-inaccurate-erase,
@@ -84,6 +83,7 @@ Checks: "-*,
# ---
# checks that have some issues that need to be resolved:
#
# bugprone-empty-catch,
# bugprone-crtp-constructor-accessibility,
# bugprone-inc-dec-in-conditions,
# bugprone-reserved-identifier,

View File

@@ -32,10 +32,13 @@ We will further set additional CMake arguments as follows:
"""
def generate_strategy_matrix(all: bool, config: Config) -> list:
def generate_strategy_matrix(all: bool, config: Config, distro: str = "") -> list:
configurations = []
os_entries = config.os
if distro:
os_entries = [o for o in os_entries if o["distro_name"] == distro]
for architecture, os, build_type, cmake_args in itertools.product(
config.architecture, config.os, config.build_type, config.cmake_args
config.architecture, os_entries, config.build_type, config.cmake_args
):
# The default CMake target is 'all' for Linux and MacOS and 'install'
# for Windows, but it can get overridden for certain configurations.
@@ -223,7 +226,7 @@ def generate_strategy_matrix(all: bool, config: Config) -> list:
if (n := os["compiler_version"]) != "":
config_name += f"-{n}"
config_name += (
f"-{architecture['platform'][architecture['platform'].find('/')+1:]}"
f"-{architecture['platform'][architecture['platform'].find('/') + 1 :]}"
)
config_name += f"-{build_type.lower()}"
if "-Dcoverage=ON" in cmake_args:
@@ -313,21 +316,32 @@ if __name__ == "__main__":
required=False,
type=Path,
)
parser.add_argument(
"-d",
"--distro",
help="Filter OS entries to only include those with this distro_name (e.g. 'debian', 'rhel', 'ubuntu').",
required=False,
type=str,
default="",
)
args = parser.parse_args()
matrix = []
if args.config is None or args.config == "":
matrix += generate_strategy_matrix(
args.all, read_config(THIS_DIR / "linux.json")
args.all, read_config(THIS_DIR / "linux.json"), args.distro
)
matrix += generate_strategy_matrix(
args.all, read_config(THIS_DIR / "macos.json")
args.all, read_config(THIS_DIR / "macos.json"), args.distro
)
matrix += generate_strategy_matrix(
args.all, read_config(THIS_DIR / "windows.json")
args.all, read_config(THIS_DIR / "windows.json"), args.distro
)
else:
matrix += generate_strategy_matrix(args.all, read_config(args.config))
matrix += generate_strategy_matrix(
args.all, read_config(args.config), args.distro
)
# Generate the strategy matrix.
print(f"matrix={json.dumps({'include': matrix})}")
# print(json.dumps(matrix, indent=2))

View File

@@ -128,12 +128,23 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [linux, macos, windows]
include:
- os: linux
distro: debian
- os: linux
distro: rhel
- os: linux
distro: ubuntu
- os: macos
distro: ""
- os: windows
distro: ""
with:
# Enable ccache only for events targeting the XRPLF repository, since
# other accounts will not have access to our remote cache storage.
ccache_enabled: ${{ github.repository_owner == 'XRPLF' }}
os: ${{ matrix.os }}
distro: ${{ matrix.distro }}
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

View File

@@ -77,7 +77,17 @@ jobs:
strategy:
fail-fast: ${{ github.event_name == 'merge_group' }}
matrix:
os: [linux, macos, windows]
include:
- os: linux
distro: debian
- os: linux
distro: rhel
- os: linux
distro: ubuntu
- os: macos
distro: ""
- os: windows
distro: ""
with:
# Enable ccache only for events targeting the XRPLF repository, since
# other accounts will not have access to our remote cache storage.
@@ -86,6 +96,7 @@ jobs:
# not identical to a regular compilation.
ccache_enabled: ${{ github.repository_owner == 'XRPLF' && !startsWith(github.ref, 'refs/heads/release') }}
os: ${{ matrix.os }}
distro: ${{ matrix.distro }}
strategy_matrix: ${{ github.event_name == 'schedule' && 'all' || 'minimal' }}
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

View File

@@ -26,6 +26,12 @@ on:
type: string
default: "minimal"
distro:
description: 'Filter to only include configs for this distro (e.g. "debian", "rhel", "ubuntu"). Leave empty for no filtering.'
required: false
type: string
default: ""
secrets:
CODECOV_TOKEN:
description: "The Codecov token to use for uploading coverage reports."
@@ -38,9 +44,11 @@ jobs:
with:
os: ${{ inputs.os }}
strategy_matrix: ${{ inputs.strategy_matrix }}
distro: ${{ inputs.distro }}
# Build and test the binary for each configuration.
build-test-config:
name: ${{ matrix.config_name }}
needs:
- generate-matrix
uses: ./.github/workflows/reusable-build-test-config.yml

View File

@@ -13,6 +13,11 @@ on:
required: false
type: string
default: "minimal"
distro:
description: 'Filter to only include configs for this distro (e.g. "debian", "rhel", "ubuntu"). Leave empty for no filtering.'
required: false
type: string
default: ""
outputs:
matrix:
description: "The generated strategy matrix."
@@ -42,4 +47,5 @@ jobs:
env:
GENERATE_CONFIG: ${{ inputs.os != '' && format('--config={0}.json', inputs.os) || '' }}
GENERATE_OPTION: ${{ inputs.strategy_matrix == 'all' && '--all' || '' }}
run: ./generate.py ${GENERATE_OPTION} ${GENERATE_CONFIG} >> "${GITHUB_OUTPUT}"
GENERATE_DISTRO: ${{ inputs.distro != '' && format('--distro={0}', inputs.distro) || '' }}
run: ./generate.py ${GENERATE_OPTION} ${GENERATE_CONFIG} ${GENERATE_DISTRO} >> "${GITHUB_OUTPUT}"

View File

@@ -176,8 +176,6 @@ words:
- nixfmt
- nixos
- nixpkgs
- NOLINT
- NOLINTNEXTLINE
- nonxrp
- noripple
- nudb

View File

@@ -249,7 +249,7 @@ public:
{
m_timer.cancel();
}
catch (boost::system::system_error const&) // NOLINT(bugprone-empty-catch)
catch (boost::system::system_error const&)
{
// ignored
}

View File

@@ -83,7 +83,7 @@ public:
// close can throw and we don't want the destructor to throw.
close();
}
catch (nudb::system_error const&) // NOLINT(bugprone-empty-catch)
catch (nudb::system_error const&)
{
// Don't allow exceptions to propagate out of destructors.
// close() has already logged the error.

View File

@@ -443,7 +443,6 @@ getRate(STAmount const& offerOut, STAmount const& offerIn)
{
if (offerOut == beast::zero)
return 0;
try
{
STAmount r = divide(offerIn, offerOut, noIssue());
@@ -455,11 +454,12 @@ getRate(STAmount const& offerOut, STAmount const& offerIn)
std::uint64_t ret = r.exponent() + 100;
return (ret << (64 - 8)) | r.mantissa();
}
catch (...)
catch (std::exception const&)
{
// overflow -- very bad offer
return 0;
}
// overflow -- very bad offer
return 0;
}
/**

View File

@@ -246,10 +246,10 @@ STTx::checkSign(Rules const& rules, STObject const& sigObject) const
return signingPubKey.empty() ? checkMultiSign(rules, sigObject)
: checkSingleSign(sigObject);
}
catch (...)
catch (std::exception const&)
{
return Unexpected("Internal signature check failure.");
}
return Unexpected("Internal signature check failure.");
}
Expected<void, std::string>

View File

@@ -1126,8 +1126,8 @@ toClaim(STTx const& tx)
}
catch (...)
{
return std::nullopt;
}
return std::nullopt;
}
template <class TAttestation>

View File

@@ -71,7 +71,7 @@ public:
{
setupDatabaseDir(getDatabasePath());
}
catch (std::exception const&) // NOLINT(bugprone-empty-catch)
catch (std::exception const&)
{
}
}
@@ -81,7 +81,7 @@ public:
{
cleanupDatabaseDir(getDatabasePath());
}
catch (std::exception const&) // NOLINT(bugprone-empty-catch)
catch (std::exception const&)
{
}
}

View File

@@ -58,7 +58,7 @@ public:
{
setupDatabaseDir(getDatabasePath());
}
catch (std::exception const&) // NOLINT(bugprone-empty-catch)
catch (std::exception const&)
{
}
}
@@ -68,7 +68,7 @@ public:
{
cleanupDatabaseDir(getDatabasePath());
}
catch (std::exception const&) // NOLINT(bugprone-empty-catch)
catch (std::exception const&)
{
}
}

View File

@@ -587,10 +587,10 @@ Env::st(JTx const& jt)
{
return sterilize(STTx{std::move(*obj)});
}
catch (...)
catch (std::exception const&)
{
return nullptr;
}
return nullptr;
}
std::shared_ptr<STTx const>
@@ -613,10 +613,10 @@ Env::ust(JTx const& jt)
{
return std::make_shared<STTx const>(std::move(*obj));
}
catch (...)
catch (std::exception const&)
{
return nullptr;
}
return nullptr;
}
Json::Value

View File

@@ -339,8 +339,8 @@ validDocumentID(AnyValue const& v)
}
catch (...)
{
return false;
}
return false;
}
} // namespace oracle

View File

@@ -107,7 +107,6 @@ class WSClientImpl : public WSClient
{
stream_.cancel();
}
// NOLINTNEXTLINE(bugprone-empty-catch)
catch (boost::system::system_error const&)
{
// ignored

View File

@@ -35,7 +35,7 @@ TEST(scope, scope_exit)
scope_exit x{[&i]() { i = 5; }};
throw 1;
}
catch (...) // NOLINT(bugprone-empty-catch)
catch (...)
{
}
}
@@ -47,7 +47,7 @@ TEST(scope, scope_exit)
x.release();
throw 1;
}
catch (...) // NOLINT(bugprone-empty-catch)
catch (...)
{
}
}
@@ -85,7 +85,7 @@ TEST(scope, scope_fail)
scope_fail x{[&i]() { i = 5; }};
throw 1;
}
catch (...) // NOLINT(bugprone-empty-catch)
catch (...)
{
}
}
@@ -97,7 +97,7 @@ TEST(scope, scope_fail)
x.release();
throw 1;
}
catch (...) // NOLINT(bugprone-empty-catch)
catch (...)
{
}
}
@@ -135,7 +135,7 @@ TEST(scope, scope_success)
scope_success x{[&i]() { i = 5; }};
throw 1;
}
catch (...) // NOLINT(bugprone-empty-catch)
catch (...)
{
}
}
@@ -147,7 +147,7 @@ TEST(scope, scope_success)
x.release();
throw 1;
}
catch (...) // NOLINT(bugprone-empty-catch)
catch (...)
{
}
}

View File

@@ -241,7 +241,7 @@ public:
newNode->getHash().as_uint256(), std::make_shared<Blob>(s.begin(), s.end()));
}
}
catch (std::exception const&) // NOLINT(bugprone-empty-catch)
catch (std::exception const&)
{
}
}

View File

@@ -1637,7 +1637,7 @@ LedgerMaster::getLedgerBySeq(std::uint32_t index)
if (hash)
return mLedgerHistory.getLedgerByHash(*hash);
}
catch (std::exception const&) // NOLINT(bugprone-empty-catch)
catch (std::exception const&)
{
// Missing nodes are already handled
}

View File

@@ -127,7 +127,7 @@ SkipListAcquire::processData(
return;
}
}
catch (...) // NOLINT(bugprone-empty-catch)
catch (...)
{
}

View File

@@ -29,7 +29,7 @@ getEndpoint(std::string const& peer)
if (endpoint)
return beast::IP::to_asio_endpoint(endpoint.value());
}
catch (std::exception const&) // NOLINT(bugprone-empty-catch)
catch (std::exception const&)
{
}
return {};

View File

@@ -177,7 +177,7 @@ ValidatorSite::stop()
{
timer_.cancel();
}
catch (boost::system::system_error const&) // NOLINT(bugprone-empty-catch)
catch (boost::system::system_error const&)
{
}
stopping_ = false;
@@ -222,7 +222,7 @@ ValidatorSite::makeRequest(
{
timer_.cancel_one();
}
catch (boost::system::system_error const&) // NOLINT(bugprone-empty-catch)
catch (boost::system::system_error const&)
{
}
};

View File

@@ -252,7 +252,7 @@ ConnectAttempt::cancelTimer()
timer_.cancel();
stepTimer_.cancel();
}
catch (boost::system::system_error const&) // NOLINT(bugprone-empty-catch)
catch (boost::system::system_error const&)
{
// ignored
}

View File

@@ -1479,7 +1479,7 @@ rpcClient(
setup = setup_ServerHandler(
config, beast::logstream{logs.journal("HTTPClient").warn()});
}
catch (std::exception const&) // NOLINT(bugprone-empty-catch)
catch (std::exception const&)
{
// ignore any exceptions, so the command
// line client works without a config file