pants is a multi-language build tool designed to work with monorepi. It is in the same spirit as buck or blaze/bazel. I think it poses a few interesting curve-balls for the existing arcunit model that might be worth considering when modernization next comes that way:
- pants has it's own (git only?) method for seeing what paths changed. It could probably be made to support working on arbitrary paths, but does not right now. Using that information pants can then generate the full dependency graph and run every test that could be affected (which is pretty sweet.)
- That functionality requires pants to know what to diff against. I think that translates into a way to pass --rev down to the TestEngine and the appropriate "what am I diffing against" settings from arc diff. I'm unsure if arc or the external tool is so obviously the Right Place for this responsibility that arc should be proscriptive or support both. It is probably important to invoke pants only once to avoid repeating tests.
- In a plugin equipped future, where should code for parsing common data formats go? I was happy to be able to use ArcanistXUnitTestResultParser, but both the Nose and Pytest engines have similar (but not the same?!) code for parsing python coverage data.
- Unless pants get's a "spit out results in the format arcanist wants" command each new language pants supports will require support in the PantsTestEngine. That's probably a point in favor of keeping it out of rARC.
Very rough works-on-my-machine (python only) proof of concept is at P1934
A few related mailing list discussions: