-
-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Plugging in Eastwood into the test runner #179
Comments
Hi! This sounds great! We have been a bit busy in the team recently, but will soon look into this and come back to you. Cheers, |
Hi again, Adding support for a linter like Eastwood could be solved with the custom commands that I'm working on right now. The support for auto-complete got me a bit stuck with that issue, but the new plan is to maybe ship it without it to begin with, to be able to release a new version of the /Joakim |
Hey there, that's awesome news! Thank you for your work. Looking forward. |
Could this be solved by the pluggable test runner feature in #196? |
I guess so from the PR name, but also don't know given the lack of an extended description atm |
Hey there, I'm the author of #196. While I normally consider linting and testing separate steps, I understand eastwood is a little more involved than other linters like clj-kondo so it might be more fitting to consider it part of the testing step where namespaces are actually loaded. The changes proposed in #196 should provide a usable integration for this. You could implement the TestRunner protocol, make it invoke eastwood inside the project classloader and then delegate to poly's default test runner for executing unit tests. It would also be possible in a later feature addition to allow a chain of "test" runners to be configured for a workspace, which could be executed one after another within the same class loader. I haven't considered this option for extension for #196 but it should be an additive change. Do note, that poly doesn't currently calculate changed namespaces, only changed files, bricks and projects. |
Actually, stay tuned for that multiple test runners support. |
Using #196 it is now possible to configure multiple test runners for a project. Here's an excerpt from {;; To use it as the default test runner for the workspace
:test {:create-test-runner my.test-runner/create}
:projects
{
;; To only use it for specific projects
"foo" {:test {:create-test-runner my.test-runner/create}}
;; To revert to poly's built-in default test runner only for specific projects
"bar" {:test {:create-test-runner :default}}
;; To use multiple test runners invoked in series
"baz" {:test {:create-test-runner [my.linter/create :default my.extra/create]}}
}
} |
Does the new pluggable test runner solve your problem @vemv ? |
Hi! Sorry, I don't have much time in my hands nowadays. I don't use poly at my new job either 😔 Could I have an empty project with the boilerplate filled? Config + stubbed protocol implementation. I could definitely check out that and see if it can be easily filled with an Eastwood implementation. |
@vemv not a stub per se but an example implementation using kaocha: https://github.com/imrekoszo/polylith-kaocha |
Thanks! Quickly eyeing https://github.com/imrekoszo/polylith-kaocha/blob/f8536b683842ac1d70eb1e1ab918be0369c43ce5/components/kaocha-test-runner/src/polylith_kaocha/kaocha_test_runner/core.clj, it looks a little more dense than I would have expected (not a criticism). I'll give it a go when I find a good chance. |
As most of the action in kaocha's case needs to happen inside the classloader of the project under test, the code you linked is really only responsible for creating the interface between polylith and kaocha. Most of the kaocha-specific action (which the code you linked will invoke) happens in https://github.com/imrekoszo/polylith-kaocha/tree/f8536b683842ac1d70eb1e1ab918be0369c43ce5/components/kaocha-wrapper/src/polylith_kaocha/kaocha_wrapper |
Context / Problem statement
Eastwood is a linter that provides unique insights, complementing other linter offerings such as clj-kondo's.
It has the nuance that its runtime grows linearly with codebase size - could be some 8-10m for a 100KLOC codebase.
My understanding is that Polylith has some built-in logic that looks at Git diffs and only runs relevant tests.
Proposal
Offer the reuse of that logic for running other test runners or linters, in this case Eastwood.
I don't know much about Poly internals or if this is available already. I'd be willing to implement an Eastwood integration if a nice API/hook is offered.
Alternatives
In the past I've run Eastwood for git-diff-derived workloads via a project called formatting-stack; it works nicely but currently I'm not promoting that project much.
Something that would be integrated with an existing framework would seem a nicer choice for most teams out there.
WYDT?
Cheers - V
The text was updated successfully, but these errors were encountered: