Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions src/taskgraph/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
import logging
import os
from dataclasses import dataclass
from typing import Dict
from typing import Callable, Dict, Optional, Union

from . import filter_tasks
from .config import GraphConfig, load_graph_config
from .graph import Graph
from .morph import morph
from .optimize.base import optimize_task_graph
from .parameters import parameters_loader
from .parameters import Parameters, parameters_loader
from .task import Task
from .taskgraph import TaskGraph
from .transforms.base import TransformConfig, TransformSequence
Expand Down Expand Up @@ -119,10 +119,10 @@ class TaskGraphGenerator:

def __init__(
self,
root_dir,
parameters,
decision_task_id="DECISION-TASK",
write_artifacts=False,
root_dir: Optional[str],
parameters: Union[Parameters, Callable[[GraphConfig], Parameters]],
decision_task_id: str = "DECISION-TASK",
write_artifacts: bool = False,
):
"""
@param root_dir: root directory containing the Taskgraph config.yml file
Expand Down
18 changes: 11 additions & 7 deletions src/taskgraph/optimize/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import logging
from abc import ABCMeta, abstractmethod
from collections import defaultdict
from typing import Dict, Set

from slugid import nice as slugid

Expand Down Expand Up @@ -365,11 +366,11 @@ def replace_tasks(


def get_subgraph(
target_task_graph,
removed_tasks,
replaced_tasks,
label_to_taskid,
decision_task_id,
target_task_graph: TaskGraph,
removed_tasks: Set[str],
replaced_tasks: Set[str],
label_to_taskid: Dict[str, str],
decision_task_id: str,
):
"""
Return the subgraph of target_task_graph consisting only of
Expand Down Expand Up @@ -399,7 +400,9 @@ def get_subgraph(
for label in sorted(
target_task_graph.graph.nodes - removed_tasks - set(label_to_taskid)
):
label_to_taskid[label] = slugid()
task_id = slugid()
assert isinstance(task_id, str)
label_to_taskid[label] = task_id

# resolve labels to taskIds and populate task['dependencies']
tasks_by_taskid = {}
Expand All @@ -424,14 +427,15 @@ def get_subgraph(
}
)

assert task.task_id
task.task = resolve_task_references(
task.label,
task.task,
task_id=task.task_id,
decision_task_id=decision_task_id,
dependencies=named_task_dependencies,
)
deps = task.task.setdefault("dependencies", []) # type: ignore
deps = task.task.setdefault("dependencies", [])
deps.extend(sorted(named_task_dependencies.values()))
tasks_by_taskid[task.task_id] = task

Expand Down
7 changes: 2 additions & 5 deletions src/taskgraph/transforms/run/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,11 +170,8 @@ def support_caches(
if use_caches is None:
# Use project default values for filtering caches, default to
# checkout cache if no selection is specified.
use_caches = (
config.graph_config.get("taskgraph", {})
.get("run", {})
.get("use-caches", ["checkout"])
)
taskgraph_config = config.graph_config.get("taskgraph") or {}
use_caches = taskgraph_config.get("run", {}).get("use-caches", ["checkout"])

for name, cache_cfg in CACHES.items():
if not should_use_cache(name, use_caches, run["checkout"]):
Expand Down
13 changes: 11 additions & 2 deletions src/taskgraph/util/parameterization.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@


import re
from typing import Any, Dict

from taskgraph.util.taskcluster import get_artifact_url
from taskgraph.util.time import json_time_from_now
Expand Down Expand Up @@ -44,7 +45,13 @@ def resolve_timestamps(now, task_def):
)


def resolve_task_references(label, task_def, task_id, decision_task_id, dependencies):
def resolve_task_references(
label: str,
task_def: Dict[str, Any],
task_id: str,
decision_task_id: str,
dependencies: Dict[str, str],
) -> Dict[str, Any]:
"""Resolve all instances of ``{'task-reference': '..<..>..'} ``
and ``{'artifact-reference`: '..<dependency/artifact/path>..'}``
in the given task definition, using the given dependencies.
Expand Down Expand Up @@ -91,10 +98,12 @@ def repl(match):

return ARTIFACT_REFERENCE_PATTERN.sub(repl, val)

return _recurse(
result = _recurse(
task_def,
{
"task-reference": task_reference,
"artifact-reference": artifact_reference,
},
)
assert isinstance(result, dict)
return result
12 changes: 8 additions & 4 deletions test/test_util_parameterization.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,8 @@ def test_artifact_refs_private(monkeypatch, assert_artifact_refs):
monkeypatch.setenv("TASKCLUSTER_PROXY_URL", tc_proxy_url)

assert_artifact_refs(
{"artifact-reference": "<edge1/private/foo>"},
f"{tc_proxy_url}/api/queue/v1/task/tid1/artifacts/private/foo",
{"url": {"artifact-reference": "<edge1/private/foo>"}},
{"url": f"{tc_proxy_url}/api/queue/v1/task/tid1/artifacts/private/foo"},
)


Expand Down Expand Up @@ -255,6 +255,10 @@ def test_artifact_refs_badly_formed():
"resolve_task_references ignores badly-formatted artifact references"
for inv in ["<edge1>", "edge1/foo>", "<edge1>/foo", "<edge1>foo"]:
resolved = resolve_task_references(
"subject", {"artifact-reference": inv}, "tid-self", "tid-decision", {}
"subject",
{"key": {"artifact-reference": inv}},
"tid-self",
"tid-decision",
{},
)
assert resolved == inv
assert resolved == {"key": inv}
Loading
Loading