mozilla-taskgraph 4.0.0__tar.gz → 4.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/.github/workflows/pypi-publish.yml +3 -3
  2. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/.pre-commit-config.yaml +5 -5
  3. mozilla_taskgraph-4.0.2/.readthedocs.yml +19 -0
  4. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/.taskcluster.yml +19 -19
  5. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/CHANGELOG.md +14 -0
  6. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/PKG-INFO +4 -2
  7. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/docs/conf.py +0 -1
  8. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/pyproject.toml +14 -7
  9. mozilla_taskgraph-4.0.2/renovate.json +6 -0
  10. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/config.py +2 -4
  11. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/transforms/replicate.py +4 -6
  12. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/transforms/scriptworker/release_artifacts.py +3 -2
  13. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/transforms/scriptworker/shipit/mark_as_shipped.py +4 -8
  14. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/config.yml +2 -2
  15. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/docker/fetch/Dockerfile +1 -1
  16. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/docker/python/Dockerfile +2 -2
  17. mozilla_taskgraph-4.0.2/taskcluster/kinds/complete/kind.yml +23 -0
  18. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/kinds/docker-image/kind.yml +1 -1
  19. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/kinds/test/kind.yml +1 -1
  20. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/actions/test_release_promotion.py +12 -15
  21. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/transforms/test_replicate.py +8 -6
  22. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/uv.lock +166 -95
  23. mozilla_taskgraph-4.0.0/.readthedocs.yml +0 -13
  24. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/.codespell-ignore-words.txt +0 -0
  25. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/.github/CODEOWNERS +0 -0
  26. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/.github/workflows/pre-commit-autoupdate.yml +0 -0
  27. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/.github/workflows/pre-commit.yml +0 -0
  28. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/.gitignore +0 -0
  29. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/.yamllint +0 -0
  30. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/CODE_OF_CONDUCT.md +0 -0
  31. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/CONTRIBUTING.md +0 -0
  32. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/LICENSE +0 -0
  33. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/Makefile +0 -0
  34. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/README.md +0 -0
  35. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/docs/actions/index.rst +0 -0
  36. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/docs/actions/release-promotion.rst +0 -0
  37. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/docs/index.rst +0 -0
  38. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/docs/transforms/index.rst +0 -0
  39. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/docs/transforms/scriptworker/index.rst +0 -0
  40. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/docs/transforms/scriptworker/release_artifacts.rst +0 -0
  41. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/docs/transforms/scriptworker/ship-it.rst +0 -0
  42. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/__init__.py +0 -0
  43. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/actions/__init__.py +0 -0
  44. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/actions/release_promotion.py +0 -0
  45. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/transforms/__init__.py +0 -0
  46. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/transforms/scriptworker/__init__.py +0 -0
  47. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/transforms/scriptworker/shipit/__init__.py +0 -0
  48. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/util/signed_artifacts.py +0 -0
  49. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/version.py +0 -0
  50. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/src/mozilla_taskgraph/worker_types.py +0 -0
  51. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/docker/fetch/REGISTRY +0 -0
  52. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/kinds/check/kind.yml +0 -0
  53. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/kinds/codecov/kind.yml +0 -0
  54. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/kinds/fetch/kind.yml +0 -0
  55. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/kinds/release-promotion-dummy/kind.yml +0 -0
  56. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/mt_taskgraph/target_tasks.py +0 -0
  57. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/mt_taskgraph/transforms/test.py +0 -0
  58. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/taskcluster/scripts/codecov-upload.py +0 -0
  59. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/__init__.py +0 -0
  60. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/actions/__init__.py +0 -0
  61. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/conftest.py +0 -0
  62. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/data/taskcluster/config.yml +0 -0
  63. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/data/testver.py +0 -0
  64. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/test_register.py +0 -0
  65. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/test_version.py +0 -0
  66. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/test_worker_types.py +0 -0
  67. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/transforms/test_scriptworker_release_artifacts.py +0 -0
  68. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/transforms/test_scriptworker_shipit.py +0 -0
  69. {mozilla_taskgraph-4.0.0 → mozilla_taskgraph-4.0.2}/test/util/test_signed_artifacts.py +0 -0
@@ -11,10 +11,10 @@ jobs:
11
11
  id-token: write
12
12
  steps:
13
13
  - name: Checkout sources
14
- uses: actions/checkout@v4
15
- - uses: actions/setup-python@v5
14
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
15
+ - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
16
16
  with:
17
- python-version: '3.11'
17
+ python-version: '3.14'
18
18
  cache: 'pip'
19
19
  - name: Build package distributions
20
20
  run: |
@@ -13,20 +13,20 @@ repos:
13
13
  exclude: template
14
14
  - id: check-added-large-files
15
15
  - repo: https://github.com/astral-sh/uv-pre-commit
16
- rev: 0.8.22
16
+ rev: 0.9.28
17
17
  hooks:
18
18
  - id: uv-lock
19
19
  - repo: https://github.com/astral-sh/ruff-pre-commit
20
- rev: 'v0.13.2'
20
+ rev: 'v0.14.14'
21
21
  hooks:
22
22
  - id: ruff
23
23
  args: [--fix, --exit-non-zero-on-fix]
24
24
  - repo: https://github.com/psf/black
25
- rev: 25.9.0
25
+ rev: 26.1.0
26
26
  hooks:
27
27
  - id: black
28
28
  - repo: https://github.com/adrienverge/yamllint.git
29
- rev: v1.37.1
29
+ rev: v1.38.0
30
30
  hooks:
31
31
  - id: yamllint
32
32
  exclude: template
@@ -40,7 +40,7 @@ repos:
40
40
  test/test_util_path.py
41
41
  )$
42
42
  - repo: https://github.com/compilerla/conventional-pre-commit
43
- rev: v4.2.0
43
+ rev: v4.3.0
44
44
  hooks:
45
45
  - id: conventional-pre-commit
46
46
  stages: [commit-msg]
@@ -0,0 +1,19 @@
1
+ ---
2
+ version: 2
3
+ build:
4
+ os: "ubuntu-24.04"
5
+ tools:
6
+ python: "3.14"
7
+
8
+ jobs:
9
+ pre_create_environment:
10
+ - asdf plugin add uv
11
+ - asdf install uv latest
12
+ - asdf global uv latest
13
+ create_environment:
14
+ - uv venv "${READTHEDOCS_VIRTUALENV_PATH}"
15
+ install:
16
+ - UV_PROJECT_ENVIRONMENT="${READTHEDOCS_VIRTUALENV_PATH}" uv sync --frozen --group docs
17
+
18
+ sphinx:
19
+ configuration: docs/conf.py
@@ -29,7 +29,7 @@ tasks:
29
29
  project:
30
30
  $switch:
31
31
  'tasks_for == "github-push"': '${event.repository.name}'
32
- 'tasks_for[:19] == "github-pull-request"': '${event.pull_request.head.repo.name}'
32
+ 'tasks_for[:19] == "github-pull-request"': '${event.pull_request.base.repo.name}'
33
33
  'tasks_for in ["cron", "action"]': '${repository.project}'
34
34
  head_branch:
35
35
  $switch:
@@ -110,7 +110,7 @@ tasks:
110
110
  description: 'Created by a [cron task](https://firefox-ci-tc.services.mozilla.com/tasks/${cron.task_id})'
111
111
 
112
112
  provisionerId: "${trustDomain}-${level}"
113
- workerType: "decision-gcp"
113
+ workerType: "decision"
114
114
 
115
115
  tags:
116
116
  $switch:
@@ -206,7 +206,7 @@ tasks:
206
206
  features:
207
207
  taskclusterProxy: true
208
208
 
209
- image: mozillareleases/taskgraph:run-task-v13.1.0@sha256:b1b244cfbe0bb07999eaf5b3f3e6d51f22163d726025005c2ea5177e2fea8c6e
209
+ image: mozillareleases/taskgraph:run-task-v18.1.0@sha256:43d1ba6d149bf8539b1bc7aef95c9adfe8ca76714f2f6beaa5f87c3059559466
210
210
  maxRunTime: 1800
211
211
 
212
212
  command:
@@ -258,19 +258,19 @@ tasks:
258
258
  # debugging, but they are not useful long-term.
259
259
  expires: {$fromNow: '7 day'}
260
260
 
261
- extra:
262
- $merge:
263
- - $if: 'tasks_for == "action"'
264
- then:
265
- parent: '${action.taskGroupId}'
266
- action:
267
- name: '${action.name}'
268
- context:
269
- taskGroupId: '${action.taskGroupId}'
270
- taskId: {$eval: 'taskId'}
271
- input: {$eval: 'input'}
272
- clientId: {$eval: 'clientId'}
273
- - $if: 'tasks_for == "cron"'
274
- then:
275
- cron: {$json: {$eval: 'cron'}}
276
- - tasks_for: '${tasks_for}'
261
+ extra:
262
+ $merge:
263
+ - $if: 'tasks_for == "action"'
264
+ then:
265
+ parent: '${action.taskGroupId}'
266
+ action:
267
+ name: '${action.name}'
268
+ context:
269
+ taskGroupId: '${action.taskGroupId}'
270
+ taskId: {$eval: 'taskId'}
271
+ input: {$eval: 'input'}
272
+ clientId: {$eval: 'clientId'}
273
+ - $if: 'tasks_for == "cron"'
274
+ then:
275
+ cron: {$json: {$eval: 'cron'}}
276
+ - tasks_for: '${tasks_for}'
@@ -1,3 +1,17 @@
1
+ ## 4.0.2 (2026-02-06)
2
+
3
+ ### Fix
4
+
5
+ - Change all voluptuous schema names to LegacySchema
6
+ - updated artifact fetch for taskgraph 19 compatibility
7
+ - update readthedocs config
8
+
9
+ ## 4.0.1 (2025-11-17)
10
+
11
+ ### Fix
12
+
13
+ - mark compatible with Taskgraph v18.x
14
+
1
15
  ## 4.0.0 (2025-10-17)
2
16
 
3
17
  ### Fix
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mozilla-taskgraph
3
- Version: 4.0.0
3
+ Version: 4.0.2
4
4
  Summary: Mozilla specific transforms and utilities for Taskgraph
5
5
  Project-URL: Repository, https://github.com/mozilla-releng/mozilla-taskgraph
6
6
  Project-URL: Issues, https://github.com/mozilla-releng/mozilla-taskgraph/issues
@@ -13,9 +13,11 @@ Classifier: Programming Language :: Python :: 3.9
13
13
  Classifier: Programming Language :: Python :: 3.10
14
14
  Classifier: Programming Language :: Python :: 3.11
15
15
  Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
16
18
  Classifier: Topic :: Software Development
17
19
  Requires-Python: >=3.9
18
- Requires-Dist: taskcluster-taskgraph<18,>=16.2.1
20
+ Requires-Dist: taskcluster-taskgraph<20,>=19
19
21
  Description-Content-Type: text/markdown
20
22
 
21
23
  [![Task Status](https://firefox-ci-tc.services.mozilla.com/api/github/v1/repository/mozilla-releng/mozilla-taskgraph/main/badge.svg)](https://firefox-ci-tc.services.mozilla.com/api/github/v1/repository/mozilla-releng/mozilla-taskgraph/main/latest)
@@ -31,7 +31,6 @@ extensions = [
31
31
  "sphinx.ext.autodoc",
32
32
  "sphinx.ext.napoleon",
33
33
  "sphinxarg.ext",
34
- "sphinxcontrib.mermaid",
35
34
  ]
36
35
 
37
36
  # Add any paths that contain templates here, relative to this directory.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mozilla-taskgraph"
3
- version = "4.0.0"
3
+ version = "4.0.2"
4
4
  description = "Mozilla specific transforms and utilities for Taskgraph"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -14,32 +14,39 @@ classifiers = [
14
14
  "Programming Language :: Python :: 3.10",
15
15
  "Programming Language :: Python :: 3.11",
16
16
  "Programming Language :: Python :: 3.12",
17
+ "Programming Language :: Python :: 3.13",
18
+ "Programming Language :: Python :: 3.14",
17
19
  "Topic :: Software Development",
18
20
  ]
19
21
  requires-python = ">=3.9"
20
22
  dependencies = [
21
- "taskcluster-taskgraph>=16.2.1,<18",
23
+ "taskcluster-taskgraph>=19,<20",
22
24
  ]
23
25
 
24
26
  [project.urls]
25
27
  Repository = "https://github.com/mozilla-releng/mozilla-taskgraph"
26
28
  Issues = "https://github.com/mozilla-releng/mozilla-taskgraph/issues"
27
29
 
28
- [tool.uv]
29
- dev-dependencies = [
30
+ [dependency-groups]
31
+ dev = [
30
32
  "commitizen",
31
33
  "coverage",
32
34
  "pytest",
33
35
  "pytest-mock",
34
36
  "responses",
35
- "sphinx~=5.3.0",
37
+ "taskcluster_urls",
38
+ ]
39
+
40
+ docs = [
41
+ "sphinx~=9.1.0",
36
42
  "sphinx-autobuild",
37
43
  "sphinx-argparse",
38
44
  "sphinx-book-theme",
39
- "sphinxcontrib-mermaid",
40
- "taskcluster_urls",
41
45
  ]
42
46
 
47
+ [tool.uv.dependency-groups]
48
+ docs = {requires-python = ">=3.12"}
49
+
43
50
  [build-system]
44
51
  requires = ["hatchling"]
45
52
  build-backend = "hatchling.build"
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": [
4
+ "github>mozilla-releng/reps:renovate-preset.json5"
5
+ ]
6
+ }
@@ -12,15 +12,13 @@ tg.graph_config_schema = tg.graph_config_schema.extend(
12
12
  },
13
13
  Optional(
14
14
  "version-parser",
15
- description=dedent(
16
- """
15
+ description=dedent("""
17
16
  Python path of the form ``<module>:<obj>`` pointing to a
18
17
  function that takes a set of parameters as input and returns
19
18
  the version string to use for release tasks.
20
19
 
21
20
  Defaults to ``mozilla_taskgraph.version:default_parser``.
22
- """.lstrip()
23
- ),
21
+ """.lstrip()),
24
22
  ): str,
25
23
  }
26
24
  )
@@ -11,7 +11,7 @@ from textwrap import dedent
11
11
  from taskcluster.exceptions import TaskclusterRestFailure
12
12
  from taskgraph.transforms.base import TransformSequence
13
13
  from taskgraph.util.attributes import attrmatch
14
- from taskgraph.util.schema import Schema
14
+ from taskgraph.util.schema import LegacySchema
15
15
  from taskgraph.util.taskcluster import (
16
16
  find_task_id,
17
17
  get_artifact,
@@ -19,7 +19,7 @@ from taskgraph.util.taskcluster import (
19
19
  )
20
20
  from voluptuous import ALLOW_EXTRA, Any, Optional, Required
21
21
 
22
- REPLICATE_SCHEMA = Schema(
22
+ REPLICATE_SCHEMA = LegacySchema(
23
23
  {
24
24
  Required(
25
25
  "replicate",
@@ -31,8 +31,7 @@ REPLICATE_SCHEMA = Schema(
31
31
  ): {
32
32
  Required(
33
33
  "target",
34
- description=dedent(
35
- """
34
+ description=dedent("""
36
35
  Define which tasks to target for replication.
37
36
 
38
37
  Each item in the list can be either:
@@ -42,8 +41,7 @@ REPLICATE_SCHEMA = Schema(
42
41
 
43
42
  If any of the resolved tasks are a Decision task, targeted
44
43
  tasks will be derived from the `task-graph.json` artifact.
45
- """.lstrip()
46
- ),
44
+ """.lstrip()),
47
45
  ): [str],
48
46
  Optional(
49
47
  "include-attrs",
@@ -6,17 +6,18 @@ Support a 'release-artifacts' key which automatically sets up the artifacts
6
6
  under 'public/build' and adds the corresponding attribute needed by downstream
7
7
  release tasks.
8
8
  """
9
+
9
10
  import os
10
11
 
11
12
  from taskgraph.transforms.base import TransformSequence
12
13
  from taskgraph.transforms.task import task_description_schema
13
- from taskgraph.util.schema import Schema
14
+ from taskgraph.util.schema import LegacySchema
14
15
  from taskgraph.util.workertypes import worker_type_implementation
15
16
  from voluptuous import Extra, Optional, Required
16
17
 
17
18
  transforms = TransformSequence()
18
19
 
19
- release_artifacts_schema = Schema(
20
+ release_artifacts_schema = LegacySchema(
20
21
  {
21
22
  Required("worker-type"): task_description_schema["worker-type"],
22
23
  Optional("release-artifacts"): [str],
@@ -6,12 +6,12 @@ import os
6
6
  from textwrap import dedent
7
7
 
8
8
  from taskgraph.transforms.base import TransformSequence
9
- from taskgraph.util.schema import Schema, optionally_keyed_by, resolve_keyed_by
9
+ from taskgraph.util.schema import LegacySchema, optionally_keyed_by, resolve_keyed_by
10
10
  from voluptuous import Extra, Optional
11
11
 
12
12
  transforms = TransformSequence()
13
13
 
14
- mark_as_shipped_schema = Schema(
14
+ mark_as_shipped_schema = LegacySchema(
15
15
  {
16
16
  Optional("name"): str,
17
17
  Optional("shipit-product"): optionally_keyed_by("build-type", str),
@@ -60,15 +60,11 @@ def make_task_description(config, tasks):
60
60
 
61
61
  if not product:
62
62
  config_path = os.path.join(config.graph_config.root_dir, "config.yml")
63
- raise Exception(
64
- dedent(
65
- f"""
63
+ raise Exception(dedent(f"""
66
64
  Can't determine ShipIt product!
67
65
 
68
66
  Define it as `shipit-product` in the task definition, or as `shipit.product`
69
- in {config_path}.""".lstrip()
70
- )
71
- )
67
+ in {config_path}.""".lstrip()))
72
68
 
73
69
  task.setdefault("label", task.pop("name", "mark-as-shipped"))
74
70
  task["description"] = f"Mark {product} as shipped in Ship-It"
@@ -14,12 +14,12 @@ workers:
14
14
  provisioner: '{trust-domain}-{level}'
15
15
  implementation: docker-worker
16
16
  os: linux
17
- worker-type: '{alias}-gcp'
17
+ worker-type: '{alias}'
18
18
  linux:
19
19
  provisioner: '{trust-domain}-t'
20
20
  implementation: docker-worker
21
21
  os: linux
22
- worker-type: '{alias}-gcp'
22
+ worker-type: '{alias}-docker'
23
23
  succeed:
24
24
  provisioner: built-in
25
25
  implementation: succeed
@@ -1,4 +1,4 @@
1
- FROM debian:11
1
+ FROM debian:13@sha256:2c91e484d93f0830a7e05a2b9d92a7b102be7cab562198b984a84fdbc7806d91
2
2
 
3
3
  ### Add worker user and setup its workspace.
4
4
  RUN mkdir -p /builds && \
@@ -2,7 +2,7 @@
2
2
  # License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
4
 
5
- FROM debian:12-slim
5
+ FROM debian:13-slim@sha256:f6e2cfac5cf956ea044b4bd75e6397b4372ad88fe00908045e9a0d21712ae3ba
6
6
  LABEL maintainer="Mozilla Release Engineering <release+mozilla-taskgraph@mozilla.com>"
7
7
 
8
8
  VOLUME /builds/worker/checkouts
@@ -29,7 +29,7 @@ ENV SHELL=/bin/bash \
29
29
  PATH=/builds/worker/.local/bin:$PATH
30
30
 
31
31
  # uv
32
- COPY --from=ghcr.io/astral-sh/uv:0.4.16 /uv /bin/uv
32
+ COPY --from=ghcr.io/astral-sh/uv:0.9.30@sha256:538e0b39736e7feae937a65983e49d2ab75e1559d35041f9878b7b7e51de91e4 /uv /bin/uv
33
33
  # %ARG PYTHON_VERSIONS
34
34
  RUN uv python install $PYTHON_VERSIONS
35
35
  RUN chown -R worker:worker /builds/worker
@@ -0,0 +1,23 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+ ---
5
+ loader: taskgraph.loader.transform:loader
6
+
7
+ transforms:
8
+ - taskgraph.transforms.from_deps
9
+ - taskgraph.transforms.task
10
+
11
+ kind-dependencies:
12
+ - check
13
+ - test
14
+
15
+ tasks:
16
+ pr:
17
+ description: Ensures required PR tasks have completed
18
+ run-on-tasks-for: ["github-pull-request", "github-pull-request-untrusted"]
19
+ worker-type: succeed
20
+ from-deps:
21
+ group-by: all
22
+ set-name: false
23
+ unique-kinds: false
@@ -10,4 +10,4 @@ tasks:
10
10
  fetch: {}
11
11
  python:
12
12
  args:
13
- PYTHON_VERSIONS: "3.12 3.11 3.10 3.9"
13
+ PYTHON_VERSIONS: "3.14 3.13 3.12 3.11 3.10 3.9"
@@ -21,7 +21,7 @@ tasks:
21
21
  description: "Run Python unit tests."
22
22
  attributes:
23
23
  artifact_prefix: public
24
- python-versions: ["3.12", "3.11", "3.10", "3.9"]
24
+ python-versions: ["3.14", "3.13", "3.12", "3.11", "3.10", "3.9"]
25
25
  run:
26
26
  command: >-
27
27
  uv run coverage run --data-file $MOZ_ARTIFACT_DIR/coverage --context=py$UV_PYTHON -m pytest -vv
@@ -49,25 +49,22 @@ def setup(responses, parameters):
49
49
  )
50
50
 
51
51
  # Only the parameters from the first previous graph is downloaded.
52
- responses.add(
53
- method="GET",
54
- url=f"{tc_url}/api/queue/v1/task/{list(previous_graphs.keys())[0]}/artifacts/public%2Fparameters.yml",
55
- json=parameters,
56
- )
52
+ # get_artifact does a two-step fetch: getLatestArtifact returns
53
+ # {"url": url}, then the content is fetched from that url.
54
+ url = f"{tc_url}/api/queue/v1/task/{list(previous_graphs.keys())[0]}/artifacts/public%2Fparameters.yml"
55
+ responses.add(method="GET", url=url, json={"url": url})
56
+ responses.add(method="GET", url=url, json=parameters)
57
57
 
58
58
  tid = count(0)
59
59
  for decision_id, full_task_graph in previous_graphs.items():
60
- responses.add(
61
- method="GET",
62
- url=f"{tc_url}/api/queue/v1/task/{decision_id}/artifacts/public%2Ffull-task-graph.json",
63
- json=full_task_graph.to_json(),
64
- )
60
+ url = f"{tc_url}/api/queue/v1/task/{decision_id}/artifacts/public%2Ffull-task-graph.json"
61
+ responses.add(method="GET", url=url, json={"url": url})
62
+ responses.add(method="GET", url=url, json=full_task_graph.to_json())
63
+
65
64
  label_to_taskid = {label: int(next(tid)) for label in full_task_graph.tasks}
66
- responses.add(
67
- method="GET",
68
- url=f"{tc_url}/api/queue/v1/task/{decision_id}/artifacts/public%2Flabel-to-taskid.json",
69
- json=label_to_taskid,
70
- )
65
+ url = f"{tc_url}/api/queue/v1/task/{decision_id}/artifacts/public%2Flabel-to-taskid.json"
66
+ responses.add(method="GET", url=url, json={"url": url})
67
+ responses.add(method="GET", url=url, json=label_to_taskid)
71
68
 
72
69
  return inner
73
70
 
@@ -214,10 +214,11 @@ def test_decision_task(responses, run_replicate):
214
214
  expected = get_expected(prefix, *task_defs)
215
215
 
216
216
  counter = count()
217
- responses.get(
218
- f"{TC_ROOT_URL}/api/queue/v1/task/{task_id}/artifacts/public%2Ftask-graph.json",
219
- json={next(counter): task_def for task_def in task_defs},
217
+ url = (
218
+ f"{TC_ROOT_URL}/api/queue/v1/task/{task_id}/artifacts/public%2Ftask-graph.json"
220
219
  )
220
+ responses.get(url, json={"url": url})
221
+ responses.get(url, json={next(counter): task_def for task_def in task_defs})
221
222
  result = run_replicate(task)
222
223
  assert result == expected
223
224
 
@@ -269,9 +270,10 @@ def test_filtered_out(responses, run_replicate, target_def):
269
270
  task_defs = get_target_defs(target_def)
270
271
 
271
272
  counter = count()
272
- responses.get(
273
- f"{TC_ROOT_URL}/api/queue/v1/task/{task_id}/artifacts/public%2Ftask-graph.json",
274
- json={next(counter): task_def for task_def in task_defs},
273
+ url = (
274
+ f"{TC_ROOT_URL}/api/queue/v1/task/{task_id}/artifacts/public%2Ftask-graph.json"
275
275
  )
276
+ responses.get(url, json={"url": url})
277
+ responses.get(url, json={next(counter): task_def for task_def in task_defs})
276
278
  result = run_replicate(task)
277
279
  assert len(result) == 0