-
-
Notifications
You must be signed in to change notification settings - Fork 413
Description
From the maintainer Li Haoyi: I'm putting a 1000USD bounty on this issue, payable by bank transfer on a merged PR implementing this.
The goal of this is to make -w
/--watch
only run tasks/commands that are downstream of changed Task.Source
files or Task.Input
, so that if you watch multiple commands (e.g. webserver.runBackground
and webclient.deploy
), only the tasks relevant to a change get re-run.
Background
I think my use case is a pretty common need. I'm developing in full-stack Scala: some JVM modules, some ScalaJS modules, and some shared dependencies of both. I want a fast feedback loop. When code in a JS or shared module changes, it needs to rebundle it, and when code in a JVM or shared module changes, it needs to recompile it and restart the server.
I don't need hot reload of the javascript code (that would be even better but let's get to first base first), but I do need to reload the page after rebundling JS or rebooting the server completes, but I'm accomplishing that outside of the build tool so let's ignore that aspect of things.
In my case, the target to bundle the JS and put it in the right place is app_js.getScalaJs
, and restarting the backend is done with app_lrbcol.runBackground
.
I've been doing this with two separate Mill processes. tmuxp is useful for this; my config contained
panes:
- mill -j 16 -w app_lrbcol.runBackground
- docker compose up db
- sleep 5; mill -j 16 -w app_js.getScalaJs
However, at the moment Mill isn't designed for multiple processes like this (see e.g., #3454). #3519 may fix this, but I recently was reminded that Mill supports multiple parallel targets.
The issue
So I tried this command instead:
mill -j 0 -w app_lrbcol.runBackground + app_js.getScalaJs
However this doesn't do what I want. If I make a change to ScalaJS code, even if it doesn't compile, it still causes runBackground
to run.
It would be better IMO if somehow watch mode could apply to each target independently, instead of what it seems to be doing, namely aggregating a single watch list of files and any of them cause the compound target to run.