taskcluster-taskgraph 19.1.0__tar.gz → 19.2.0__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 (269) hide show
  1. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/CHANGELOG.md +7 -0
  2. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/PKG-INFO +1 -1
  3. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/pyproject.toml +1 -1
  4. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/task.py +23 -12
  5. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/schema.py +5 -2
  6. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_task.py +34 -0
  7. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_schema.py +42 -0
  8. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/uv.lock +1 -1
  9. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.codespell-ignore-words.txt +0 -0
  10. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.github/CODEOWNERS +0 -0
  11. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.github/dependabot.yml +0 -0
  12. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.github/workflows/codeql-analysis.yml +0 -0
  13. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.github/workflows/pre-commit-autoupdate.yml +0 -0
  14. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.github/workflows/pre-commit.yml +0 -0
  15. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.github/workflows/pypi-publish.yml +0 -0
  16. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.gitignore +0 -0
  17. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.pre-commit-config.yaml +0 -0
  18. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.readthedocs.yaml +0 -0
  19. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.taskcluster.yml +0 -0
  20. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/.yamllint +0 -0
  21. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/CODE_OF_CONDUCT.md +0 -0
  22. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/CONTRIBUTING.rst +0 -0
  23. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/LICENSE +0 -0
  24. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/Makefile +0 -0
  25. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/README.rst +0 -0
  26. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/index.rst +0 -0
  27. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/kind.rst +0 -0
  28. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/loading.rst +0 -0
  29. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/optimization.rst +0 -0
  30. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/overview.rst +0 -0
  31. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/scopes.rst +0 -0
  32. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/task-graphs.rst +0 -0
  33. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/transforms.rst +0 -0
  34. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/conf.py +0 -0
  35. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/contributing.rst +0 -0
  36. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/glossary.rst +0 -0
  37. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/howto/bootstrap-taskgraph.rst +0 -0
  38. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/howto/create-actions.rst +0 -0
  39. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/howto/create-tasks.rst +0 -0
  40. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/howto/debugging.rst +0 -0
  41. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/howto/docker.rst +0 -0
  42. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/howto/index.rst +0 -0
  43. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/howto/load-task-locally.rst +0 -0
  44. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/howto/resolve-keyed-by.rst +0 -0
  45. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/howto/run-locally.rst +0 -0
  46. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/howto/send-notifications.rst +0 -0
  47. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/howto/use-fetches.rst +0 -0
  48. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/index.rst +0 -0
  49. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/cli.rst +0 -0
  50. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/index.rst +0 -0
  51. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/migrations.rst +0 -0
  52. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/optimization-strategies.rst +0 -0
  53. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/parameters.rst +0 -0
  54. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/modules.rst +0 -0
  55. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.actions.rst +0 -0
  56. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.loader.rst +0 -0
  57. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.optimize.rst +0 -0
  58. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.rst +0 -0
  59. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.transforms.rst +0 -0
  60. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.transforms.run.rst +0 -0
  61. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.util.rst +0 -0
  62. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/transforms/chunking.rst +0 -0
  63. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/transforms/from_deps.rst +0 -0
  64. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/transforms/index.rst +0 -0
  65. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/transforms/matrix.rst +0 -0
  66. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/reference/transforms/task_context.rst +0 -0
  67. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/tutorials/connecting-taskcluster.rst +0 -0
  68. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/tutorials/creating-a-task-graph.rst +0 -0
  69. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/tutorials/example-taskcluster.yml +0 -0
  70. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/tutorials/getting-started.rst +0 -0
  71. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/docs/tutorials/index.rst +0 -0
  72. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/make.bat +0 -0
  73. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/packages/pytest-taskgraph/README.md +0 -0
  74. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/packages/pytest-taskgraph/pyproject.toml +0 -0
  75. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/__init__.py +0 -0
  76. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py +0 -0
  77. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/vcs.py +0 -0
  78. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/packages/sphinx-taskgraph/README.md +0 -0
  79. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/packages/sphinx-taskgraph/pyproject.toml +0 -0
  80. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/__init__.py +0 -0
  81. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/autoschema.py +0 -0
  82. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/__init__.py +0 -0
  83. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/__init__.py +0 -0
  84. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/add_new_jobs.py +0 -0
  85. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/cancel.py +0 -0
  86. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/cancel_all.py +0 -0
  87. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/rebuild_cached_tasks.py +0 -0
  88. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/registry.py +0 -0
  89. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/retrigger.py +0 -0
  90. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/util.py +0 -0
  91. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/config.py +0 -0
  92. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/create.py +0 -0
  93. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/decision.py +0 -0
  94. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/docker.py +0 -0
  95. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/filter_tasks.py +0 -0
  96. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/generator.py +0 -0
  97. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/graph.py +0 -0
  98. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/loader/__init__.py +0 -0
  99. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/loader/default.py +0 -0
  100. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/loader/transform.py +0 -0
  101. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/main.py +0 -0
  102. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/morph.py +0 -0
  103. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/optimize/__init__.py +0 -0
  104. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/optimize/base.py +0 -0
  105. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/optimize/strategies.py +0 -0
  106. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/parameters.py +0 -0
  107. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/run-task/fetch-content +0 -0
  108. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/run-task/hgrc +0 -0
  109. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/run-task/robustcheckout.py +0 -0
  110. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/run-task/run-task +0 -0
  111. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/target_tasks.py +0 -0
  112. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/task.py +0 -0
  113. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/taskgraph.py +0 -0
  114. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/__init__.py +0 -0
  115. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/base.py +0 -0
  116. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/cached_tasks.py +0 -0
  117. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/chunking.py +0 -0
  118. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/code_review.py +0 -0
  119. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/docker_image.py +0 -0
  120. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/fetch.py +0 -0
  121. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/from_deps.py +0 -0
  122. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/matrix.py +0 -0
  123. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/notify.py +0 -0
  124. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/run/__init__.py +0 -0
  125. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/run/common.py +0 -0
  126. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/run/index_search.py +0 -0
  127. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/run/run_task.py +0 -0
  128. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/run/toolchain.py +0 -0
  129. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/task_context.py +0 -0
  130. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/__init__.py +0 -0
  131. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/archive.py +0 -0
  132. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/attributes.py +0 -0
  133. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/cached_tasks.py +0 -0
  134. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/caches.py +0 -0
  135. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/copy.py +0 -0
  136. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/dependencies.py +0 -0
  137. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/docker.py +0 -0
  138. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/hash.py +0 -0
  139. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/json.py +0 -0
  140. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/keyed_by.py +0 -0
  141. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/parameterization.py +0 -0
  142. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/path.py +0 -0
  143. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/python_path.py +0 -0
  144. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/readonlydict.py +0 -0
  145. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/set_name.py +0 -0
  146. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/shell.py +0 -0
  147. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/taskcluster.py +0 -0
  148. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/taskgraph.py +0 -0
  149. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/templates.py +0 -0
  150. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/time.py +0 -0
  151. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/treeherder.py +0 -0
  152. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/vcs.py +0 -0
  153. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/verify.py +0 -0
  154. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/workertypes.py +0 -0
  155. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/yaml.py +0 -0
  156. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/config.yml +0 -0
  157. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/REGISTRY +0 -0
  158. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/decision/Dockerfile +0 -0
  159. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/decision/HASH +0 -0
  160. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/decision/README.md +0 -0
  161. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/decision/VERSION +0 -0
  162. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/decision/system-setup.sh +0 -0
  163. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/fetch/Dockerfile +0 -0
  164. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/image_builder/README.rst +0 -0
  165. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/index-task/Dockerfile +0 -0
  166. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/index-task/README +0 -0
  167. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/index-task/insert-indexes.js +0 -0
  168. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/index-task/package.json +0 -0
  169. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/index-task/yarn.lock +0 -0
  170. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/python/Dockerfile +0 -0
  171. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/run-task/Dockerfile +0 -0
  172. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/run-task/system-setup.sh +0 -0
  173. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/skopeo/Dockerfile +0 -0
  174. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/skopeo/policy.json +0 -0
  175. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/skopeo/push_image.sh +0 -0
  176. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/check/kind.yml +0 -0
  177. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/codecov/kind.yml +0 -0
  178. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/complete/kind.yml +0 -0
  179. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/doc/kind.yml +0 -0
  180. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/docker-image/kind.yml +0 -0
  181. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/fetch/kind.yml +0 -0
  182. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/push-image/kind.yml +0 -0
  183. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/test/kind.yml +0 -0
  184. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/test/linux.yml +0 -0
  185. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/test/windows.yml +0 -0
  186. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/scripts/codecov-upload.py +0 -0
  187. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/scripts/external_tools/tooltool.py +0 -0
  188. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/self_taskgraph/__init__.py +0 -0
  189. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/self_taskgraph/custom_parameters.py +0 -0
  190. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/self_taskgraph/custom_target_tasks.py +0 -0
  191. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/self_taskgraph/transforms/add_pr_route.py +0 -0
  192. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/self_taskgraph/transforms/push_image.py +0 -0
  193. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/test/params/main-repo-pull-request-untrusted.yml +0 -0
  194. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/test/params/main-repo-pull-request.yml +0 -0
  195. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/test/params/main-repo-push.yml +0 -0
  196. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/test/params/main-repo-release-pytest-taskgraph.yml +0 -0
  197. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/taskcluster/test/params/main-repo-release-taskcluster-taskgraph.yml +0 -0
  198. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/template/cookiecutter.json +0 -0
  199. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/template/hooks/post_gen_project.py +0 -0
  200. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster/config.yml +0 -0
  201. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster/docker/linux/Dockerfile +0 -0
  202. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/docker-image/kind.yml +0 -0
  203. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/hello/kind.yml +0 -0
  204. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster/{{cookiecutter.project_slug}}_taskgraph/transforms/hello.py +0 -0
  205. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster.github.yml +0 -0
  206. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/__init__.py +0 -0
  207. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/automationrelevance.json +0 -0
  208. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/conftest.py +0 -0
  209. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/data/task_context.yml +0 -0
  210. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/config.yml +0 -0
  211. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/docker/hello-world/Dockerfile +0 -0
  212. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/docker/hello-world-tag/Dockerfile +0 -0
  213. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/docker/hello-world-tag/REGISTRY +0 -0
  214. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/docker/hello-world-tag/VERSION +0 -0
  215. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/kinds/docker-image/kind.yml +0 -0
  216. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/scripts/toolchain/run.ps1 +0 -0
  217. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/scripts/toolchain/run.sh +0 -0
  218. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/test_taskgraph/transforms/foo.py +0 -0
  219. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/data/testmod/thing.py +0 -0
  220. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/mockedopen.py +0 -0
  221. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_actions_rebuild_cached_tasks.py +0 -0
  222. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_actions_registry.py +0 -0
  223. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_config.py +0 -0
  224. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_create.py +0 -0
  225. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_decision.py +0 -0
  226. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_docker.py +0 -0
  227. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_generator.py +0 -0
  228. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_graph.py +0 -0
  229. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_main.py +0 -0
  230. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_morph.py +0 -0
  231. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_optimize.py +0 -0
  232. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_optimize_strategies.py +0 -0
  233. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_parameters.py +0 -0
  234. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_scripts_fetch_content.py +0 -0
  235. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_scripts_run_task.py +0 -0
  236. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_target_tasks.py +0 -0
  237. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_taskgraph.py +0 -0
  238. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transform_chunking.py +0 -0
  239. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transform_docker_image.py +0 -0
  240. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transform_task_context.py +0 -0
  241. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_base.py +0 -0
  242. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_cached_tasks.py +0 -0
  243. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_fetch.py +0 -0
  244. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_from_deps.py +0 -0
  245. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_matrix.py +0 -0
  246. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_notify.py +0 -0
  247. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_run.py +0 -0
  248. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_run_run_task.py +0 -0
  249. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_run_toolchain.py +0 -0
  250. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_archive.py +0 -0
  251. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_attributes.py +0 -0
  252. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_cached_tasks.py +0 -0
  253. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_copy.py +0 -0
  254. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_dependencies.py +0 -0
  255. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_docker.py +0 -0
  256. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_json.py +0 -0
  257. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_keyed_by.py +0 -0
  258. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_parameterization.py +0 -0
  259. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_path.py +0 -0
  260. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_python_path.py +0 -0
  261. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_readonlydict.py +0 -0
  262. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_taskcluster.py +0 -0
  263. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_templates.py +0 -0
  264. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_time.py +0 -0
  265. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_treeherder.py +0 -0
  266. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_vcs.py +0 -0
  267. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_verify.py +0 -0
  268. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_workertypes.py +0 -0
  269. {taskcluster_taskgraph-19.1.0 → taskcluster_taskgraph-19.2.0}/test/test_util_yaml.py +0 -0
@@ -1,5 +1,12 @@
1
1
  # Change Log
2
2
 
3
+ ## [19.2.0] - 2026-02-18
4
+
5
+ ### Fixed
6
+
7
+ - Restore `payload_builder` wrapping for dict schemas
8
+ - Make nested struct fields optional to match voluptuous defaults
9
+
3
10
  ## [19.1.0] - 2026-02-17
4
11
 
5
12
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taskcluster-taskgraph
3
- Version: 19.1.0
3
+ Version: 19.2.0
4
4
  Summary: Build taskcluster taskgraphs
5
5
  Project-URL: Repository, https://github.com/taskcluster/taskgraph
6
6
  Project-URL: Issues, https://github.com/taskcluster/taskgraph/issues
@@ -1,7 +1,7 @@
1
1
  ### Project
2
2
  [project]
3
3
  name = "taskcluster-taskgraph"
4
- version = "19.1.0"
4
+ version = "19.2.0"
5
5
  description = "Build taskcluster taskgraphs"
6
6
  readme = "README.rst"
7
7
  authors = [
@@ -16,11 +16,14 @@ from copy import deepcopy
16
16
  from dataclasses import dataclass
17
17
  from typing import Callable, Literal, Optional, Union
18
18
 
19
+ import voluptuous
20
+
19
21
  from taskgraph.transforms.base import TransformSequence
20
22
  from taskgraph.util.hash import hash_path
21
23
  from taskgraph.util.keyed_by import evaluate_keyed_by
22
24
  from taskgraph.util.schema import (
23
25
  IndexSchema,
26
+ LegacySchema,
24
27
  OptimizationType,
25
28
  Schema,
26
29
  TaskPriority,
@@ -194,6 +197,14 @@ class PayloadBuilder:
194
197
 
195
198
 
196
199
  def payload_builder(name, schema):
200
+ if isinstance(schema, dict):
201
+ schema = LegacySchema(
202
+ {
203
+ voluptuous.Required("implementation"): name,
204
+ voluptuous.Optional("os"): str,
205
+ }
206
+ ).extend(schema)
207
+
197
208
  def wrap(func):
198
209
  assert name not in payload_builders, f"duplicate payload builder name {name}"
199
210
  payload_builders[name] = PayloadBuilder(schema, func)
@@ -232,22 +243,22 @@ DockerImage = Union[str, dict[str, str]]
232
243
 
233
244
  class DockerWorkerCacheEntry(Schema):
234
245
  # only one type is supported by any of the workers right now
235
- type: Literal["persistent"]
246
+ type: Literal["persistent"] = "persistent"
236
247
  # name of the cache, allowing reuse by subsequent tasks naming the same cache
237
- name: str
248
+ name: Optional[str] = None
238
249
  # location in the task image where the cache will be mounted
239
- mount_point: str
250
+ mount_point: Optional[str] = None
240
251
  # Whether the cache is not used in untrusted environments (like the Try repo).
241
252
  skip_untrusted: Optional[bool] = None
242
253
 
243
254
 
244
255
  class DockerWorkerArtifact(Schema):
245
256
  # type of artifact -- simple file, or recursive directory, or a volume mounted directory.
246
- type: Literal["file", "directory", "volume"]
257
+ type: Optional[Literal["file", "directory", "volume"]] = None
247
258
  # task image path from which to read artifact
248
- path: str
259
+ path: Optional[str] = None
249
260
  # name of the produced artifact (root of the names for type=directory)
250
- name: str
261
+ name: Optional[str] = None
251
262
 
252
263
 
253
264
  class DockerWorkerPayloadSchema(Schema, forbid_unknown_fields=False, kw_only=True):
@@ -675,12 +686,12 @@ def build_generic_worker_payload(config, task, task_def):
675
686
 
676
687
 
677
688
  class ReleaseProperties(Schema):
678
- app_name: str
679
- app_version: str
680
- branch: str
681
- build_id: str
682
- hash_type: str
683
- platform: str
689
+ app_name: Optional[str] = None
690
+ app_version: Optional[str] = None
691
+ branch: Optional[str] = None
692
+ build_id: Optional[str] = None
693
+ hash_type: Optional[str] = None
694
+ platform: Optional[str] = None
684
695
 
685
696
 
686
697
  class UpstreamArtifact(Schema, rename="camel"):
@@ -48,6 +48,9 @@ def validate_schema(schema, obj, msg_prefix):
48
48
  # Handle plain Python types (e.g. str, int) via msgspec.convert
49
49
  elif isinstance(schema, type):
50
50
  msgspec.convert(obj, schema)
51
+ # Handle plain dict schemas (e.g. from downstream payload builders)
52
+ elif isinstance(schema, dict):
53
+ voluptuous.Schema(schema)(obj)
51
54
  else:
52
55
  raise TypeError(f"Unsupported schema type: {type(schema)}")
53
56
  except (
@@ -316,9 +319,9 @@ class Schema(
316
319
 
317
320
  class IndexSchema(Schema):
318
321
  # the name of the product this build produces
319
- product: str
322
+ product: Optional[str] = None
320
323
  # the names to use for this task in the TaskCluster index
321
- job_name: str
324
+ job_name: Optional[str] = None
322
325
  # Type of gecko v2 index to use
323
326
  type: str = "generic"
324
327
  # The rank that the task will receive in the TaskCluster
@@ -7,6 +7,7 @@ from pathlib import Path
7
7
  from pprint import pprint
8
8
 
9
9
  import pytest
10
+ import voluptuous
10
11
  from pytest_taskgraph import FakeParameters
11
12
 
12
13
  from taskgraph.transforms import task
@@ -966,3 +967,36 @@ def test_task_priority(run_transform, graph_config, test_task):
966
967
  assert task_dict["task"]["priority"] == priority
967
968
  else:
968
969
  assert task_dict["task"]["priority"] == graph_config["task-priority"]
970
+
971
+
972
+ @pytest.fixture
973
+ def dict_schema_builder():
974
+ @task.payload_builder("test-builder", schema={"command": [str]})
975
+ def _builder(config, task, task_def):
976
+ pass
977
+
978
+ yield task.payload_builders["test-builder"].schema
979
+ task.payload_builders.pop("test-builder", None)
980
+
981
+
982
+ @pytest.mark.parametrize(
983
+ "payload",
984
+ (
985
+ {"implementation": "test-builder", "command": ["echo"]},
986
+ {"implementation": "test-builder", "command": ["echo"], "os": "linux"},
987
+ ),
988
+ )
989
+ def test_dict_schema_accepts_valid_payload(dict_schema_builder, payload):
990
+ dict_schema_builder(payload)
991
+
992
+
993
+ @pytest.mark.parametrize(
994
+ "payload",
995
+ (
996
+ {"implementation": "wrong-name", "command": ["echo"]},
997
+ {"command": ["echo"]},
998
+ ),
999
+ )
1000
+ def test_dict_schema_rejects_invalid_payload(dict_schema_builder, payload):
1001
+ with pytest.raises(voluptuous.MultipleInvalid):
1002
+ dict_schema_builder(payload)
@@ -9,6 +9,7 @@ import pytest
9
9
 
10
10
  import taskgraph
11
11
  from taskgraph.util.schema import (
12
+ IndexSchema,
12
13
  Schema,
13
14
  optionally_keyed_by,
14
15
  resolve_keyed_by,
@@ -241,6 +242,47 @@ class TestResolveKeyedBy(unittest.TestCase):
241
242
  )
242
243
 
243
244
 
245
+ class TestNestedStructFieldsOptional(unittest.TestCase):
246
+ """Regression test: bare keys in nested voluptuous dict schemas were optional
247
+ by default. The msgspec migration must preserve this — nested struct fields
248
+ without defaults should not be required."""
249
+
250
+ def test_index_schema_accepts_partial_fields(self):
251
+ """IndexSchema should accept data with only 'type', omitting product/job-name."""
252
+
253
+ validate_schema(
254
+ IndexSchema,
255
+ {"type": "custom-index"},
256
+ "index schema",
257
+ )
258
+
259
+ def test_index_schema_accepts_all_fields(self):
260
+ """IndexSchema should still accept full data."""
261
+
262
+ validate_schema(
263
+ IndexSchema,
264
+ {
265
+ "type": "generic",
266
+ "product": "firefox",
267
+ "job-name": "build",
268
+ "rank": "by-tier",
269
+ },
270
+ "index schema",
271
+ )
272
+
273
+
274
+ class TestValidateSchemaDictHandler(unittest.TestCase):
275
+ """validate_schema must accept plain dict schemas passed
276
+ by downstream payload builders without raising TypeError."""
277
+
278
+ def test_dict_schema_valid(self):
279
+ validate_schema({"name": str, "count": int}, {"name": "a", "count": 1}, "pfx")
280
+
281
+ def test_dict_schema_invalid(self):
282
+ with self.assertRaises(Exception):
283
+ validate_schema({"name": str}, {"name": 123}, "pfx")
284
+
285
+
244
286
  def test_optionally_keyed_by():
245
287
  typ = optionally_keyed_by("foo", str, use_msgspec=True)
246
288
  assert msgspec.convert("baz", typ) == "baz"
@@ -2587,7 +2587,7 @@ wheels = [
2587
2587
 
2588
2588
  [[package]]
2589
2589
  name = "taskcluster-taskgraph"
2590
- version = "19.1.0"
2590
+ version = "19.2.0"
2591
2591
  source = { editable = "." }
2592
2592
  dependencies = [
2593
2593
  { name = "appdirs" },