From 01133a59abc3ae78cf4cf9a0086201f5727b2f31 Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Mon, 4 Aug 2025 20:04:06 -0700 Subject: [PATCH 1/2] chore: formatting --- .github/workflows/main.yml | 2 +- ecsact/cli/commands/benchmark.cc | 63 +++++++++++------- ecsact/cli/commands/build.cc | 14 ++-- ecsact/cli/commands/build/build_recipe.cc | 36 ++++++----- ecsact/cli/commands/build/cc_compiler.cc | 54 +++++++++------- ecsact/cli/commands/build/recipe/cook.cc | 23 ++++--- ecsact/cli/commands/codegen/codegen.cc | 14 ++-- .../recipe-bundle/build_recipe_bundle.cc | 7 +- ecsact/cli/detail/proc_exec.cc | 64 +++++++++++-------- ecsact/cli/report.hh | 52 +++++++++------ test/build_recipe/ecsact_build_test_merge.cc | 12 +++- test/build_recipe/test_build_recipe.cc | 42 ++++++------ test/build_recipe/test_build_recipe_bundle.cc | 34 +++++----- test/test_codegen.cc | 16 +++-- test/test_codegen_multi_output.cc | 16 +++-- 15 files changed, 266 insertions(+), 183 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 261ee61..2897fa0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,7 +22,7 @@ jobs: - uses: actions/checkout@v4 - uses: greut/eclint-action@v0 - uses: jidicula/clang-format-action@v4.11.0 - with: { clang-format-version: "19" } + with: { clang-format-version: "20" } test-windows: if: >- diff --git a/ecsact/cli/commands/benchmark.cc b/ecsact/cli/commands/benchmark.cc index 5d32e4b..cc20faf 100644 --- a/ecsact/cli/commands/benchmark.cc +++ b/ecsact/cli/commands/benchmark.cc @@ -251,17 +251,21 @@ static auto print_last_error_if_available( stdout_json_benchmark_reporter& reporter ) -> bool { if(!runtime.has("ecsactsi_wasm_last_error_message")) { - reporter.report(warning_message{ - "Cannot get wasm error message because " - "'ecsactsi_wasm_last_error_message' is missing", - }); + reporter.report( + warning_message{ + "Cannot get wasm error message because " + "'ecsactsi_wasm_last_error_message' is missing", + } + ); return false; } if(!runtime.has("ecsactsi_wasm_last_error_message_length")) { - reporter.report(warning_message{ - "Cannot get wasm error message because " - "'ecsactsi_wasm_last_error_message_length' is missing", - }); + reporter.report( + warning_message{ + "Cannot get wasm error message because " + "'ecsactsi_wasm_last_error_message_length' is missing", + } + ); return false; } @@ -406,9 +410,11 @@ auto start_async_benchmark( async_evc.system_error_callback = // [](ecsact_execute_systems_error err, void* user_data) { auto vars_ptr = static_cast(user_data); - vars_ptr->reporter.report(error_message{ - "System Execution Error: " + std::string(magic_enum::enum_name(err)), - }); + vars_ptr->reporter.report( + error_message{ + "System Execution Error: " + std::string(magic_enum::enum_name(err)), + } + ); }; async_evc.async_error_callback_user_data = &vars; @@ -424,14 +430,19 @@ auto start_async_benchmark( for(auto& req_id : req_ids) { if(req_id == vars_ptr->connect_req_id) { - vars_ptr->reporter.report(error_message{ - "Async connect failed: "s + std::string(magic_enum::enum_name(err)), - }); + vars_ptr->reporter.report( + error_message{ + "Async connect failed: "s + + std::string(magic_enum::enum_name(err)), + } + ); } else { - vars_ptr->reporter.report(error_message{ - "Async error (req="s + std::to_string(static_cast(req_id)) + - "): "s + std::string(magic_enum::enum_name(err)), - }); + vars_ptr->reporter.report( + error_message{ + "Async error (req="s + std::to_string(static_cast(req_id)) + + "): "s + std::string(magic_enum::enum_name(err)), + } + ); } } @@ -450,9 +461,11 @@ auto start_async_benchmark( for(auto req_id : req_ids) { if(req_id == vars_ptr->connect_req_id) { vars_ptr->connected = true; - vars_ptr->reporter.report(info_message{ - "Async successfully connected", - }); + vars_ptr->reporter.report( + info_message{ + "Async successfully connected", + } + ); } } }; @@ -503,9 +516,11 @@ auto start_async_benchmark( } if(tick >= options.iterations) { - options.reporter.report(info_message{ - "Async benchmark ended at tick " + std::to_string(tick), - }); + options.reporter.report( + info_message{ + "Async benchmark ended at tick " + std::to_string(tick), + } + ); break; } } diff --git a/ecsact/cli/commands/build.cc b/ecsact/cli/commands/build.cc index 2fe29e9..200264c 100644 --- a/ecsact/cli/commands/build.cc +++ b/ecsact/cli/commands/build.cc @@ -248,12 +248,14 @@ auto ecsact::cli::detail::build_command( // if(!eval_errors.empty()) { for(auto eval_error : eval_errors) { auto err_source_path = file_paths[eval_error.source_index]; - ecsact::cli::report(ecsact_error_message{ - .ecsact_source_path = err_source_path.generic_string(), - .message = eval_error.error_message, - .line = eval_error.line, - .character = eval_error.character, - }); + ecsact::cli::report( + ecsact_error_message{ + .ecsact_source_path = err_source_path.generic_string(), + .message = eval_error.error_message, + .line = eval_error.line, + .character = eval_error.character, + } + ); } return 1; diff --git a/ecsact/cli/commands/build/build_recipe.cc b/ecsact/cli/commands/build/build_recipe.cc index cbf1115..2e960f1 100644 --- a/ecsact/cli/commands/build/build_recipe.cc +++ b/ecsact/cli/commands/build/build_recipe.cc @@ -225,13 +225,15 @@ static auto parse_sources( // if(src["outdir"]) { outdir = src["outdir"].as(); } - result.emplace_back(source_fetch{ - .url = fetch.as(), - .integrity = integrity, - .strip_prefix = strip_prefix, - .outdir = outdir, - .paths = paths, - }); + result.emplace_back( + source_fetch{ + .url = fetch.as(), + .integrity = integrity, + .strip_prefix = strip_prefix, + .outdir = outdir, + .paths = paths, + } + ); } else if(path) { auto src_path = fs::path{path.as()}; auto outdir = std::optional{}; @@ -248,17 +250,21 @@ static auto parse_sources( // src_path = src_path.lexically_normal(); } - result.emplace_back(source_path{ - .path = src_path, - .outdir = outdir, - }); + result.emplace_back( + source_path{ + .path = src_path, + .outdir = outdir, + } + ); } } else if(src.IsScalar()) { auto path = fs::path{src.as()}.lexically_normal(); - result.emplace_back(source_path{ - .path = path, - .outdir = ".", - }); + result.emplace_back( + source_path{ + .path = path, + .outdir = ".", + } + ); } } diff --git a/ecsact/cli/commands/build/cc_compiler.cc b/ecsact/cli/commands/build/cc_compiler.cc index db0488a..0717015 100644 --- a/ecsact/cli/commands/build/cc_compiler.cc +++ b/ecsact/cli/commands/build/cc_compiler.cc @@ -129,11 +129,13 @@ static auto vsdevcmd_env_var( auto subcommand_id = static_cast(extract_script_proc.id()); - ecsact::cli::report(subcommand_start_message{ - .id = subcommand_id, - .executable = vsdevcmd_path.string(), - .arguments = {env_var_name}, - }); + ecsact::cli::report( + subcommand_start_message{ + .id = subcommand_id, + .executable = vsdevcmd_path.string(), + .arguments = {env_var_name}, + } + ); auto line = std::string{}; while(std::getline(std_is, line, ';')) { @@ -146,19 +148,23 @@ static auto vsdevcmd_env_var( while(std::getline(err_is, line)) { boost::trim(line); if(!line.empty()) { - ecsact::cli::report(ecsact::cli::subcommand_stderr_message{ - .id = subcommand_id, - .line = line - }); + ecsact::cli::report( + ecsact::cli::subcommand_stderr_message{ + .id = subcommand_id, + .line = line + } + ); } } extract_script_proc.wait(); - ecsact::cli::report(subcommand_end_message{ - .id = subcommand_id, - .exit_code = extract_script_proc.exit_code(), - }); + ecsact::cli::report( + subcommand_end_message{ + .id = subcommand_id, + .exit_code = extract_script_proc.exit_code(), + } + ); return result; } @@ -235,21 +241,25 @@ static auto cc_vswhere( // auto subcommand_id = static_cast(vswhere_proc.id()); - ecsact::cli::report(subcommand_start_message{ - .id = subcommand_id, - .executable = vswhere->generic_string(), - .arguments = vswhere_proc_args, - }); + ecsact::cli::report( + subcommand_start_message{ + .id = subcommand_id, + .executable = vswhere->generic_string(), + .arguments = vswhere_proc_args, + } + ); auto vswhere_output = nlohmann::json::parse(vswhere_output_stream); vswhere_proc.wait(); auto vswhere_exit_code = vswhere_proc.exit_code(); - ecsact::cli::report(subcommand_end_message{ - .id = subcommand_id, - .exit_code = vswhere_exit_code, - }); + ecsact::cli::report( + subcommand_end_message{ + .id = subcommand_id, + .exit_code = vswhere_exit_code, + } + ); if(!vswhere_output.is_array()) { ecsact::cli::report_error( diff --git a/ecsact/cli/commands/build/recipe/cook.cc b/ecsact/cli/commands/build/recipe/cook.cc index 85242ba..82d6158 100644 --- a/ecsact/cli/commands/build/recipe/cook.cc +++ b/ecsact/cli/commands/build/recipe/cook.cc @@ -836,8 +836,8 @@ auto cl_compile(compile_options options) -> int { src_compile_exit_code_futures.reserve(valid_srcs.size()); for(auto src : valid_srcs) { - src_compile_exit_code_futures - .emplace_back(std::async(std::launch::async, [&, src] { + src_compile_exit_code_futures.emplace_back( + std::async(std::launch::async, [&, src] { auto src_cl_args = cl_args; src_cl_args.push_back("/c"); src_cl_args.push_back(std::format("@{}", main_params_file.string())); @@ -850,17 +850,20 @@ auto cl_compile(compile_options options) -> int { src_cl_args.push_back("/std:c++20"); } - src_cl_args.push_back(std::format( - "/Fo{}\\", // typos:disable-line - long_path_workaround(intermediate_dir).string() - )); + src_cl_args.push_back( + std::format( + "/Fo{}\\", // typos:disable-line + long_path_workaround(intermediate_dir).string() + ) + ); return ecsact::cli::detail::spawn_and_report( options.compiler.compiler_path, src_cl_args, reporter ); - })); + }) + ); } auto any_src_compile_failures = false; @@ -890,9 +893,9 @@ auto cl_compile(compile_options options) -> int { cl_args.push_back(obj_f.string()); } - auto obj_params_file = - create_params_file(long_path_workaround(options.work_dir / "object.params") - ); + auto obj_params_file = create_params_file( + long_path_workaround(options.work_dir / "object.params") + ); cl_args.push_back("/Fo:"); // typos:disable-line cl_args.push_back( diff --git a/ecsact/cli/commands/codegen/codegen.cc b/ecsact/cli/commands/codegen/codegen.cc index 2657709..064a42a 100644 --- a/ecsact/cli/commands/codegen/codegen.cc +++ b/ecsact/cli/commands/codegen/codegen.cc @@ -133,9 +133,9 @@ auto ecsact::cli::codegen(codegen_options options) -> int { plugin.get("ecsact_dylib_has_fn"); } - auto dylib_set_fn_addr = - plugin.get("ecsact_dylib_set_fn_addr" - ); + auto dylib_set_fn_addr = plugin.get( + "ecsact_dylib_set_fn_addr" + ); auto set_meta_fn_ptr = [&](const char* fn_name, auto fn_ptr) { if(dylib_has_fn && !dylib_has_fn(fn_name)) { @@ -258,9 +258,11 @@ auto ecsact::cli::codegen(codegen_options options) -> int { if(options.only_print_output_files) { for(auto& output_file_path : plugin_output_paths) { - report(output_path_message{ - fs::weakly_canonical(output_file_path).generic_string() - }); + report( + output_path_message{ + fs::weakly_canonical(output_file_path).generic_string() + } + ); } plugin.unload(); continue; diff --git a/ecsact/cli/commands/recipe-bundle/build_recipe_bundle.cc b/ecsact/cli/commands/recipe-bundle/build_recipe_bundle.cc index e986491..9bab653 100644 --- a/ecsact/cli/commands/recipe-bundle/build_recipe_bundle.cc +++ b/ecsact/cli/commands/recipe-bundle/build_recipe_bundle.cc @@ -254,12 +254,13 @@ auto ecsact::build_recipe_bundle::create( // continue; } - auto plugin_file_path = - cli::resolve_plugin_path(cli::resolve_plugin_path_options{ + auto plugin_file_path = cli::resolve_plugin_path( + cli::resolve_plugin_path_options{ .plugin_arg = plugin, .default_plugins_dir = recipe.base_directory(), .additional_plugin_dirs = {recipe.base_directory()}, - }); + } + ); if(!plugin_file_path) { return std::logic_error{ diff --git a/ecsact/cli/detail/proc_exec.cc b/ecsact/cli/detail/proc_exec.cc index 6d42f37..624416a 100644 --- a/ecsact/cli/detail/proc_exec.cc +++ b/ecsact/cli/detail/proc_exec.cc @@ -42,27 +42,33 @@ auto ecsact::cli::detail::spawn_and_report( // auto subcommand_id = static_cast(proc.id()); - ecsact::cli::report(subcommand_start_message{ - .id = subcommand_id, - .executable = exe.string(), - .arguments = args, - }); + ecsact::cli::report( + subcommand_start_message{ + .id = subcommand_id, + .executable = exe.string(), + .arguments = args, + } + ); auto line = std::string{}; while(proc_stdout && std::getline(proc_stdout, line)) { - auto msg = reporter.on_std_out(line).value_or(subcommand_stdout_message{ - .id = subcommand_id, - .line = line, - }); + auto msg = reporter.on_std_out(line).value_or( + subcommand_stdout_message{ + .id = subcommand_id, + .line = line, + } + ); ecsact::cli::report(msg); } while(proc_stderr && std::getline(proc_stderr, line)) { - auto msg = reporter.on_std_err(line).value_or(subcommand_stderr_message{ - .id = subcommand_id, - .line = line, - }); + auto msg = reporter.on_std_err(line).value_or( + subcommand_stderr_message{ + .id = subcommand_id, + .line = line, + } + ); ecsact::cli::report(msg); } @@ -70,10 +76,12 @@ auto ecsact::cli::detail::spawn_and_report( // auto proc_exit_code = proc.exit_code(); - ecsact::cli::report(subcommand_end_message{ - .id = subcommand_id, - .exit_code = proc_exit_code, - }); + ecsact::cli::report( + subcommand_end_message{ + .id = subcommand_id, + .exit_code = proc_exit_code, + } + ); return proc_exit_code; } @@ -96,11 +104,13 @@ auto ecsact::cli::detail::spawn_and_report_output( // auto subcommand_id = static_cast(proc.id()); - ecsact::cli::report(subcommand_start_message{ - .id = subcommand_id, - .executable = exe.string(), - .arguments = args, - }); + ecsact::cli::report( + subcommand_start_message{ + .id = subcommand_id, + .executable = exe.string(), + .arguments = args, + } + ); ecsact::cli::report_stdout(subcommand_id, proc_stdout); ecsact::cli::report_stderr(subcommand_id, proc_stderr); @@ -109,10 +119,12 @@ auto ecsact::cli::detail::spawn_and_report_output( // auto proc_exit_code = proc.exit_code(); - ecsact::cli::report(subcommand_end_message{ - .id = subcommand_id, - .exit_code = proc_exit_code, - }); + ecsact::cli::report( + subcommand_end_message{ + .id = subcommand_id, + .exit_code = proc_exit_code, + } + ); return proc_exit_code; } diff --git a/ecsact/cli/report.hh b/ecsact/cli/report.hh index 1e4fde5..76ebfb3 100644 --- a/ecsact/cli/report.hh +++ b/ecsact/cli/report.hh @@ -18,40 +18,50 @@ auto set_report_filter(report_filter) -> void; template auto report_error(std::format_string fmt, Args&&... args) -> void { - report(error_message{ - .content = std::format(fmt, std::forward(args)...), - }); + report( + error_message{ + .content = std::format(fmt, std::forward(args)...), + } + ); } template auto report_info(std::format_string fmt, Args&&... args) -> void { - report(info_message{ - .content = std::format(fmt, std::forward(args)...), - }); + report( + info_message{ + .content = std::format(fmt, std::forward(args)...), + } + ); } template auto report_warning(std::format_string fmt, Args&&... args) -> void { - report(warning_message{ - .content = std::format(fmt, std::forward(args)...), - }); + report( + warning_message{ + .content = std::format(fmt, std::forward(args)...), + } + ); } template auto report_success(std::format_string fmt, Args&&... args) -> void { - report(success_message{ - .content = std::format(fmt, std::forward(args)...), - }); + report( + success_message{ + .content = std::format(fmt, std::forward(args)...), + } + ); } template auto report_stdout(subcommand_id_t id, OutputStream&& output) -> void { auto line = std::string{}; while(output && std::getline(output, line)) { - report(subcommand_stdout_message{ - .id = id, - .line = line, - }); + report( + subcommand_stdout_message{ + .id = id, + .line = line, + } + ); } } @@ -59,10 +69,12 @@ template auto report_stderr(subcommand_id_t id, OutputStream&& output) -> void { auto line = std::string{}; while(output && std::getline(output, line)) { - report(subcommand_stderr_message{ - .id = id, - .line = line, - }); + report( + subcommand_stderr_message{ + .id = id, + .line = line, + } + ); } } diff --git a/test/build_recipe/ecsact_build_test_merge.cc b/test/build_recipe/ecsact_build_test_merge.cc index 7755237..7829057 100644 --- a/test/build_recipe/ecsact_build_test_merge.cc +++ b/test/build_recipe/ecsact_build_test_merge.cc @@ -5,8 +5,16 @@ # error "This test should only have been built through 'ecsact build'" #endif -void ecsact_system_execution_context_get(struct ecsact_system_execution_context*, ecsact_component_like_id, void*, const void*) { +void ecsact_system_execution_context_get( + struct ecsact_system_execution_context*, + ecsact_component_like_id, + void*, + const void* +) { } -void ecsact_system_execution_context_action(struct ecsact_system_execution_context*, void*) { +void ecsact_system_execution_context_action( + struct ecsact_system_execution_context*, + void* +) { } diff --git a/test/build_recipe/test_build_recipe.cc b/test/build_recipe/test_build_recipe.cc index 35468b3..3381292 100644 --- a/test/build_recipe/test_build_recipe.cc +++ b/test/build_recipe/test_build_recipe.cc @@ -30,28 +30,32 @@ TEST(Build, Success) { ASSERT_TRUE(fs::exists(test_ecsact_file_path)); ASSERT_TRUE(fs::exists(test_build_recipe_path)); - auto exit_code = build_command(std::vector{ - "ecsact"s, - "build"s, - "--allow-unresolved-imports"s, - std::string{test_ecsact_file_path}, - std::format("--recipe={}", test_build_recipe_path), - "--output=test_ecsact_runtime"s, - "--temp_dir=_test_build_recipe_temp"s, - "--debug"s, - }); + auto exit_code = build_command( + std::vector{ + "ecsact"s, + "build"s, + "--allow-unresolved-imports"s, + std::string{test_ecsact_file_path}, + std::format("--recipe={}", test_build_recipe_path), + "--output=test_ecsact_runtime"s, + "--temp_dir=_test_build_recipe_temp"s, + "--debug"s, + } + ); ASSERT_EQ(exit_code, 0); - exit_code = build_command(std::vector{ - "ecsact"s, - "build"s, - std::string{test_ecsact_file_path}, - std::format("--recipe={}", test_build_recipe_path), - std::format("--recipe={}", test_build_merge_recipe_path), - "--output=test_ecsact_runtime_merged"s, - "--temp_dir=_test_build_recipe_temp2"s, - }); + exit_code = build_command( + std::vector{ + "ecsact"s, + "build"s, + std::string{test_ecsact_file_path}, + std::format("--recipe={}", test_build_recipe_path), + std::format("--recipe={}", test_build_merge_recipe_path), + "--output=test_ecsact_runtime_merged"s, + "--temp_dir=_test_build_recipe_temp2"s, + } + ); ASSERT_EQ(exit_code, 0); } diff --git a/test/build_recipe/test_build_recipe_bundle.cc b/test/build_recipe/test_build_recipe_bundle.cc index 6c00a75..6740e46 100644 --- a/test/build_recipe/test_build_recipe_bundle.cc +++ b/test/build_recipe/test_build_recipe_bundle.cc @@ -32,24 +32,28 @@ TEST(Build, Success) { ASSERT_TRUE(fs::exists(test_ecsact_file_path)); ASSERT_TRUE(fs::exists(test_build_recipe_path)); - auto exit_code = recipe_bundle_command(std::vector{ - "ecsact"s, - "recipe-bundle"s, - std::string{test_build_recipe_path}, - std::string{test_build_merge_recipe_path}, - "--output=test"s, - }); + auto exit_code = recipe_bundle_command( + std::vector{ + "ecsact"s, + "recipe-bundle"s, + std::string{test_build_recipe_path}, + std::string{test_build_merge_recipe_path}, + "--output=test"s, + } + ); ASSERT_EQ(exit_code, 0); - exit_code = build_command(std::vector{ - "ecsact"s, - "build"s, - std::string{test_ecsact_file_path}, - "--recipe=test"s, - "--output=test_bundle_runtime"s, - "--temp_dir=_test_bundle_runtime_temp"s, - }); + exit_code = build_command( + std::vector{ + "ecsact"s, + "build"s, + std::string{test_ecsact_file_path}, + "--recipe=test"s, + "--output=test_bundle_runtime"s, + "--temp_dir=_test_bundle_runtime_temp"s, + } + ); ASSERT_EQ(exit_code, 0); } diff --git a/test/test_codegen.cc b/test/test_codegen.cc index 4adadcb..9232773 100644 --- a/test/test_codegen.cc +++ b/test/test_codegen.cc @@ -36,13 +36,15 @@ TEST(Codegen, Success) { #if _WIN32 // TODO: this doesn't work on linux - auto exit_code = codegen_command(std::vector{ - "ecsact"s, - "codegen"s, - std::string{test_ecsact_file_path}, - std::format("--plugin={}", test_codegen_plugin_path), - "--outdir=_test_codegen_outdir"s, - }); + auto exit_code = codegen_command( + std::vector{ + "ecsact"s, + "codegen"s, + std::string{test_ecsact_file_path}, + std::format("--plugin={}", test_codegen_plugin_path), + "--outdir=_test_codegen_outdir"s, + } + ); #else auto cmd = std::format( "{} codegen {} --plugin={} --outdir=_test_codegen_outdir", diff --git a/test/test_codegen_multi_output.cc b/test/test_codegen_multi_output.cc index acb89af..45dc20f 100644 --- a/test/test_codegen_multi_output.cc +++ b/test/test_codegen_multi_output.cc @@ -46,13 +46,15 @@ TEST(Codegen, Success) { #if _WIN32 // TODO: this doesn't work on linux - auto exit_code = codegen_command(std::vector{ - "ecsact"s, - "codegen"s, - std::string{test_ecsact_file_path}, - std::format("--plugin={}", test_codegen_plugin_path), - "--outdir=_test_codegen_outdir"s, - }); + auto exit_code = codegen_command( + std::vector{ + "ecsact"s, + "codegen"s, + std::string{test_ecsact_file_path}, + std::format("--plugin={}", test_codegen_plugin_path), + "--outdir=_test_codegen_outdir"s, + } + ); #else auto cmd = std::format( "{} codegen {} --plugin={} --outdir=_test_codegen_outdir", From c9b6c04a5cd3f5c522274c0e77c39f25e2d7db5b Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Mon, 4 Aug 2025 20:23:34 -0700 Subject: [PATCH 2/2] chore: update formatting ci --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2897fa0..52d3476 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,7 +21,7 @@ jobs: steps: - uses: actions/checkout@v4 - uses: greut/eclint-action@v0 - - uses: jidicula/clang-format-action@v4.11.0 + - uses: jidicula/clang-format-action@v4.15.0 with: { clang-format-version: "20" } test-windows: