Nx executes targets out of order when overriding target in `project.json`
JacobLey opened this issue · comments
Current Behavior
When defining a task graph that has tasks defined in both nx.json
and project.json
, it is expected that the dependsOn
is inherited by the nx.json
implemention if not otherwise overridden by project.json
.
In fact, this is consistent with the task graph displayed by nx graph
.
However, when overriding targets in project.json
, the dependency order is not always respected. This conflicts with the graph which claims it still is.
Create two "meta-targets" build
and test
. These are simply nx:noop
executors that point to a series of real targets for user convenicence.
Building is bound to a single target build-impl
.
Testing is bound to two targets test-impl
and report-impl
. These both depend on build
being complete.
For simplicity, these default implementations are a 1 second wait, then logging their name.
report-impl
is overwritten in project.json
to just immediately log the name.
Inspect the task graph nx graph
appears to confirm that a test command would:
- Run build
- Run test
- Generate report
Running nx run foo:test
actually results in the following logs:
-
REPORT
-
BUILD
-
TEST
The report step is executed immediately, despite the dependency graph claiming otherwise.
Expected Behavior
Running nx run foo:test
should result in the following logs:
-
BUILD
-
TEST
-
REPORT
GitHub Repo
https://github.com/JacobLey/issue-recreator/tree/nx-task-dependency-order
Steps to Reproduce
- Set up package as described above, or in example repo's README
pnpm i
- Install necessary packages
- Run
nx graph
- Confirm that the
report-impl
task has bothbuild-imp
andtest-impl
as dependencies
nx run foo:test
- Inspect the console output shows
REPORT
beforeBUILD
(andTEST
), meaning that it did not properly block on a dependency.
Nx Report
Node : 22.4.1
OS : linux-arm64
pnpm : 9.5.0
nx (global) : 19.4.3
nx : 19.4.3
@nrwl/tao : 19.4.3
Failure Logs
No failure logs, just unexpected execution order.
This _can_ easily induce unrelated failure logs, like in the example above trying to execute tests before the build even starts.
Package Manager Version
pnpm 9.5.0
Operating System
- macOS
- Linux
- Windows
- Other (Please specify)
Additional Information
I've tried reducing the example case and don't always see it, but definitely experiencing it 10-fold in my live repo.
Attached is image of nx graph
. While the dependency explanation above may seem a bit unclear, hopefully it is fairly obvious here that a fairly linear execution of tasks is expected here. I agree with the output provided by nx graph
, it is the actual execution of run
that is out of order.