DavidSpickett wrote:

I tried a few more things, so I will summarise everything up until this point. 
There are two layers here:
1. Making test reports.
2. Producing the XML test results.

Using the buildkite plugin is not an option 
(https://github.com/llvm/llvm-project/pull/113290) because we'd need docker or 
a fork of the plugin. Our own test reporting script is the only way to generate 
the reports. This decides `#1`, unless we want to leave it as is until the move 
to GitHub actions.

For `#2` the following ideas don't work:

* `tail ---follow --retry results_file > combined_results_file`, then splitting 
it up in the reporting script
  * Does not work because tail does not print the whole file on truncation. We 
would miss data.

* `mkfifo` and a listener script to write it out to unique files 
(https://github.com/llvm/llvm-project/pull/113703)
  * Works great on Linux but -
  * `mkfifo` fails silently in bash for Windows. There are no plans to fix that 
any time soon.
  * I could try 
https://learn.microsoft.com/en-us/windows/win32/ipc/named-pipes, but I suspect 
this would be even more code, and folks are already wary of adding too much to 
this system as it is.

* Using `ninja check-all`
  * Does not allow us to disable testing of a project, but still build it.
  * Does not help with runtimes tests that are separate builds.

These could work but have tradeoffs:

* Using the lit feature `--unique-output...` (this PR)
  * Built into lit (for now).
  * Minimal changes to scripts and pipeline.
    * New arguments for LLVM_LIT_ARGS.
    * Run the report generator on exit.
  * Risk of exposing an option publicly that we no longer need when the 
pipeline is re-written.
    * I could RFC that option and drum up interest in it from other users and 
external projects, if that would help. I have not done so up to now because it 
might have looked like I was trying to bias this discussion.

* Changing the build scripts to `ninja target` `mv result_file unique_name` in 
a loop (https://github.com/llvm/llvm-project/pull/113660)
  * The most script changes of any solution.
  * No changes to report generator.
  * Small bonus - result files are named after their check target (though I 
wonder if some check targets run lit multiple times, in which case this is 
actually a bug not a bonus).

* Wrapping lit in a Python script that will catch the output file name 
argument, run lit, then move the file to a unique name 
(https://github.com/llvm/llvm-project/pull/113896)
  * It works, albeit in a fiddly way because of differences in `.py` or not 
between Windows and Linux.
  * We have to re-wrap lit every time cmake is run (what I have implemented) or 
-
  * We configure in another directory, patch that lit, and configure with 
`-DLLVM_EXTERNAL_LIT=<path to the other lit>` (which I have yet to test)
  * We're not using the actual lit, though the chances of a regression because 
of that are pretty low. `ninja check-lit` does still work, so though we aren't 
testing what we ship, it's pretty close.

Are any of these solutions acceptable? Is there anything else I could do to 
address your concerns with any of these?

If folks think it's just too close to a move to GitHub Actions and full 
pipeline rewrite (which I fully support doing), then I will shelve all this. 
However, personally I'd like better test reporting even if it is only for 2/3 
months until the new system appears.

https://github.com/llvm/llvm-project/pull/113447
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to