summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-04-23Make end-to-end tests independent of the user's configurationKlaus Aehlig
End-to-end tests should, like all tests, be independent of any non-project files the user has in their home directory. This also applies when running the tests locally. In particular, end-to-end tests should not read the user's ~/.just-mrrc. Therefore, properly set --norc in all end-to-end tests (where this is not already the case).
2025-04-22Remove redundant calls to std::filesystem::absoluteMaksim Denisov
...when calling std::filesystem::weakly_canonical, since the latter converts the argument path to an absolute path internally.
2025-04-22FileSystemManager: When copying, take into account equivalent files.Maksim Denisov
2025-04-22FileSystemManager: Always copy directories recursivelyMaksim Denisov
2025-04-22FileSystemManager: Always remove directories recursivelyMaksim Denisov
2025-04-17profile: also honor action cwdKlaus Aehlig
In all presentations of actions to the user, we use output paths relative to the root of the action directory. Therefore, we should do the same in the profile. However, when noting the completion of an action, we get paths as in the wire protocol, i.e., relative to the working directory of the action. Therefore, rebase appropriately.
2025-04-17archive.cpp: eliminate un-needed copies of payloadAlberto Sartori
2025-04-17bazel_msg_factory: avoid copies in lambdas...Alberto Sartori
and while there, replace `auto` with explicit signatures.
2025-04-17bazel_execution_client: eliminate one un-needed copyAlberto Sartori
2025-04-17ServeFailureReporter: use const& to avoid copiesAlberto Sartori
2025-04-17Add test verifying a meaningful invocation log in case of build failureKlaus Aehlig
2025-04-17main: ensure --profile is also honored for failed buildsKlaus Aehlig
We use a pointer to the actual Profile object to handle profiling, if requested. For this to work, actual object needs to stay in scope. However, we handle most of the operations, including parsing of arguments, in a global try-catch block. In order to be able to also correctly write a profile file outside this block, move the scope of the Profile object to top-level in main. While there, also improve the signature of the Profile class. That class is only meaningful, if a profile should eventually be writting to disk. So reflect this in the constructur. Also, once we know the file name to write the profile to (if any), we have already parsed the command line; so the making available of the command line to the profile can be enforced by adding this to the constructor as well. Co-authored-by: Denisov Maksim <denisov.maksim@huawei.com>
2025-04-16just profile: include subcommand and its argumentsKlaus Aehlig
As parsing the the command-line is non-trivial, we include all the relevant information about the command line in the profile. This should also include the subcommand. For sake of completeness, we also include the non-option arguments of the subcommand.
2025-04-16concepts, profiling: clarify scope of --profileKlaus Aehlig
2025-04-16just(1): fix list of subcommands supporting --profileKlaus Aehlig
2025-04-16just profile: include exit code of actionsKlaus Aehlig
Extend the profile by including non-zero exit codes of individual actions. When looking at an individual build invocation, the actions with non-zero exit code are often the interesting ones, like root cause of a build failure, or failing tests. Therefore, it is useful information to include this information; by leaving out the exit code if it is zero, we do not significantly increase the profile.
2025-04-16Add basic tutorial section on invocation loggingKlaus Aehlig
... under the advanced chapter of our tutorial.
2025-04-16README: separate basic tutorial from advanced topicsKlaus Aehlig
While it is useful to have an end-to-end example also for advanced topics, they should not be mixed with the basic tutorial showing how to use the tool to build a typical project (here in C/C++).
2025-04-14clean up markdown in tutorial and conceptsKlaus Aehlig
... and ensure that pandoc processes them correctly. In particular, add an empty line around itemize environments.
2025-04-11README: link profiling documentationKlaus Aehlig
2025-04-11Remove unused function GetTree from BazelCasClientKlaus Aehlig
2025-04-11Drop unused directory mapKlaus Aehlig
The BazelNetworkReader contains an optimization for reading directories in case the remote execution (in compatible mode) supports the GetTree request. This is, however not the case for many remote exeuciton services, including our own single-node execution service. So the code is basically untested and rarely used, if at all. Moreover, justbuild is usually used in native mode and using compatibility mode is expected to handle tree operations less efficient. Therefore, remove this basically dead code and decrease complexity this way.
2025-04-10cas_utils: Fix typo in log messagePaul Cristian Sarbu
2025-04-10BazelAcClient: log cache misses at trace levelKlaus Aehlig
... instead of at debug. We expect actions to be not in cache, so the fact that we experience cache misses is not surprising. Given the information available at this point, a useful logging indicating (in terms meaningful to the user) is not possible. Therefore, keep the debug-level log clean.
2025-04-10FilesystemManger: reduce debug level for absent filesKlaus Aehlig
At various places in the build tool, we try to read files from various CASes and caches. The absence of a file there is normal; therefore, reduce log level in order to not overload the debug-level log.
2025-04-10graph_traverser: drop logging graph-internal identifiersKlaus Aehlig
Those are the sha256sum of the serialisation of an artifact and that serialisation does not end up in the compatible CAS. In other words, they do not refer to anything the user can access. Therefore, drop this message that is not helpful.
2025-04-10Remove unnecessary targets filesKlaus Aehlig
2025-04-09toolchains for protobuf/grpc: include non-debug binaryKlaus Aehlig
While for included libraries, it makes sense to have them with debug symbols (after all, they are linked into a binary depending on it), the toolchain binaries are just called, so there is no point in building debug versions thereof.
2025-04-09Document tree overlays as implemented conceptKlaus Aehlig
2025-04-08Add end-to-end test verifying tree operations work with remote executionKlaus Aehlig
2025-04-08executor: for a tree-overlay action, also report inputs in case of errorKlaus Aehlig
2025-04-08Tree-overlay utils: also report the path within the original treeKlaus Aehlig
... instead of only the file name. Having the full path into the tree makes it more easy for the user to understand the root cause of a conflict.
2025-04-08BazelCasClient: only warn on failure of GetTreeKlaus Aehlig
... as that failure does not necessarily abort the build.
2025-04-08executor: also track begin and end of tree-overlay operationsKlaus Aehlig
Those operations require fetching objects through the network. The fetch is already restricted to only the tree-objects where a merge is necessary, leaving out unchanged trees as well as all blobs. Still, some time may be required, especially over slow networks. Therefore report this activity in the progress.
2025-04-08Extend tree-conflict test to also verify the offending target is reported ↵Klaus Aehlig
properly
2025-04-08Result map: include tree-overlay actions to the origin mapKlaus Aehlig
Now that we generate tree-overlay action identifiers that are disjoint from identifiers of regular actions, having a joint origin map does not cause any confusion. Concerning the numbering of subtasks, we always see tree-overlay actions following the regular actions, even if defined in a different order. In this way, the identifiers for the regular actions don't change. Including tree-overlay actions in the origin map also has the advantage that the origin is properly reported in case of failure (e.g., non-disjointness of the obtained trees).
2025-04-08Keep identifiers for actions, trees, and tree_overlays disjointKlaus Aehlig
While our traverser correctly keeps separate identifier spaces for those entities, having disjoint identifiers allows easier reading of log messages and more simple reporting of origins of actions.
2025-04-08Add end-to-end test for disjoint_tree_overlayKlaus Aehlig
... and verify that - spurious conflicts do not cause failure but instead are handled correctly, and - real conflicts are detected and reported properly.
2025-04-08executor: properly report failure of tree actionsKlaus Aehlig
... calling them as such, and not trying to report command and environment.
2025-04-08Improve reporting on tree errorsKlaus Aehlig
- break lines at logicial point, following the layout of our other error messages - fix a typo - properly quote the path of the conflict
2025-04-08bzip2 binary targets: Clear DEBUG flagPaul Cristian Sarbu
Similarly to other third-party binaries, we should not care if they are built in release or debug mode and as such we explicitly clear the DEBUG flag.
2025-04-08grpc_cpp_plugin target: Clear DEBUG flagPaul Cristian Sarbu
Similarly to the proto compiler, this target is a third-party binary and as such we do not care if it is built in release or debug mode, so always clear the DEBUG flag.
2025-04-08protoc target: Clear DEBUG flagPaul Cristian Sarbu
As we only care about the result of proto targets, we do not care if the proto compiler is built in release or debug mode, so always clear the DEBUG flag for this binary.
2025-04-07CHANGELOG: tree overlays are implementedKlaus Aehlig
2025-04-07Add basic end-to-end test for tree operationsKlaus Aehlig
2025-04-07executor: also handle tree-overlay actionsKlaus Aehlig
2025-04-07bootstrap.py: ignore tree operationsKlaus Aehlig
2025-04-07TreeOperationsUtils: sequential version of tree overlay computationSascha Roloff
2025-04-07graph_traverser: also create tree-overlay actionsKlaus Aehlig
2025-04-07dag: be aware of tree-overlaysKlaus Aehlig