Skip to content

A task being pulled back in because of if-dependencies doesn't pull its own dependencies back in if they're also if-dependencies #711

@Eijebong

Description

@Eijebong

I'm assuming that fixing #710 would also fix this one but this is where it began

Assuming the following

loader: taskgraph.loader.transform:loader

transforms:
  - taskgraph.transforms.task

task-defaults:
  worker-type: succeed

tasks:
  task-a:
    label: task-a
    optimization:
      skip-unless-changed: ["world"]
    description: task-a

  task-apush-a:
    label: task-apush-a
    dependencies:
      task-a: task-a
    if-dependencies:
      - task-a
    description: task-push-a

  task-b:
    label: task-b
    description: task-b

  final:
    label: final
    dependencies:
      task-push-a: task-apush-a
      task-b: task-b
    if-dependencies:
      - task-push-a
      - task-b
    description: final
2025-06-23 17:49:11,994 - INFO - Generating optimized task graph
2025-06-23 17:49:11,994 - DEBUG - no files found matching a pattern in `skip-unless-changed` for "task-a"
2025-06-23 17:49:11,994 - DEBUG - optimize: final kept because of never
2025-06-23 17:49:11,994 - DEBUG - optimize: task-apush-a kept because of dependent tasks
2025-06-23 17:49:11,994 - DEBUG - optimize: task-b kept because of never
2025-06-23 17:49:11,994 - DEBUG - optimize: task-a removed because of if-dependencies pruning
2025-06-23 17:49:11,994 - INFO - Removed 1 tasks by if-dependencies pruning during optimization.

...

  File "/home/eijemoz/code/taskgraph/src/taskgraph/optimize/base.py", line 110, in optimize_task_graph
    get_subgraph(
    ~~~~~~~~~~~~^
        target_task_graph,
        ^^^^^^^^^^^^^^^^^^
    ...<3 lines>...
        decision_task_id,
        ^^^^^^^^^^^^^^^^^
    ),
    ^
  File "/home/eijemoz/code/taskgraph/src/taskgraph/optimize/base.py", line 396, in get_subgraph
    raise Exception("Optimization error: " + probs)
Exception: Optimization error: task-apush-a depends on task-a as task-a but it has been removed

If you rename task-apush-a to task-push-a then instead you run into #710 and the whole graph gets pulled in. This optimization error only happens when the label of the task getting optimized gets ordered before the other tasks in the prune_candidates set in remove_tasks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions