taskcluster-taskgraph 24.2.2__tar.gz → 24.3.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.2 → taskcluster_taskgraph-24.3.0}/.github/workflows/codeql-analysis.yml +4 -4
  2. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/.github/workflows/codspeed.yml +3 -3
  3. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/.github/workflows/pypi-publish.yml +9 -9
  4. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/.pre-commit-config.yaml +3 -3
  5. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/CHANGELOG.md +19 -0
  6. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/PKG-INFO +2 -2
  7. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/pyproject.toml +1 -1
  8. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/graph.py +18 -14
  9. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/run-task/fetch-content +66 -1
  10. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/run-task/robustcheckout.py +78 -6
  11. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/run-task/run-task +301 -24
  12. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/task.py +2 -1
  13. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/fetch/Dockerfile +1 -1
  14. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/index-task/Dockerfile +1 -1
  15. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/index-task/package.json +1 -1
  16. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/index-task/yarn.lock +10 -10
  17. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/run-task/Dockerfile +1 -1
  18. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/skopeo/Dockerfile +3 -3
  19. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_graph.py +60 -0
  20. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_scripts_run_task.py +301 -0
  21. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/uv.lock +998 -715
  22. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/.codespell-ignore-words.txt +0 -0
  23. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/.github/CODEOWNERS +0 -0
  24. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/.gitignore +0 -0
  25. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/.readthedocs.yaml +0 -0
  26. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/.taskcluster.yml +0 -0
  27. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/.yamllint +0 -0
  28. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/CODE_OF_CONDUCT.md +0 -0
  29. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/CONTRIBUTING.rst +0 -0
  30. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/LICENSE +0 -0
  31. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/Makefile +0 -0
  32. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/README.rst +0 -0
  33. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/concepts/index.rst +0 -0
  34. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/concepts/kind.rst +0 -0
  35. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/concepts/loading.rst +0 -0
  36. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/concepts/optimization.rst +0 -0
  37. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/concepts/overview.rst +0 -0
  38. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/concepts/scopes.rst +0 -0
  39. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/concepts/task-graphs.rst +0 -0
  40. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/concepts/transforms.rst +0 -0
  41. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/conf.py +0 -0
  42. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/contributing.rst +0 -0
  43. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/glossary.rst +0 -0
  44. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/bootstrap-taskgraph.rst +0 -0
  45. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/create-actions.rst +0 -0
  46. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/create-tasks.rst +0 -0
  47. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/debugging.rst +0 -0
  48. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/define-schemas.rst +0 -0
  49. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/docker.rst +0 -0
  50. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/index.rst +0 -0
  51. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/load-task-locally.rst +0 -0
  52. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/resolve-keyed-by.rst +0 -0
  53. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/run-locally.rst +0 -0
  54. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/send-notifications.rst +0 -0
  55. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/howto/use-fetches.rst +0 -0
  56. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/index.rst +0 -0
  57. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/cli.rst +0 -0
  58. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/index.rst +0 -0
  59. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/migrations.rst +0 -0
  60. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/optimization-strategies.rst +0 -0
  61. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/parameters.rst +0 -0
  62. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/source/modules.rst +0 -0
  63. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/source/taskgraph.actions.rst +0 -0
  64. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/source/taskgraph.loader.rst +0 -0
  65. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/source/taskgraph.optimize.rst +0 -0
  66. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/source/taskgraph.rst +0 -0
  67. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/source/taskgraph.transforms.rst +0 -0
  68. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/source/taskgraph.transforms.run.rst +0 -0
  69. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/source/taskgraph.util.rst +0 -0
  70. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/transforms/chunking.rst +0 -0
  71. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/transforms/from_deps.rst +0 -0
  72. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/transforms/index.rst +0 -0
  73. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/transforms/matrix.rst +0 -0
  74. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/reference/transforms/task_context.rst +0 -0
  75. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/tutorials/connecting-taskcluster.rst +0 -0
  76. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/tutorials/creating-a-task-graph.rst +0 -0
  77. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/tutorials/example-taskcluster.yml +0 -0
  78. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/tutorials/getting-started.rst +0 -0
  79. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/docs/tutorials/index.rst +0 -0
  80. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/make.bat +0 -0
  81. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/packages/pytest-taskgraph/README.md +0 -0
  82. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/packages/pytest-taskgraph/pyproject.toml +0 -0
  83. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/packages/pytest-taskgraph/src/pytest_taskgraph/__init__.py +0 -0
  84. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py +0 -0
  85. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/vcs.py +0 -0
  86. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/packages/sphinx-taskgraph/README.md +0 -0
  87. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/packages/sphinx-taskgraph/pyproject.toml +0 -0
  88. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/__init__.py +0 -0
  89. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/autoschema.py +0 -0
  90. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/renovate.json +0 -0
  91. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/__init__.py +0 -0
  92. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/actions/__init__.py +0 -0
  93. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/actions/add_new_jobs.py +0 -0
  94. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/actions/cancel.py +0 -0
  95. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/actions/cancel_all.py +0 -0
  96. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/actions/rebuild_cached_tasks.py +0 -0
  97. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/actions/registry.py +0 -0
  98. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/actions/retrigger.py +0 -0
  99. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/actions/util.py +0 -0
  100. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/config.py +0 -0
  101. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/create.py +0 -0
  102. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/decision.py +0 -0
  103. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/docker.py +0 -0
  104. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/filter_tasks.py +0 -0
  105. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/generator.py +0 -0
  106. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/loader/__init__.py +0 -0
  107. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/loader/default.py +0 -0
  108. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/loader/transform.py +0 -0
  109. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/main.py +0 -0
  110. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/morph.py +0 -0
  111. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/optimize/__init__.py +0 -0
  112. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/optimize/base.py +0 -0
  113. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/optimize/strategies.py +0 -0
  114. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/parameters.py +0 -0
  115. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/run-task/hgrc +0 -0
  116. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/target_tasks.py +0 -0
  117. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/task.py +0 -0
  118. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/taskgraph.py +0 -0
  119. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/__init__.py +0 -0
  120. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/base.py +0 -0
  121. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/cached_tasks.py +0 -0
  122. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/chunking.py +0 -0
  123. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/code_review.py +0 -0
  124. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/docker_image.py +0 -0
  125. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/fetch.py +0 -0
  126. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/from_deps.py +0 -0
  127. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/matrix.py +0 -0
  128. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/notify.py +0 -0
  129. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/run/__init__.py +0 -0
  130. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/run/common.py +0 -0
  131. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/run/index_search.py +0 -0
  132. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/run/run_task.py +0 -0
  133. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/run/toolchain.py +0 -0
  134. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/transforms/task_context.py +0 -0
  135. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/__init__.py +0 -0
  136. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/archive.py +0 -0
  137. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/attributes.py +0 -0
  138. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/cached_tasks.py +0 -0
  139. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/caches.py +0 -0
  140. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/copy.py +0 -0
  141. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/dependencies.py +0 -0
  142. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/docker.py +0 -0
  143. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/hash.py +0 -0
  144. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/json.py +0 -0
  145. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/keyed_by.py +0 -0
  146. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/parameterization.py +0 -0
  147. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/path.py +0 -0
  148. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/python_path.py +0 -0
  149. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/readonlydict.py +0 -0
  150. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/schema.py +0 -0
  151. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/set_name.py +0 -0
  152. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/shell.py +0 -0
  153. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/task_context.py +0 -0
  154. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/taskcluster.py +0 -0
  155. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/taskgraph.py +0 -0
  156. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/templates.py +0 -0
  157. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/time.py +0 -0
  158. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/treeherder.py +0 -0
  159. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/vcs.py +0 -0
  160. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/verify.py +0 -0
  161. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/workertypes.py +0 -0
  162. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/src/taskgraph/util/yaml.py +0 -0
  163. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/config.yml +0 -0
  164. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/REGISTRY +0 -0
  165. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/decision/Dockerfile +0 -0
  166. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/decision/HASH +0 -0
  167. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/decision/README.md +0 -0
  168. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/decision/VERSION +0 -0
  169. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/decision/system-setup.sh +0 -0
  170. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/image_builder/README.rst +0 -0
  171. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/index-task/README +0 -0
  172. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/index-task/insert-indexes.js +0 -0
  173. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/python/Dockerfile +0 -0
  174. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/run-task/system-setup.sh +0 -0
  175. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/skopeo/policy.json +0 -0
  176. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/docker/skopeo/push_image.sh +0 -0
  177. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/kinds/check/kind.yml +0 -0
  178. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/kinds/codecov/kind.yml +0 -0
  179. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/kinds/complete/kind.yml +0 -0
  180. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/kinds/doc/kind.yml +0 -0
  181. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/kinds/docker-image/kind.yml +0 -0
  182. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/kinds/fetch/kind.yml +0 -0
  183. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/kinds/push-image/kind.yml +0 -0
  184. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/kinds/test/kind.yml +0 -0
  185. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/kinds/test/linux.yml +0 -0
  186. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/kinds/test/windows.yml +0 -0
  187. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/scripts/codecov-upload.py +0 -0
  188. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/self_taskgraph/__init__.py +0 -0
  189. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/self_taskgraph/custom_parameters.py +0 -0
  190. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/self_taskgraph/custom_target_tasks.py +0 -0
  191. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/self_taskgraph/transforms/add_pr_route.py +0 -0
  192. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/self_taskgraph/transforms/push_image.py +0 -0
  193. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/test/params/main-repo-pull-request-untrusted.yml +0 -0
  194. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/test/params/main-repo-pull-request.yml +0 -0
  195. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/test/params/main-repo-push.yml +0 -0
  196. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/test/params/main-repo-release-pytest-taskgraph.yml +0 -0
  197. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/taskcluster/test/params/main-repo-release-taskcluster-taskgraph.yml +0 -0
  198. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/template/cookiecutter.json +0 -0
  199. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/template/hooks/post_gen_project.py +0 -0
  200. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/template/{{cookiecutter.project_name}}/taskcluster/config.yml +0 -0
  201. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/template/{{cookiecutter.project_name}}/taskcluster/docker/linux/Dockerfile +0 -0
  202. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/docker-image/kind.yml +0 -0
  203. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/hello/kind.yml +0 -0
  204. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/template/{{cookiecutter.project_name}}/taskcluster/{{cookiecutter.project_slug}}_taskgraph/transforms/hello.py +0 -0
  205. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/template/{{cookiecutter.project_name}}/taskcluster.github.yml +0 -0
  206. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/__init__.py +0 -0
  207. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/automationrelevance.json +0 -0
  208. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/conftest.py +0 -0
  209. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/data/task_context.yml +0 -0
  210. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/data/taskcluster/config.yml +0 -0
  211. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/data/taskcluster/docker/hello-world/Dockerfile +0 -0
  212. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/data/taskcluster/docker/hello-world-tag/Dockerfile +0 -0
  213. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/data/taskcluster/docker/hello-world-tag/REGISTRY +0 -0
  214. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/data/taskcluster/docker/hello-world-tag/VERSION +0 -0
  215. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/data/taskcluster/kinds/docker-image/kind.yml +0 -0
  216. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/data/taskcluster/scripts/toolchain/run.ps1 +0 -0
  217. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/data/taskcluster/scripts/toolchain/run.sh +0 -0
  218. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/data/taskcluster/test_taskgraph/transforms/foo.py +0 -0
  219. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/data/testmod/thing.py +0 -0
  220. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/mockedopen.py +0 -0
  221. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_actions_rebuild_cached_tasks.py +0 -0
  222. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_actions_registry.py +0 -0
  223. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_config.py +0 -0
  224. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_create.py +0 -0
  225. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_decision.py +0 -0
  226. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_docker.py +0 -0
  227. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_generator.py +0 -0
  228. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_graph_perf.py +0 -0
  229. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_main.py +0 -0
  230. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_morph.py +0 -0
  231. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_optimize.py +0 -0
  232. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_optimize_strategies.py +0 -0
  233. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_parameters.py +0 -0
  234. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_scripts_fetch_content.py +0 -0
  235. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_target_tasks.py +0 -0
  236. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_taskgraph.py +0 -0
  237. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transform_chunking.py +0 -0
  238. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transform_docker_image.py +0 -0
  239. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transform_task_context.py +0 -0
  240. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transforms_base.py +0 -0
  241. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transforms_cached_tasks.py +0 -0
  242. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transforms_fetch.py +0 -0
  243. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transforms_from_deps.py +0 -0
  244. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transforms_matrix.py +0 -0
  245. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transforms_notify.py +0 -0
  246. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transforms_run.py +0 -0
  247. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transforms_run_run_task.py +0 -0
  248. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transforms_run_toolchain.py +0 -0
  249. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_transforms_task.py +0 -0
  250. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_archive.py +0 -0
  251. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_attributes.py +0 -0
  252. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_cached_tasks.py +0 -0
  253. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_copy.py +0 -0
  254. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_dependencies.py +0 -0
  255. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_docker.py +0 -0
  256. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_json.py +0 -0
  257. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_keyed_by.py +0 -0
  258. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_parameterization.py +0 -0
  259. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_path.py +0 -0
  260. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_python_path.py +0 -0
  261. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_readonlydict.py +0 -0
  262. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_schema.py +0 -0
  263. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_taskcluster.py +0 -0
  264. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_templates.py +0 -0
  265. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_time.py +0 -0
  266. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_treeherder.py +0 -0
  267. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_vcs.py +0 -0
  268. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_verify.py +0 -0
  269. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.0}/test/test_util_workertypes.py +0 -0
  270. {taskcluster_taskgraph-24.2.2 → taskcluster_taskgraph-24.3.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@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
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@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
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@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
@@ -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@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
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.5
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.8
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,24 @@
1
1
  # Change Log
2
2
 
3
+ ## [24.3.0] - 2026-09-17
4
+
5
+ ### Added
6
+
7
+ - Git sparse checkout support (#1039)
8
+ - Support for checking out git trees in parallel (#1041)
9
+
10
+ ### Fixed
11
+
12
+ - Improve performance of Graph.transitive_closure (#1014)
13
+ - Don't assume treeherder.group-names exists in graph config (#1024)
14
+ - Avoid seeking during tarball extraction on Windows in fetch-content (#1042)
15
+
16
+ ## [24.2.3] - 2026-07-29
17
+
18
+ ### Fixed
19
+
20
+ - Vendor latest robustcheckout
21
+
3
22
  ## [24.2.2] - 2026-07-28
4
23
 
5
24
  ### Fixed
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: taskcluster-taskgraph
3
- Version: 24.2.2
3
+ Version: 24.3.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 = "24.2.2"
4
+ version = "24.3.0"
5
5
  description = "Build taskcluster taskgraphs"
6
6
  readme = "README.rst"
7
7
  authors = [
@@ -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):
@@ -18,6 +18,7 @@ import os
18
18
  import pathlib
19
19
  import random
20
20
  import re
21
+ import shutil
21
22
  import ssl
22
23
  import stat
23
24
  import subprocess
@@ -377,6 +378,70 @@ def archive_type(path: pathlib.Path):
377
378
  return None
378
379
 
379
380
 
381
+ class TarFile(tarfile.TarFile):
382
+ # When a tarball contains symbolic links, the python tarfile module ends up
383
+ # trying to seek in the tar, which doesn't quite work when the tar is a
384
+ # stream (which it is when decompressing at the same time). We wrap TarFile
385
+ # so as to handle the symbolic link situation ourselves, and when we can't
386
+ # create symbolic links (e.g. on Windows), we instead create a copy of the
387
+ # file the link points to.
388
+ def _do_extract(
389
+ self, extract, member, path="", set_attrs=True, numeric_owner=False, **kwargs
390
+ ):
391
+ deferred_links = getattr(self, "_deferred_links", None)
392
+ if not isinstance(member, tarfile.TarInfo):
393
+ member = self.getmember(member)
394
+ targetpath = os.path.normcase(os.path.join(path, member.name))
395
+
396
+ if deferred_links is not None and member.issym():
397
+ if os.path.lexists(targetpath):
398
+ # Avoid FileExistsError on following os.symlink.
399
+ os.unlink(targetpath)
400
+ try:
401
+ os.symlink(member.linkname, targetpath)
402
+ except (NotImplementedError, OSError):
403
+ # On Windows, os.symlink can fail, in this case fallback to
404
+ # creating a copy. If the destination was not already created,
405
+ # defer the link creation.
406
+ source = os.path.normcase(
407
+ os.path.join(os.path.dirname(targetpath), member.linkname)
408
+ )
409
+
410
+ if source in self._extracted_members:
411
+ shutil.copy(source, targetpath)
412
+ self.chown(member, targetpath, numeric_owner)
413
+ else:
414
+ deferred_links.setdefault(source, []).append(
415
+ (member, targetpath, numeric_owner)
416
+ )
417
+ return
418
+
419
+ extract(member, path, set_attrs, numeric_owner=numeric_owner, **kwargs)
420
+ if deferred_links is not None:
421
+ for tarinfo, linkpath, numeric_owner in deferred_links.pop(targetpath, []):
422
+ shutil.copy(targetpath, linkpath)
423
+ self.chown(tarinfo, linkpath, numeric_owner)
424
+ self._extracted_members.add(targetpath)
425
+
426
+ def extract(self, *args, **kwargs):
427
+ self._do_extract(super(TarFile, self).extract, *args, **kwargs)
428
+
429
+ # extractall in versions for cpython that implement PEP 706 call _extract_one
430
+ # instead of extract.
431
+ def _extract_one(self, *args, **kwargs):
432
+ self._do_extract(super(TarFile, self)._extract_one, *args, **kwargs)
433
+
434
+ def extractall(self, *args, **kwargs):
435
+ self._deferred_links = {}
436
+ self._extracted_members = set()
437
+ super(TarFile, self).extractall(*args, **kwargs)
438
+ for links in self._deferred_links.values():
439
+ for tarinfo, linkpath, numeric_owner in links:
440
+ log(f"Cannot create dangling symbolic link: {linkpath}")
441
+ delattr(self, "_deferred_links")
442
+ delattr(self, "_extracted_members")
443
+
444
+
380
445
  def extract_archive(path, dest_dir):
381
446
  """Extract an archive to a destination directory."""
382
447
 
@@ -398,7 +463,7 @@ def extract_archive(path, dest_dir):
398
463
  # also not much slower on Windows, presumably because of the
399
464
  # notoriously bad I/O).
400
465
  if sys.platform == "win32":
401
- tar = tarfile.open(fileobj=ifh, mode="r|")
466
+ tar = TarFile.open(fileobj=ifh, mode="r|")
402
467
  tar.extractall(str(dest_dir))
403
468
  args = []
404
469
  else:
@@ -18,6 +18,7 @@ import random
18
18
  import re
19
19
  import socket
20
20
  import ssl
21
+ import stat
21
22
  import time
22
23
 
23
24
  from mercurial.i18n import _
@@ -38,6 +39,22 @@ from mercurial import (
38
39
  vfs,
39
40
  )
40
41
 
42
+ # TRACKING hg72 - `hg.repository`/`hg.peer` moved to `mercurial.repo.factory`.
43
+ try:
44
+ from mercurial.repo import factory as _repofactory
45
+
46
+ _repository = _repofactory.repository
47
+ _peer = _repofactory.peer
48
+ except ImportError:
49
+ _repository = hg.repository
50
+ _peer = hg.peer
51
+
52
+ # TRACKING hg72 - `hg.clone` moved to `mercurial.cmd_impls.clone.clone`.
53
+ try:
54
+ from mercurial.cmd_impls.clone import clone as _clone
55
+ except ImportError:
56
+ _clone = hg.clone
57
+
41
58
  # Causes worker to purge caches on process exit and for task to retry.
42
59
  EXIT_PURGE_CACHE = 72
43
60
 
@@ -67,6 +84,57 @@ def peerlookup(remote, v):
67
84
  return e.callcommand(b"lookup", {b"key": v}).result()
68
85
 
69
86
 
87
+ def remove_dangling_links(ui, path):
88
+ """On Windows, remove dangling symlinks and junctions under ``path``.
89
+
90
+ npm's ``file:`` protocol dependencies create directory junctions in
91
+ ``node_modules/`` with absolute targets. When a Taskcluster cache
92
+ is restored to a different task directory those targets no longer
93
+ exist, and Mercurial's purge crashes in ``vfs.listdir()`` with
94
+ ``FileNotFoundError``. Removing them first lets purge proceed.
95
+ """
96
+ if os.name != "nt":
97
+ return
98
+
99
+ ui.write(b"windows detected, removing dangling links\n")
100
+
101
+ stack = [path]
102
+ while stack:
103
+ dirpath = stack.pop()
104
+ try:
105
+ entries = os.scandir(dirpath)
106
+ except OSError:
107
+ continue
108
+
109
+ with entries:
110
+ for entry in entries:
111
+ p = entry.path
112
+ try:
113
+ attrs = entry.stat(follow_symlinks=False).st_file_attributes
114
+ except OSError:
115
+ continue
116
+
117
+ if attrs & stat.FILE_ATTRIBUTE_REPARSE_POINT:
118
+ if not os.path.exists(p):
119
+ ui.write(
120
+ b"(removing dangling link %s)\n"
121
+ % os.fsencode(os.path.relpath(p, path))
122
+ )
123
+ try:
124
+ os.rmdir(p)
125
+ except OSError:
126
+ os.remove(p)
127
+ continue
128
+
129
+ try:
130
+ is_dir = entry.is_dir(follow_symlinks=False)
131
+ except OSError:
132
+ continue
133
+
134
+ if is_dir:
135
+ stack.append(p)
136
+
137
+
70
138
  @command(
71
139
  b"robustcheckout",
72
140
  [
@@ -427,7 +495,7 @@ def _docheckout(
427
495
  def handlerepoerror(e):
428
496
  if pycompat.bytestr(e) == _(b"abandoned transaction found"):
429
497
  ui.warn(b"(abandoned transaction found; trying to recover)\n")
430
- repo = hg.repository(ui, dest)
498
+ repo = _repository(ui, dest)
431
499
  if not repo.recover():
432
500
  ui.warn(b"(could not recover repo state; deleting shared store)\n")
433
501
  with timeit("remove_unrecovered_shared_store", "remove-store"):
@@ -535,7 +603,7 @@ def _docheckout(
535
603
  cloneurl = upstream or url
536
604
 
537
605
  try:
538
- clonepeer = hg.peer(ui, {}, cloneurl)
606
+ clonepeer = _peer(ui, {}, cloneurl)
539
607
  rootnode = peerlookup(clonepeer, b"0")
540
608
  except error.RepoLookupError:
541
609
  raise error.Abort(b"unable to resolve root revision from clone source")
@@ -623,12 +691,12 @@ def _docheckout(
623
691
  ui.write(b"(cloning from upstream repo %s)\n" % upstream)
624
692
 
625
693
  if not storevfs.exists():
626
- behaviors.add(b"create-store")
694
+ behaviors.add("create-store")
627
695
 
628
696
  try:
629
697
  with timeit("clone", "clone"):
630
698
  shareopts = {b"pool": sharebase, b"mode": b"identity"}
631
- res = hg.clone(
699
+ res = _clone(
632
700
  ui,
633
701
  {},
634
702
  clonepeer,
@@ -667,7 +735,7 @@ def _docheckout(
667
735
  # The destination .hg directory should exist. Now make sure we have the
668
736
  # wanted revision.
669
737
 
670
- repo = hg.repository(ui, dest)
738
+ repo = _repository(ui, dest)
671
739
 
672
740
  # We only pull if we are using symbolic names or the requested revision
673
741
  # doesn't exist.
@@ -694,7 +762,7 @@ def _docheckout(
694
762
 
695
763
  remote = None
696
764
  try:
697
- remote = hg.peer(repo, {}, url)
765
+ remote = _peer(repo, {}, url)
698
766
  pullrevs = [peerlookup(remote, revision or branch)]
699
767
  checkoutrevision = hex(pullrevs[0])
700
768
  if branch:
@@ -741,6 +809,10 @@ def _docheckout(
741
809
  # guaranteed to not have conflicts on `hg update`.
742
810
  if purge and not created:
743
811
  ui.write(b"(purging working directory)\n")
812
+
813
+ with timeit("purge", "dangling_link_remove"):
814
+ remove_dangling_links(ui, dest)
815
+
744
816
  purge = getattr(commands, "purge", None)
745
817
  if not purge:
746
818
  purge = extensions.find(b"purge").purge