From 820f561494e5485c052147b620cca792d2036b3f Mon Sep 17 00:00:00 2001 From: Steven Johnson <sakurainds@gmail.com> Date: Thu, 4 Apr 2024 11:16:56 +0700 Subject: [PATCH] feat(rust): add option to log rust standard builds verbosely --- earthly/rust/scripts/std_build.py | 75 ++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/earthly/rust/scripts/std_build.py b/earthly/rust/scripts/std_build.py index c18ffa84a..0d9d487e6 100755 --- a/earthly/rust/scripts/std_build.py +++ b/earthly/rust/scripts/std_build.py @@ -12,47 +12,51 @@ # to pass without needing to iterate excessively. -def cargo_build(results: exec_manager.Results, flags: str): +def cargo_build(results: exec_manager.Results, flags: str, verbose: bool=False): results.add( exec_manager.cli_run( "cargo build " + "--release " + f"{flags} ", name="Build all code in the workspace", + verbose=verbose, ) ) -def cargo_lint(results: exec_manager.Results, flags: str): +def cargo_lint(results: exec_manager.Results, flags: str, verbose: bool=False): results.add( exec_manager.cli_run( - "cargo lint " + f"{flags}", name="Clippy Lints in the workspace check" + "cargo lint " + f"{flags}", name="Clippy Lints in the workspace check", + verbose=verbose, ) ) -def cargo_doctest(results: exec_manager.Results, flags: str): +def cargo_doctest(results: exec_manager.Results, flags: str, verbose: bool=False): results.add( exec_manager.cli_run( "cargo +nightly testdocs " + f"{flags} ", name="Documentation tests all pass check", + verbose=verbose, ) ) -def cargo_nextest(results: exec_manager.Results, flags: str): +def cargo_nextest(results: exec_manager.Results, flags: str, verbose: bool=False): results.add( exec_manager.cli_run( "cargo testunit " + f"{flags} ", name="Self contained Unit tests all pass check", - verbose=True, + verbose=verbose, ) ) -def cargo_llvm_cov(results: exec_manager.Results, flags: str, cov_report: str): +def cargo_llvm_cov(results: exec_manager.Results, flags: str, cov_report: str, verbose: bool=False): # Remove artifacts that may affect the coverage results res = exec_manager.cli_run( "cargo llvm-cov clean", name="Remove artifacts that may affect the coverage results", + verbose=verbose, ) results.add(res) # Run unit tests and generates test and coverage report artifacts @@ -60,6 +64,7 @@ def cargo_llvm_cov(results: exec_manager.Results, flags: str, cov_report: str): res = exec_manager.cli_run( "cargo testcov " + f"{flags} ", name="Self contained Unit tests and collect coverage", + verbose=verbose, ) results.add(res) # Save coverage report to file if it is provided @@ -70,26 +75,29 @@ def cargo_llvm_cov(results: exec_manager.Results, flags: str, cov_report: str): + "--release " + f"--output-path {cov_report} ", name=f"Generate lcov report to {cov_report}", + verbose=verbose, ) results.add(res) -def cargo_bench(results: exec_manager.Results, flags: str): +def cargo_bench(results: exec_manager.Results, flags: str, verbose: bool=False): results.add( exec_manager.cli_run( "cargo bench " + f"{flags} ", name="Benchmarks all run to completion check", + verbose=verbose, ) ) -def cargo_doc(results: exec_manager.Results): +def cargo_doc(results: exec_manager.Results, verbose: bool=False): results.add( - exec_manager.cli_run("cargo +nightly docs ", name="Documentation build") + exec_manager.cli_run("cargo +nightly docs ", name="Documentation build", + verbose=verbose) ) -def cargo_depgraph(results: exec_manager.Results): +def cargo_depgraph(results: exec_manager.Results, verbose: bool=False): results.add( exec_manager.cli_run( "cargo depgraph " @@ -97,12 +105,14 @@ def cargo_depgraph(results: exec_manager.Results): + "--dedup-transitive-deps " + "> target/doc/workspace.dot ", name="Workspace dependency graphs generation", + verbose=verbose, ) ) results.add( exec_manager.cli_run( "cargo depgraph " + "--dedup-transitive-deps " + "> target/doc/full.dot ", name="Full dependency graphs generation", + verbose=verbose, ) ) results.add( @@ -112,6 +122,7 @@ def cargo_depgraph(results: exec_manager.Results): + "--dedup-transitive-deps " + "> target/doc/all.dot ", name="All dependency graphs generation", + verbose=verbose, ) ) @@ -130,13 +141,14 @@ def cargo_depgraph(results: exec_manager.Results): + "--no-externs --no-fns --no-sysroot --no-traits --no-types --no-uses " ) -def cargo_modules_lib(results: exec_manager.Results, lib: str): +def cargo_modules_lib(results: exec_manager.Results, lib: str, verbose: bool=False): # Check if we have any Orphans. results.add( exec_manager.cli_run( COMMON_CARGO_MODULES_ORPHANS + f"--package '{lib}' --lib", - name=f"Checking Orphans for {lib}", + name=f"Checking Orphans for {lib}", + verbose=verbose ) ) @@ -146,6 +158,7 @@ def cargo_modules_lib(results: exec_manager.Results, lib: str): COMMON_CARGO_MODULES_STRUCTURE + f"--package '{lib}' --lib > 'target/doc/{lib}.lib.modules.tree' ", name=f"Generate Module Trees for {lib}", + verbose=verbose ) ) # Generate graph @@ -154,17 +167,19 @@ def cargo_modules_lib(results: exec_manager.Results, lib: str): COMMON_CARGO_MODULES_DEPENDENCIES + f"--package '{lib}' --lib > 'target/doc/{lib}.lib.modules.dot' ", name=f"Generate Module Graphs for {lib}", + verbose=verbose ) ) -def cargo_modules_bin(results: exec_manager.Results, package: str, bin: str): +def cargo_modules_bin(results: exec_manager.Results, package: str, bin: str, verbose: bool=False): # Check if we have any Orphans. results.add( exec_manager.cli_run( COMMON_CARGO_MODULES_ORPHANS + f"--package '{package}' --bin '{bin}'", name=f"Checking Orphans for {package}/{bin}", + verbose=verbose ) ) @@ -174,6 +189,7 @@ def cargo_modules_bin(results: exec_manager.Results, package: str, bin: str): COMMON_CARGO_MODULES_STRUCTURE + f"--package '{package}' --bin '{bin}' > 'target/doc/{package}.{bin}.bin.modules.tree' ", name=f"Generate Module Trees for {package}/{bin}", + verbose=verbose ) ) # Generate graph @@ -182,16 +198,18 @@ def cargo_modules_bin(results: exec_manager.Results, package: str, bin: str): COMMON_CARGO_MODULES_DEPENDENCIES + f"--package '{package}' --bin '{bin}' > 'target/doc/{package}.{bin}.bin.modules.dot' ", name=f"Generate Module Graphs for {package}/{bin}", + verbose=verbose ) ) # ALL executables MUST have `--help` as an option. -def help_check(results: exec_manager.Results, bin: str): +def help_check(results: exec_manager.Results, bin: str, verbose: bool=False): results.add( exec_manager.cli_run( f"target/release/{bin} --help", name=f"Executable '{bin}' MUST have `--help` as an option.", + verbose=verbose, ) ) @@ -227,6 +245,11 @@ def main(): rich.reconfigure(color_system="256") parser = argparse.ArgumentParser(description="Rust build processing.") + parser.add_argument( + "--verbose", + action="store_true", + help="Show the output of executed commands verbosely.", + ) parser.add_argument( "--build_flags", default="", @@ -289,36 +312,36 @@ def main(): results = exec_manager.Results("Rust build") # Build the code. - cargo_build(results, args.build_flags) + cargo_build(results, args.build_flags, args.verbose) # Check the code passes all clippy lint checks. - cargo_lint(results, args.lint_flags) + cargo_lint(results, args.lint_flags, args.verbose) # Check if all Self contained tests pass (Test that need no external resources). if not args.disable_tests: # Check if all documentation tests pass. - cargo_doctest(results, args.doctest_flags) + cargo_doctest(results, args.doctest_flags, args.verbose) if args.cov_report == "": # Without coverage report - cargo_nextest(results, args.test_flags) + cargo_nextest(results, args.test_flags, args.verbose) else: # With coverage report - cargo_llvm_cov(results, args.test_flags, args.cov_report) + cargo_llvm_cov(results, args.test_flags, args.cov_report, args.verbose) # Check if any benchmarks defined run (We don't validate the results.) if not args.disable_benches: - cargo_bench(results, args.bench_flags) + cargo_bench(results, args.bench_flags, args.verbose) # Generate all the documentation. if not args.disable_docs: # Generate rust docs. - cargo_doc(results) + cargo_doc(results, args.verbose) # Generate dependency graphs - cargo_depgraph(results) + cargo_depgraph(results, args.verbose) for lib in libs: - cargo_modules_lib(results, lib) + cargo_modules_lib(results, lib, args.verbose) for bin in bins: package, bin_name = bin.split("/") - cargo_modules_bin(results, package, bin_name) + cargo_modules_bin(results, package, bin_name, args.verbose) results.print() if not results.ok(): @@ -329,7 +352,7 @@ def main(): for bin in bins: _, bin_name = bin.split("/") - help_check(results, bin_name) + help_check(results, bin_name, args.verbose) ldd(results, bin_name) readelf(results, bin_name) strip(results, bin_name)