Skip to content

Support serial dependency ordering for actions and targets #552

Description

@lodyai

Problem

Netsuke currently treats dependencies as a graph. A consumer that needs an
aggregate workflow to run named gates in a defined sequence must either nest
netsuke build invocations or create synthetic proxy actions and rules solely
to impose ordering. Both alternatives make the manifest harder to read.

Requirement

Actions and targets should be able to request serial execution of their direct
dependencies. A declarative field such as dependency_order: serial would be
clearer than a bare serial flag.

For a serial dependency list, Netsuke should:

  • run dependencies in declaration order;
  • run a shared dependency at most once for the encompassing build;
  • stop before later dependencies when an earlier dependency fails; and
  • retain the existing parallel behaviour when the field is omitted.

The serial property should affect only the dependencies of the annotated action
or target. It should not act as a global worker limit or accidentally
serialise unrelated graph branches.

Example

Catnap currently implements its comprehensive all action with nested
Netsuke invocations so formatting, linting, tests, and spelling run in order:

https://github.com/leynos/catnap/blob/a4499e3a7c508325a39c2cb46f06532a63172863/Netsukefile#L3-L9

A native serial-dependency feature would allow that action to declare the
ordered gates directly. It would eliminate the nested orchestration while
keeping the public gates independently runnable.

Acceptance criteria

  • Document the action and target syntax and its execution semantics.
  • Preserve declared order in generated Ninja execution.
  • Add regression coverage for ordering, shared dependencies, failure
    short-circuiting, and the unchanged default parallel behaviour.
  • Keep serialisation scoped to the annotated dependency list.

Metadata

Metadata

Assignees

No one assigned

    Labels

    concurrencydocumentationImprovements or additions to documentationenhancementNew feature or requestmediumCould be disruptive, but might not happentesting

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions