taskcluster-taskgraph 24.2.3__tar.gz → 24.4.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 (270) hide show
  1. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/.github/workflows/codeql-analysis.yml +4 -4
  2. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/.github/workflows/codspeed.yml +3 -3
  3. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/.github/workflows/pypi-publish.yml +9 -9
  4. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/.pre-commit-config.yaml +3 -3
  5. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/CHANGELOG.md +35 -0
  6. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/PKG-INFO +2 -2
  7. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/parameters.rst +11 -3
  8. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/tutorials/connecting-taskcluster.rst +24 -11
  9. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/tutorials/example-taskcluster.yml +16 -11
  10. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/pyproject.toml +1 -1
  11. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/decision.py +0 -4
  12. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/graph.py +29 -16
  13. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/optimize/base.py +2 -2
  14. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/run-task/fetch-content +114 -9
  15. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/run-task/run-task +369 -26
  16. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/target_tasks.py +1 -1
  17. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/task.py +2 -1
  18. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/parameterization.py +10 -12
  19. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/schema.py +19 -16
  20. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/time.py +2 -0
  21. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/fetch/Dockerfile +1 -1
  22. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/index-task/Dockerfile +1 -1
  23. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/index-task/package.json +1 -1
  24. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/index-task/yarn.lock +10 -10
  25. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/run-task/Dockerfile +1 -1
  26. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/skopeo/Dockerfile +3 -3
  27. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/template/{{cookiecutter.project_name}}/taskcluster.github.yml +1 -1
  28. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_graph.py +60 -0
  29. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_graph_perf.py +68 -0
  30. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_scripts_fetch_content.py +120 -0
  31. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_scripts_run_task.py +350 -0
  32. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_schema.py +46 -0
  33. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/uv.lock +998 -715
  34. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/.codespell-ignore-words.txt +0 -0
  35. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/.github/CODEOWNERS +0 -0
  36. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/.gitignore +0 -0
  37. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/.readthedocs.yaml +0 -0
  38. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/.taskcluster.yml +0 -0
  39. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/.yamllint +0 -0
  40. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/CODE_OF_CONDUCT.md +0 -0
  41. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/CONTRIBUTING.rst +0 -0
  42. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/LICENSE +0 -0
  43. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/Makefile +0 -0
  44. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/README.rst +0 -0
  45. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/concepts/index.rst +0 -0
  46. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/concepts/kind.rst +0 -0
  47. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/concepts/loading.rst +0 -0
  48. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/concepts/optimization.rst +0 -0
  49. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/concepts/overview.rst +0 -0
  50. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/concepts/scopes.rst +0 -0
  51. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/concepts/task-graphs.rst +0 -0
  52. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/concepts/transforms.rst +0 -0
  53. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/conf.py +0 -0
  54. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/contributing.rst +0 -0
  55. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/glossary.rst +0 -0
  56. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/bootstrap-taskgraph.rst +0 -0
  57. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/create-actions.rst +0 -0
  58. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/create-tasks.rst +0 -0
  59. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/debugging.rst +0 -0
  60. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/define-schemas.rst +0 -0
  61. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/docker.rst +0 -0
  62. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/index.rst +0 -0
  63. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/load-task-locally.rst +0 -0
  64. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/resolve-keyed-by.rst +0 -0
  65. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/run-locally.rst +0 -0
  66. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/send-notifications.rst +0 -0
  67. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/howto/use-fetches.rst +0 -0
  68. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/index.rst +0 -0
  69. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/cli.rst +0 -0
  70. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/index.rst +0 -0
  71. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/migrations.rst +0 -0
  72. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/optimization-strategies.rst +0 -0
  73. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/source/modules.rst +0 -0
  74. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/source/taskgraph.actions.rst +0 -0
  75. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/source/taskgraph.loader.rst +0 -0
  76. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/source/taskgraph.optimize.rst +0 -0
  77. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/source/taskgraph.rst +0 -0
  78. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/source/taskgraph.transforms.rst +0 -0
  79. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/source/taskgraph.transforms.run.rst +0 -0
  80. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/source/taskgraph.util.rst +0 -0
  81. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/transforms/chunking.rst +0 -0
  82. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/transforms/from_deps.rst +0 -0
  83. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/transforms/index.rst +0 -0
  84. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/transforms/matrix.rst +0 -0
  85. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/reference/transforms/task_context.rst +0 -0
  86. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/tutorials/creating-a-task-graph.rst +0 -0
  87. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/tutorials/getting-started.rst +0 -0
  88. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/docs/tutorials/index.rst +0 -0
  89. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/make.bat +0 -0
  90. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/packages/pytest-taskgraph/README.md +0 -0
  91. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/packages/pytest-taskgraph/pyproject.toml +0 -0
  92. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/packages/pytest-taskgraph/src/pytest_taskgraph/__init__.py +0 -0
  93. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py +0 -0
  94. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/vcs.py +0 -0
  95. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/packages/sphinx-taskgraph/README.md +0 -0
  96. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/packages/sphinx-taskgraph/pyproject.toml +0 -0
  97. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/__init__.py +0 -0
  98. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/autoschema.py +0 -0
  99. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/renovate.json +0 -0
  100. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/__init__.py +0 -0
  101. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/actions/__init__.py +0 -0
  102. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/actions/add_new_jobs.py +0 -0
  103. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/actions/cancel.py +0 -0
  104. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/actions/cancel_all.py +0 -0
  105. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/actions/rebuild_cached_tasks.py +0 -0
  106. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/actions/registry.py +0 -0
  107. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/actions/retrigger.py +0 -0
  108. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/actions/util.py +0 -0
  109. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/config.py +0 -0
  110. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/create.py +0 -0
  111. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/docker.py +0 -0
  112. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/filter_tasks.py +0 -0
  113. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/generator.py +0 -0
  114. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/loader/__init__.py +0 -0
  115. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/loader/default.py +0 -0
  116. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/loader/transform.py +0 -0
  117. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/main.py +0 -0
  118. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/morph.py +0 -0
  119. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/optimize/__init__.py +0 -0
  120. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/optimize/strategies.py +0 -0
  121. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/parameters.py +0 -0
  122. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/run-task/hgrc +0 -0
  123. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/run-task/robustcheckout.py +0 -0
  124. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/task.py +0 -0
  125. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/taskgraph.py +0 -0
  126. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/__init__.py +0 -0
  127. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/base.py +0 -0
  128. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/cached_tasks.py +0 -0
  129. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/chunking.py +0 -0
  130. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/code_review.py +0 -0
  131. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/docker_image.py +0 -0
  132. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/fetch.py +0 -0
  133. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/from_deps.py +0 -0
  134. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/matrix.py +0 -0
  135. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/notify.py +0 -0
  136. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/run/__init__.py +0 -0
  137. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/run/common.py +0 -0
  138. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/run/index_search.py +0 -0
  139. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/run/run_task.py +0 -0
  140. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/run/toolchain.py +0 -0
  141. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/transforms/task_context.py +0 -0
  142. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/__init__.py +0 -0
  143. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/archive.py +0 -0
  144. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/attributes.py +0 -0
  145. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/cached_tasks.py +0 -0
  146. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/caches.py +0 -0
  147. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/copy.py +0 -0
  148. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/dependencies.py +0 -0
  149. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/docker.py +0 -0
  150. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/hash.py +0 -0
  151. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/json.py +0 -0
  152. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/keyed_by.py +0 -0
  153. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/path.py +0 -0
  154. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/python_path.py +0 -0
  155. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/readonlydict.py +0 -0
  156. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/set_name.py +0 -0
  157. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/shell.py +0 -0
  158. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/task_context.py +0 -0
  159. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/taskcluster.py +0 -0
  160. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/taskgraph.py +0 -0
  161. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/templates.py +0 -0
  162. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/treeherder.py +0 -0
  163. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/vcs.py +0 -0
  164. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/verify.py +0 -0
  165. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/workertypes.py +0 -0
  166. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/src/taskgraph/util/yaml.py +0 -0
  167. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/config.yml +0 -0
  168. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/REGISTRY +0 -0
  169. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/decision/Dockerfile +0 -0
  170. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/decision/HASH +0 -0
  171. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/decision/README.md +0 -0
  172. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/decision/VERSION +0 -0
  173. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/decision/system-setup.sh +0 -0
  174. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/image_builder/README.rst +0 -0
  175. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/index-task/README +0 -0
  176. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/index-task/insert-indexes.js +0 -0
  177. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/python/Dockerfile +0 -0
  178. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/run-task/system-setup.sh +0 -0
  179. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/skopeo/policy.json +0 -0
  180. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/docker/skopeo/push_image.sh +0 -0
  181. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/kinds/check/kind.yml +0 -0
  182. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/kinds/codecov/kind.yml +0 -0
  183. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/kinds/complete/kind.yml +0 -0
  184. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/kinds/doc/kind.yml +0 -0
  185. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/kinds/docker-image/kind.yml +0 -0
  186. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/kinds/fetch/kind.yml +0 -0
  187. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/kinds/push-image/kind.yml +0 -0
  188. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/kinds/test/kind.yml +0 -0
  189. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/kinds/test/linux.yml +0 -0
  190. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/kinds/test/windows.yml +0 -0
  191. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/scripts/codecov-upload.py +0 -0
  192. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/self_taskgraph/__init__.py +0 -0
  193. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/self_taskgraph/custom_parameters.py +0 -0
  194. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/self_taskgraph/custom_target_tasks.py +0 -0
  195. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/self_taskgraph/transforms/add_pr_route.py +0 -0
  196. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/self_taskgraph/transforms/push_image.py +0 -0
  197. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/test/params/main-repo-pull-request-untrusted.yml +0 -0
  198. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/test/params/main-repo-pull-request.yml +0 -0
  199. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/test/params/main-repo-push.yml +0 -0
  200. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/test/params/main-repo-release-pytest-taskgraph.yml +0 -0
  201. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/taskcluster/test/params/main-repo-release-taskcluster-taskgraph.yml +0 -0
  202. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/template/cookiecutter.json +0 -0
  203. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/template/hooks/post_gen_project.py +0 -0
  204. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/template/{{cookiecutter.project_name}}/taskcluster/config.yml +0 -0
  205. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/template/{{cookiecutter.project_name}}/taskcluster/docker/linux/Dockerfile +0 -0
  206. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/docker-image/kind.yml +0 -0
  207. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/hello/kind.yml +0 -0
  208. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/template/{{cookiecutter.project_name}}/taskcluster/{{cookiecutter.project_slug}}_taskgraph/transforms/hello.py +0 -0
  209. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/__init__.py +0 -0
  210. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/automationrelevance.json +0 -0
  211. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/conftest.py +0 -0
  212. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/data/task_context.yml +0 -0
  213. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/data/taskcluster/config.yml +0 -0
  214. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/data/taskcluster/docker/hello-world/Dockerfile +0 -0
  215. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/data/taskcluster/docker/hello-world-tag/Dockerfile +0 -0
  216. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/data/taskcluster/docker/hello-world-tag/REGISTRY +0 -0
  217. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/data/taskcluster/docker/hello-world-tag/VERSION +0 -0
  218. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/data/taskcluster/kinds/docker-image/kind.yml +0 -0
  219. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/data/taskcluster/scripts/toolchain/run.ps1 +0 -0
  220. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/data/taskcluster/scripts/toolchain/run.sh +0 -0
  221. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/data/taskcluster/test_taskgraph/transforms/foo.py +0 -0
  222. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/data/testmod/thing.py +0 -0
  223. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/mockedopen.py +0 -0
  224. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_actions_rebuild_cached_tasks.py +0 -0
  225. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_actions_registry.py +0 -0
  226. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_config.py +0 -0
  227. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_create.py +0 -0
  228. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_decision.py +0 -0
  229. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_docker.py +0 -0
  230. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_generator.py +0 -0
  231. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_main.py +0 -0
  232. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_morph.py +0 -0
  233. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_optimize.py +0 -0
  234. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_optimize_strategies.py +0 -0
  235. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_parameters.py +0 -0
  236. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_target_tasks.py +0 -0
  237. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_taskgraph.py +0 -0
  238. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transform_chunking.py +0 -0
  239. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transform_docker_image.py +0 -0
  240. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transform_task_context.py +0 -0
  241. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transforms_base.py +0 -0
  242. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transforms_cached_tasks.py +0 -0
  243. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transforms_fetch.py +0 -0
  244. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transforms_from_deps.py +0 -0
  245. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transforms_matrix.py +0 -0
  246. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transforms_notify.py +0 -0
  247. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transforms_run.py +0 -0
  248. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transforms_run_run_task.py +0 -0
  249. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transforms_run_toolchain.py +0 -0
  250. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_transforms_task.py +0 -0
  251. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_archive.py +0 -0
  252. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_attributes.py +0 -0
  253. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_cached_tasks.py +0 -0
  254. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_copy.py +0 -0
  255. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_dependencies.py +0 -0
  256. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_docker.py +0 -0
  257. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_json.py +0 -0
  258. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_keyed_by.py +0 -0
  259. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_parameterization.py +0 -0
  260. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_path.py +0 -0
  261. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_python_path.py +0 -0
  262. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_readonlydict.py +0 -0
  263. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_taskcluster.py +0 -0
  264. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_templates.py +0 -0
  265. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_time.py +0 -0
  266. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_treeherder.py +0 -0
  267. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_vcs.py +0 -0
  268. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_verify.py +0 -0
  269. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_workertypes.py +0 -0
  270. {taskcluster_taskgraph-24.2.3 → taskcluster_taskgraph-24.4.0}/test/test_util_yaml.py +0 -0
@@ -39,10 +39,10 @@ jobs:
39
39
 
40
40
  steps:
41
41
  - name: Checkout repository
42
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
42
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
43
43
  # Initializes the CodeQL tools for scanning.
44
44
  - name: Initialize CodeQL
45
- uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
45
+ uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
46
46
  with:
47
47
  languages: ${{ matrix.language }}
48
48
  # If you wish to specify custom queries, you can do so here or in a config file.
@@ -55,7 +55,7 @@ jobs:
55
55
  # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
56
56
  # If this step fails, then you should remove it and run the build manually (see below)
57
57
  - name: Autobuild
58
- uses: github/codeql-action/autobuild@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
58
+ uses: github/codeql-action/autobuild@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
59
59
 
60
60
  # ℹ️ Command-line programs to run using the OS shell.
61
61
  # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -67,4 +67,4 @@ jobs:
67
67
  # echo "Run, Build Application using script"
68
68
  # ./location_of_script_within_repo/buildscript.sh
69
69
  - name: Perform CodeQL Analysis
70
- uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
70
+ uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
@@ -18,14 +18,14 @@ jobs:
18
18
  contents: read # required for actions/checkout
19
19
  id-token: write # required for OIDC authentication with CodSpeed
20
20
  steps:
21
- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
22
- - uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
21
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
22
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
23
23
  with:
24
24
  python-version: "3.12"
25
25
  - name: Install dependencies
26
26
  run: uv sync
27
27
  - name: Run benchmarks
28
- uses: CodSpeedHQ/action@a4a36bb07c0638b0b4ca52bf1f3dad1b4289e52f # v4.18.1
28
+ uses: CodSpeedHQ/action@373d6868929f444bc08d901fd0eb0ad52a8875ea # v5.2.1
29
29
  with:
30
30
  mode: simulation
31
31
  run: uv run pytest test/ --codspeed
@@ -12,8 +12,8 @@ jobs:
12
12
  id-token: write
13
13
  steps:
14
14
  - name: Checkout sources
15
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
16
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
15
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
16
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
17
17
  with:
18
18
  python-version: '3.14'
19
19
  cache: 'pip'
@@ -28,7 +28,7 @@ jobs:
28
28
  # Renovate offsets that by bumping the pinned SHA (tracked via the
29
29
  # trailing `# vX.Y.Z` comment), so merge those bump PRs promptly.
30
30
  - name: Publish package distributions to PyPI
31
- uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
31
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
32
32
  pypi-publish-pytest-taskgraph:
33
33
  name: upload release to PyPI
34
34
  if: startsWith(github.ref, 'refs/tags/pytest-taskgraph')
@@ -38,8 +38,8 @@ jobs:
38
38
  id-token: write
39
39
  steps:
40
40
  - name: Checkout sources
41
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
42
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
41
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
42
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
43
43
  with:
44
44
  python-version: '3.14'
45
45
  cache: 'pip'
@@ -49,7 +49,7 @@ jobs:
49
49
  pip install build
50
50
  python -m build
51
51
  - name: Publish package distributions to PyPI
52
- uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
52
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
53
53
  with:
54
54
  packages-dir: packages/pytest-taskgraph/dist
55
55
  pypi-publish-sphinx-taskgraph:
@@ -61,8 +61,8 @@ jobs:
61
61
  id-token: write
62
62
  steps:
63
63
  - name: Checkout sources
64
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
65
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
64
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
65
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
66
66
  with:
67
67
  python-version: '3.14'
68
68
  cache: 'pip'
@@ -72,6 +72,6 @@ jobs:
72
72
  pip install build
73
73
  python -m build
74
74
  - name: Publish package distributions to PyPI
75
- uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
75
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
76
76
  with:
77
77
  packages-dir: packages/sphinx-taskgraph/dist
@@ -13,13 +13,13 @@ repos:
13
13
  exclude: template
14
14
  - id: check-added-large-files
15
15
  - repo: https://github.com/astral-sh/ruff-pre-commit
16
- rev: v0.15.20
16
+ rev: v0.16.9
17
17
  hooks:
18
18
  - id: ruff
19
19
  args: [--fix, --exit-non-zero-on-fix]
20
20
  - id: ruff-format
21
21
  - repo: https://github.com/astral-sh/uv-pre-commit
22
- rev: 0.11.26
22
+ rev: 0.12.19
23
23
  hooks:
24
24
  - id: uv-lock
25
25
  - repo: https://github.com/adrienverge/yamllint.git
@@ -28,7 +28,7 @@ repos:
28
28
  - id: yamllint
29
29
  exclude: template
30
30
  - repo: https://github.com/codespell-project/codespell
31
- rev: v2.4.2
31
+ rev: v2.4.3
32
32
  hooks:
33
33
  - id: codespell
34
34
  entry: codespell -I .codespell-ignore-words.txt
@@ -1,5 +1,40 @@
1
1
  # Change Log
2
2
 
3
+ ## [24.4.0] - 2026-10-05
4
+
5
+ ### Added
6
+
7
+ - Merge concurrently extracted fetches in a fixed order in `fetch-content`
8
+ - Hook point in `run-task` before the task payload
9
+ - Prefix `run_python_script` output in `run-task` with `[script <timestamp>]`
10
+
11
+ ### Changed
12
+
13
+ - `taskgraph init` template and tutorial docs now default to the `public_restricted` PR policy
14
+
15
+ ### Fixed
16
+
17
+ - `filter_for_git_branch` target task filter now works with untrusted PRs
18
+ - Update `@taskcluster/client` dependency to v110 (#1060)
19
+ - perf: compute `optionally_keyed_by` fields once per Schema class (#1049)
20
+ - perf: speed up resolving task definition references (#1051)
21
+ - perf: cache parsed relative time strings (#1052)
22
+ - perf: cache the visit order of graphs (#1053)
23
+ - perf: stop re-parsing the full task graph in the decision task (#1055)
24
+
25
+ ## [24.3.0] - 2026-09-17
26
+
27
+ ### Added
28
+
29
+ - Git sparse checkout support (#1039)
30
+ - Support for checking out git trees in parallel (#1041)
31
+
32
+ ### Fixed
33
+
34
+ - Improve performance of Graph.transitive_closure (#1014)
35
+ - Don't assume treeherder.group-names exists in graph config (#1024)
36
+ - Avoid seeking during tarball extraction on Windows in fetch-content (#1042)
37
+
3
38
  ## [24.2.3] - 2026-07-29
4
39
 
5
40
  ### Fixed
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: taskcluster-taskgraph
3
- Version: 24.2.3
3
+ Version: 24.4.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
@@ -96,9 +96,17 @@ project
96
96
 
97
97
  level
98
98
  ~~~~~
99
- The `SCM level`_ associated with this tree.
100
-
101
- .. _SCM level: https://www.mozilla.org/en-US/about/governance/policies/commit/access-policy/
99
+ The trust level associated with this task group. Trust levels provide a
100
+ convenient way to segregate resources such as worker-pools, secrets and
101
+ caches based on how the task group was triggered. This creates security
102
+ boundaries between various degrees of trust.
103
+
104
+ The meaning of a trust level can vary from project to project, but typically
105
+ level 1 is the lowest trust and corresponds to pull requests from external
106
+ contributors. Level 2 is a degree higher and denotes pull requests from repo
107
+ collaborators or pushes to unprotected branches. Level 3 is the highest
108
+ degree of trust and is reserved for pushes to protected branches and
109
+ releases.
102
110
 
103
111
  Target Set
104
112
  ----------
@@ -79,7 +79,7 @@ here is the recommended method:
79
79
  version: 1
80
80
  reporting: checks-v1
81
81
  policy:
82
- pullRequests: collaborators
82
+ pullRequests: public_restricted
83
83
  tasks:
84
84
  -
85
85
 
@@ -109,7 +109,7 @@ here is the recommended method:
109
109
  $if: 'tasks_for == "github-push"'
110
110
  then: '${event.pusher.email}'
111
111
  else:
112
- $if: 'tasks_for == "github-pull-request"'
112
+ $if: 'tasks_for[:19] == "github-pull-request"'
113
113
  then: '${event.pull_request.user.login}@users.noreply.github.com'
114
114
  else:
115
115
  $if: 'tasks_for == "github-release"'
@@ -118,22 +118,22 @@ here is the recommended method:
118
118
  $if: 'tasks_for == "github-push"'
119
119
  then: '${event.repository.html_url}'
120
120
  else:
121
- $if: 'tasks_for == "github-pull-request"'
121
+ $if: 'tasks_for[:19] == "github-pull-request"'
122
122
  then: '${event.pull_request.base.repo.html_url}'
123
123
  repoUrl:
124
124
  $if: 'tasks_for == "github-push"'
125
125
  then: '${event.repository.html_url}'
126
126
  else:
127
- $if: 'tasks_for == "github-pull-request"'
127
+ $if: 'tasks_for[:19] == "github-pull-request"'
128
128
  then: '${event.pull_request.head.repo.html_url}'
129
129
  project:
130
130
  $if: 'tasks_for == "github-push"'
131
131
  then: '${event.repository.name}'
132
132
  else:
133
- $if: 'tasks_for == "github-pull-request"'
133
+ $if: 'tasks_for[:19] == "github-pull-request"'
134
134
  then: '${event.pull_request.head.repo.name}'
135
135
  headBranch:
136
- $if: 'tasks_for == "github-pull-request"'
136
+ $if: 'tasks_for[:19] == "github-pull-request"'
137
137
  then: ${event.pull_request.head.ref}
138
138
  else:
139
139
  $if: 'tasks_for == "github-push"'
@@ -142,7 +142,7 @@ here is the recommended method:
142
142
  $if: 'tasks_for == "github-push"'
143
143
  then: '${event.after}'
144
144
  else:
145
- $if: 'tasks_for == "github-pull-request"'
145
+ $if: 'tasks_for[:19] == "github-pull-request"'
146
146
  then: '${event.pull_request.head.sha}'
147
147
 
148
148
  This isn't strictly necessary, but the format of the various Github events
@@ -165,7 +165,7 @@ here is the recommended method:
165
165
  in:
166
166
  $if: >
167
167
  tasks_for == "github-push" && headBranch == "main"
168
- || (tasks_for == "github-pull-request" && ${event.action} in ["opened", "reopened", "synchronize"])
168
+ || (tasks_for[:19] == "github-pull-request" && ${event.action} in ["opened", "reopened", "synchronize"])
169
169
  then:
170
170
  # Task definition goes here. Since there is no "else" clause, if
171
171
  # the above if statement evaluates to false, there will be no
@@ -236,9 +236,11 @@ here is the recommended method:
236
236
  # while ${headBranch[11:]} strips out 'refs/heads/'
237
237
  - 'assume:repo:${repoUrl[8:]}:branch:${headBranch[11:]}'
238
238
  else:
239
- $if: 'tasks_for == "github-pull-request"'
239
+ $if: 'tasks_for[:19] == "github-pull-request"'
240
240
  then:
241
- - 'assume:repo:github.com/${event.pull_request.base.repo.full_name}:pull-request'
241
+ # ${tasks_for[7:]} strips the 'github-' prefix, leaving
242
+ # either 'pull-request' or 'pull-request-untrusted'.
243
+ - 'assume:repo:github.com/${event.pull_request.base.repo.full_name}:${tasks_for[7:]}'
242
244
 
243
245
  Notice how we assume different roles depending on whether the task is
244
246
  coming from a push or a pull request. This is useful when you have tasks
@@ -246,6 +248,17 @@ here is the recommended method:
246
248
  accidentally running on a pull request! By using different scopes, you can
247
249
  ensure it won't ever happen.
248
250
 
251
+ With the ``public_restricted`` policy set above, Github reports pull
252
+ requests from repository collaborators with ``tasks_for ==
253
+ "github-pull-request"`` and pull requests from everyone else with
254
+ ``tasks_for == "github-pull-request-untrusted"``. Slicing ``tasks_for[7:]``
255
+ turns those into the role names ``pull-request`` and
256
+ ``pull-request-untrusted``, so you can grant non-collaborator pull
257
+ requests a more restricted set of scopes than collaborator ones. This
258
+ matters because collapsing that distinction (e.g. by using the ``public``
259
+ policy) means any external contributor's pull request gets the same
260
+ scopes as a trusted collaborator's.
261
+
249
262
  The roles assumed above may vary depending on the Taskcluster
250
263
  configuration.
251
264
 
@@ -310,7 +323,7 @@ here is the recommended method:
310
323
  # running your command
311
324
  MYREPO_PIP_REQUIREMENTS: taskcluster/requirements.txt
312
325
  REPOSITORIES: {$json: {myrepo: "MyRepo"}}
313
- - $if: 'tasks_for in ["github-pull-request"]'
326
+ - $if: 'tasks_for[:19] == "github-pull-request"'
314
327
  then:
315
328
  MYREPO_PULL_REQUEST_NUMBER: '${event.pull_request.number}'
316
329
  command:
@@ -2,7 +2,7 @@
2
2
  version: 1
3
3
  reporting: checks-v1
4
4
  policy:
5
- pullRequests: collaborators
5
+ pullRequests: public_restricted
6
6
  tasks:
7
7
  - $let:
8
8
  # Variable definitions
@@ -13,7 +13,7 @@ tasks:
13
13
  $if: 'tasks_for == "github-push"'
14
14
  then: '${event.pusher.email}'
15
15
  else:
16
- $if: 'tasks_for == "github-pull-request"'
16
+ $if: 'tasks_for[:19] == "github-pull-request"'
17
17
  then: '${event.pull_request.user.login}@users.noreply.github.com'
18
18
  else:
19
19
  $if: 'tasks_for == "github-release"'
@@ -22,22 +22,22 @@ tasks:
22
22
  $if: 'tasks_for == "github-push"'
23
23
  then: '${event.repository.html_url}'
24
24
  else:
25
- $if: 'tasks_for == "github-pull-request"'
25
+ $if: 'tasks_for[:19] == "github-pull-request"'
26
26
  then: '${event.pull_request.base.repo.html_url}'
27
27
  repoUrl:
28
28
  $if: 'tasks_for == "github-push"'
29
29
  then: '${event.repository.html_url}'
30
30
  else:
31
- $if: 'tasks_for == "github-pull-request"'
31
+ $if: 'tasks_for[:19] == "github-pull-request"'
32
32
  then: '${event.pull_request.head.repo.html_url}'
33
33
  project:
34
34
  $if: 'tasks_for == "github-push"'
35
35
  then: '${event.repository.name}'
36
36
  else:
37
- $if: 'tasks_for == "github-pull-request"'
37
+ $if: 'tasks_for[:19] == "github-pull-request"'
38
38
  then: '${event.pull_request.head.repo.name}'
39
39
  headBranch:
40
- $if: 'tasks_for == "github-pull-request"'
40
+ $if: 'tasks_for[:19] == "github-pull-request"'
41
41
  then: ${event.pull_request.head.ref}
42
42
  else:
43
43
  $if: 'tasks_for == "github-push"'
@@ -46,13 +46,13 @@ tasks:
46
46
  $if: 'tasks_for == "github-push"'
47
47
  then: '${event.after}'
48
48
  else:
49
- $if: 'tasks_for == "github-pull-request"'
49
+ $if: 'tasks_for[:19] == "github-pull-request"'
50
50
  then: '${event.pull_request.head.sha}'
51
51
  in:
52
52
  # Guard that controls when to schedule tasks.
53
53
  $if: >
54
54
  tasks_for == "github-push" && headBranch == "main"
55
- || (tasks_for == "github-pull-request" && ${event.action} in ["opened", "reopened", "synchronize"])
55
+ || (tasks_for[:19] == "github-pull-request" && ${event.action} in ["opened", "reopened", "synchronize"])
56
56
  then:
57
57
  # Task Definition
58
58
  taskId: '${ownTaskId}'
@@ -74,9 +74,14 @@ tasks:
74
74
  # while ${headBranch[11:]} strips out 'refs/heads/'
75
75
  - 'assume:repo:${repoUrl[8:]}:branch:${headBranch[11:]}'
76
76
  else:
77
- $if: 'tasks_for == "github-pull-request"'
77
+ $if: 'tasks_for[:19] == "github-pull-request"'
78
78
  then:
79
- - 'assume:repo:github.com/${event.pull_request.base.repo.full_name}:pull-request'
79
+ # ${tasks_for[7:]} strips the 'github-' prefix, leaving
80
+ # 'pull-request' or 'pull-request-untrusted'. With the
81
+ # 'public_restricted' policy these map to two separate
82
+ # roles, so pull requests from collaborators get more
83
+ # scopes than those from non-collaborators.
84
+ - 'assume:repo:github.com/${event.pull_request.base.repo.full_name}:${tasks_for[7:]}'
80
85
  payload:
81
86
  image:
82
87
  mozillareleases/taskgraph:decision-cf4b4b4baff57d84c1f9ec8fcd70c9839b70a7d66e6430a6c41ffe67252faa19@sha256:425e07f6813804483bc5a7258288a7684d182617ceeaa0176901ccc7702dfe28
@@ -97,7 +102,7 @@ tasks:
97
102
  # bootstrapped
98
103
  MYREPO_PIP_REQUIREMENTS: taskcluster/requirements.txt
99
104
  REPOSITORIES: {$json: {myrepo: "MyRepo"}}
100
- - $if: 'tasks_for in ["github-pull-request"]'
105
+ - $if: 'tasks_for[:19] == "github-pull-request"'
101
106
  then:
102
107
  MYREPO_PULL_REQUEST_NUMBER: '${event.pull_request.number}'
103
108
  command:
@@ -1,7 +1,7 @@
1
1
  ### Project
2
2
  [project]
3
3
  name = "taskcluster-taskgraph"
4
- version = "24.2.3"
4
+ version = "24.4.0"
5
5
  description = "Build taskcluster taskgraphs"
6
6
  readme = "README.rst"
7
7
  authors = [
@@ -17,7 +17,6 @@ from taskgraph.actions import render_actions_json
17
17
  from taskgraph.create import create_tasks
18
18
  from taskgraph.generator import TaskGraphGenerator
19
19
  from taskgraph.parameters import Parameters, get_version
20
- from taskgraph.taskgraph import TaskGraph
21
20
  from taskgraph.util import json
22
21
  from taskgraph.util.python_path import find_object
23
22
  from taskgraph.util.schema import Schema, validate_schema
@@ -131,9 +130,6 @@ def taskgraph_decision(options, parameters=None):
131
130
  "runnable-jobs.json", full_task_graph_to_runnable_tasks(full_task_json)
132
131
  )
133
132
 
134
- # this is just a test to check whether the from_json() function is working
135
- _, _ = TaskGraph.from_json(full_task_json)
136
-
137
133
  # write out the target task set to allow reproducing this as input
138
134
  write_artifact("target-tasks.json", list(tgg.target_task_set.tasks.keys()))
139
135
 
@@ -61,20 +61,24 @@ class Graph(_Graph):
61
61
  f"Unknown nodes in transitive closure: {nodes - self.nodes}"
62
62
  )
63
63
 
64
- # generate a new graph by expanding along edges until reaching a fixed
65
- # point
66
- new_nodes, new_edges = nodes, set()
67
- nodes, edges = set(), set()
68
- while (new_nodes, new_edges) != (nodes, edges):
69
- nodes, edges = new_nodes, new_edges
70
- add_edges = {
71
- (left, right, name)
72
- for (left, right, name) in self.edges
73
- if (right if reverse else left) in nodes
74
- }
75
- add_nodes = {(left if reverse else right) for (left, right, _) in add_edges}
76
- new_nodes = nodes | add_nodes
77
- new_edges = edges | add_edges
64
+ # Build an adjacency map keyed by the node to expand from. This reduces
65
+ # traversal below from O(V·E) -> O(V+E).
66
+ adjacency = collections.defaultdict(list)
67
+ for edge in self.edges:
68
+ left, right, _ = edge
69
+ adjacency[right if reverse else left].append(edge)
70
+
71
+ new_nodes = set(nodes)
72
+ new_edges = set()
73
+ queue = collections.deque(nodes)
74
+ while queue:
75
+ node = queue.popleft()
76
+ for edge in adjacency.get(node, ()):
77
+ new_edges.add(edge)
78
+ neighbor = edge[0] if reverse else edge[1]
79
+ if neighbor not in new_nodes:
80
+ new_nodes.add(neighbor)
81
+ queue.append(neighbor)
78
82
  return Graph(new_nodes, new_edges)
79
83
 
80
84
  def _visit(self, reverse):
@@ -103,6 +107,15 @@ class Graph(_Graph):
103
107
  f"Dependency loop detected involving the following nodes: {loopy_nodes}"
104
108
  )
105
109
 
110
+ @functools.cache
111
+ def _visit_order(self, reverse):
112
+ """
113
+ Return the order in which `_visit` yields nodes as a tuple. The graph
114
+ is immutable, so this is cached to avoid sorting it again every time
115
+ it is visited.
116
+ """
117
+ return tuple(self._visit(reverse))
118
+
106
119
  def visit_postorder(self):
107
120
  """
108
121
  Generate a sequence of nodes in postorder, such that every node is
@@ -110,14 +123,14 @@ class Graph(_Graph):
110
123
 
111
124
  Raises an exception if the graph contains a cycle.
112
125
  """
113
- return self._visit(False)
126
+ return iter(self._visit_order(False))
114
127
 
115
128
  def visit_preorder(self):
116
129
  """
117
130
  Like visit_postorder, but in reverse: evrey node is visited *before*
118
131
  any nodes it links to.
119
132
  """
120
- return self._visit(True)
133
+ return iter(self._visit_order(True))
121
134
 
122
135
  @functools.cache
123
136
  def links_and_reverse_links_dict(self):
@@ -78,7 +78,7 @@ def optimize_task_graph(
78
78
 
79
79
  # Gather each relevant task's index
80
80
  indexes = set()
81
- for label in target_task_graph.graph.visit_postorder():
81
+ for label in target_task_graph.tasks:
82
82
  if label in do_not_optimize:
83
83
  continue
84
84
  _, strategy, arg = optimizations(label)
@@ -157,7 +157,7 @@ def remove_tasks(
157
157
  opt_counts = defaultdict(int)
158
158
  opt_reasons = {}
159
159
  removed = set()
160
- dependents_of = target_task_graph.graph.reverse_links_dict()
160
+ _, dependents_of = target_task_graph.graph.links_and_reverse_links_dict()
161
161
  tasks = target_task_graph.tasks
162
162
  prune_candidates = set()
163
163