taskcluster-taskgraph 21.0.0__tar.gz → 22.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.pre-commit-config.yaml +1 -2
  2. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.taskcluster.yml +0 -1
  3. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/CHANGELOG.md +11 -0
  4. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/PKG-INFO +1 -1
  5. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/migrations.rst +8 -0
  6. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/pyproject.toml +1 -2
  7. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/decision.py +1 -1
  8. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/run-task/run-task +1 -14
  9. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/task.py +0 -5
  10. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/vcs.py +36 -4
  11. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/conftest.py +15 -2
  12. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_decision.py +3 -1
  13. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_scripts_run_task.py +0 -46
  14. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_vcs.py +11 -9
  15. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/uv.lock +1 -1
  16. taskcluster_taskgraph-21.0.0/taskcluster/scripts/external_tools/tooltool.py +0 -1502
  17. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.codespell-ignore-words.txt +0 -0
  18. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/CODEOWNERS +0 -0
  19. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/dependabot.yml +0 -0
  20. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/workflows/codeql-analysis.yml +0 -0
  21. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/workflows/pre-commit-autoupdate.yml +0 -0
  22. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/workflows/pre-commit.yml +0 -0
  23. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/workflows/pypi-publish.yml +0 -0
  24. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.gitignore +0 -0
  25. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.readthedocs.yaml +0 -0
  26. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.yamllint +0 -0
  27. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/CODE_OF_CONDUCT.md +0 -0
  28. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/CONTRIBUTING.rst +0 -0
  29. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/LICENSE +0 -0
  30. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/Makefile +0 -0
  31. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/README.rst +0 -0
  32. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/index.rst +0 -0
  33. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/kind.rst +0 -0
  34. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/loading.rst +0 -0
  35. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/optimization.rst +0 -0
  36. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/overview.rst +0 -0
  37. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/scopes.rst +0 -0
  38. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/task-graphs.rst +0 -0
  39. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/transforms.rst +0 -0
  40. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/conf.py +0 -0
  41. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/contributing.rst +0 -0
  42. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/glossary.rst +0 -0
  43. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/bootstrap-taskgraph.rst +0 -0
  44. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/create-actions.rst +0 -0
  45. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/create-tasks.rst +0 -0
  46. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/debugging.rst +0 -0
  47. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/docker.rst +0 -0
  48. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/index.rst +0 -0
  49. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/load-task-locally.rst +0 -0
  50. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/resolve-keyed-by.rst +0 -0
  51. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/run-locally.rst +0 -0
  52. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/send-notifications.rst +0 -0
  53. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/use-fetches.rst +0 -0
  54. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/index.rst +0 -0
  55. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/cli.rst +0 -0
  56. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/index.rst +0 -0
  57. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/optimization-strategies.rst +0 -0
  58. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/parameters.rst +0 -0
  59. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/modules.rst +0 -0
  60. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.actions.rst +0 -0
  61. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.loader.rst +0 -0
  62. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.optimize.rst +0 -0
  63. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.rst +0 -0
  64. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.transforms.rst +0 -0
  65. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.transforms.run.rst +0 -0
  66. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.util.rst +0 -0
  67. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/transforms/chunking.rst +0 -0
  68. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/transforms/from_deps.rst +0 -0
  69. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/transforms/index.rst +0 -0
  70. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/transforms/matrix.rst +0 -0
  71. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/transforms/task_context.rst +0 -0
  72. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/tutorials/connecting-taskcluster.rst +0 -0
  73. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/tutorials/creating-a-task-graph.rst +0 -0
  74. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/tutorials/example-taskcluster.yml +0 -0
  75. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/tutorials/getting-started.rst +0 -0
  76. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/tutorials/index.rst +0 -0
  77. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/make.bat +0 -0
  78. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/pytest-taskgraph/README.md +0 -0
  79. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/pytest-taskgraph/pyproject.toml +0 -0
  80. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/pytest-taskgraph/src/pytest_taskgraph/__init__.py +0 -0
  81. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py +0 -0
  82. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/vcs.py +0 -0
  83. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/sphinx-taskgraph/README.md +0 -0
  84. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/sphinx-taskgraph/pyproject.toml +0 -0
  85. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/__init__.py +0 -0
  86. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/autoschema.py +0 -0
  87. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/__init__.py +0 -0
  88. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/__init__.py +0 -0
  89. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/add_new_jobs.py +0 -0
  90. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/cancel.py +0 -0
  91. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/cancel_all.py +0 -0
  92. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/rebuild_cached_tasks.py +0 -0
  93. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/registry.py +0 -0
  94. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/retrigger.py +0 -0
  95. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/util.py +0 -0
  96. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/config.py +0 -0
  97. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/create.py +0 -0
  98. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/docker.py +0 -0
  99. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/filter_tasks.py +0 -0
  100. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/generator.py +0 -0
  101. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/graph.py +0 -0
  102. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/loader/__init__.py +0 -0
  103. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/loader/default.py +0 -0
  104. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/loader/transform.py +0 -0
  105. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/main.py +0 -0
  106. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/morph.py +0 -0
  107. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/optimize/__init__.py +0 -0
  108. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/optimize/base.py +0 -0
  109. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/optimize/strategies.py +0 -0
  110. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/parameters.py +0 -0
  111. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/run-task/fetch-content +0 -0
  112. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/run-task/hgrc +0 -0
  113. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/run-task/robustcheckout.py +0 -0
  114. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/target_tasks.py +0 -0
  115. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/task.py +0 -0
  116. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/taskgraph.py +0 -0
  117. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/__init__.py +0 -0
  118. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/base.py +0 -0
  119. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/cached_tasks.py +0 -0
  120. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/chunking.py +0 -0
  121. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/code_review.py +0 -0
  122. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/docker_image.py +0 -0
  123. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/fetch.py +0 -0
  124. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/from_deps.py +0 -0
  125. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/matrix.py +0 -0
  126. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/notify.py +0 -0
  127. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/run/__init__.py +0 -0
  128. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/run/common.py +0 -0
  129. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/run/index_search.py +0 -0
  130. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/run/run_task.py +0 -0
  131. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/run/toolchain.py +0 -0
  132. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/task_context.py +0 -0
  133. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/__init__.py +0 -0
  134. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/archive.py +0 -0
  135. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/attributes.py +0 -0
  136. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/cached_tasks.py +0 -0
  137. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/caches.py +0 -0
  138. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/copy.py +0 -0
  139. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/dependencies.py +0 -0
  140. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/docker.py +0 -0
  141. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/hash.py +0 -0
  142. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/json.py +0 -0
  143. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/keyed_by.py +0 -0
  144. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/parameterization.py +0 -0
  145. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/path.py +0 -0
  146. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/python_path.py +0 -0
  147. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/readonlydict.py +0 -0
  148. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/schema.py +0 -0
  149. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/set_name.py +0 -0
  150. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/shell.py +0 -0
  151. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/taskcluster.py +0 -0
  152. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/taskgraph.py +0 -0
  153. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/templates.py +0 -0
  154. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/time.py +0 -0
  155. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/treeherder.py +0 -0
  156. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/verify.py +0 -0
  157. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/workertypes.py +0 -0
  158. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/yaml.py +0 -0
  159. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/config.yml +0 -0
  160. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/REGISTRY +0 -0
  161. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/decision/Dockerfile +0 -0
  162. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/decision/HASH +0 -0
  163. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/decision/README.md +0 -0
  164. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/decision/VERSION +0 -0
  165. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/decision/system-setup.sh +0 -0
  166. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/fetch/Dockerfile +0 -0
  167. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/image_builder/README.rst +0 -0
  168. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/index-task/Dockerfile +0 -0
  169. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/index-task/README +0 -0
  170. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/index-task/insert-indexes.js +0 -0
  171. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/index-task/package.json +0 -0
  172. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/index-task/yarn.lock +0 -0
  173. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/python/Dockerfile +0 -0
  174. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/run-task/Dockerfile +0 -0
  175. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/run-task/system-setup.sh +0 -0
  176. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/skopeo/Dockerfile +0 -0
  177. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/skopeo/policy.json +0 -0
  178. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/skopeo/push_image.sh +0 -0
  179. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/check/kind.yml +0 -0
  180. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/codecov/kind.yml +0 -0
  181. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/complete/kind.yml +0 -0
  182. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/doc/kind.yml +0 -0
  183. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/docker-image/kind.yml +0 -0
  184. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/fetch/kind.yml +0 -0
  185. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/push-image/kind.yml +0 -0
  186. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/test/kind.yml +0 -0
  187. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/test/linux.yml +0 -0
  188. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/test/windows.yml +0 -0
  189. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/scripts/codecov-upload.py +0 -0
  190. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/self_taskgraph/__init__.py +0 -0
  191. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/self_taskgraph/custom_parameters.py +0 -0
  192. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/self_taskgraph/custom_target_tasks.py +0 -0
  193. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/self_taskgraph/transforms/add_pr_route.py +0 -0
  194. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/self_taskgraph/transforms/push_image.py +0 -0
  195. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/test/params/main-repo-pull-request-untrusted.yml +0 -0
  196. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/test/params/main-repo-pull-request.yml +0 -0
  197. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/test/params/main-repo-push.yml +0 -0
  198. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/test/params/main-repo-release-pytest-taskgraph.yml +0 -0
  199. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/test/params/main-repo-release-taskcluster-taskgraph.yml +0 -0
  200. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/cookiecutter.json +0 -0
  201. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/hooks/post_gen_project.py +0 -0
  202. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster/config.yml +0 -0
  203. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster/docker/linux/Dockerfile +0 -0
  204. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/docker-image/kind.yml +0 -0
  205. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/hello/kind.yml +0 -0
  206. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster/{{cookiecutter.project_slug}}_taskgraph/transforms/hello.py +0 -0
  207. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster.github.yml +0 -0
  208. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/__init__.py +0 -0
  209. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/automationrelevance.json +0 -0
  210. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/task_context.yml +0 -0
  211. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/config.yml +0 -0
  212. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/docker/hello-world/Dockerfile +0 -0
  213. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/docker/hello-world-tag/Dockerfile +0 -0
  214. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/docker/hello-world-tag/REGISTRY +0 -0
  215. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/docker/hello-world-tag/VERSION +0 -0
  216. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/kinds/docker-image/kind.yml +0 -0
  217. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/scripts/toolchain/run.ps1 +0 -0
  218. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/scripts/toolchain/run.sh +0 -0
  219. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/test_taskgraph/transforms/foo.py +0 -0
  220. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/testmod/thing.py +0 -0
  221. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/mockedopen.py +0 -0
  222. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_actions_rebuild_cached_tasks.py +0 -0
  223. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_actions_registry.py +0 -0
  224. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_config.py +0 -0
  225. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_create.py +0 -0
  226. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_docker.py +0 -0
  227. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_generator.py +0 -0
  228. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_graph.py +0 -0
  229. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_main.py +0 -0
  230. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_morph.py +0 -0
  231. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_optimize.py +0 -0
  232. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_optimize_strategies.py +0 -0
  233. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_parameters.py +0 -0
  234. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_scripts_fetch_content.py +0 -0
  235. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_target_tasks.py +0 -0
  236. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_taskgraph.py +0 -0
  237. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transform_chunking.py +0 -0
  238. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transform_docker_image.py +0 -0
  239. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transform_task_context.py +0 -0
  240. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_base.py +0 -0
  241. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_cached_tasks.py +0 -0
  242. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_fetch.py +0 -0
  243. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_from_deps.py +0 -0
  244. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_matrix.py +0 -0
  245. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_notify.py +0 -0
  246. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_run.py +0 -0
  247. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_run_run_task.py +0 -0
  248. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_run_toolchain.py +0 -0
  249. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_task.py +0 -0
  250. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_archive.py +0 -0
  251. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_attributes.py +0 -0
  252. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_cached_tasks.py +0 -0
  253. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_copy.py +0 -0
  254. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_dependencies.py +0 -0
  255. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_docker.py +0 -0
  256. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_json.py +0 -0
  257. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_keyed_by.py +0 -0
  258. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_parameterization.py +0 -0
  259. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_path.py +0 -0
  260. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_python_path.py +0 -0
  261. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_readonlydict.py +0 -0
  262. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_schema.py +0 -0
  263. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_taskcluster.py +0 -0
  264. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_templates.py +0 -0
  265. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_time.py +0 -0
  266. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_treeherder.py +0 -0
  267. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_verify.py +0 -0
  268. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_workertypes.py +0 -0
  269. {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_yaml.py +0 -0
@@ -48,6 +48,5 @@ exclude: |
48
48
  (?x)^(
49
49
  src/taskgraph/run-task/fetch-content |
50
50
  src/taskgraph/run-task/robustcheckout.py |
51
- src/taskgraph/run-task/run-task |
52
- taskcluster/scripts/external_tools
51
+ src/taskgraph/run-task/run-task
53
52
  )
@@ -226,7 +226,6 @@ tasks:
226
226
  - $if: 'isPullRequest'
227
227
  then:
228
228
  TASKGRAPH_PULL_REQUEST_NUMBER: '${event.pull_request.number}'
229
- TASKGRAPH_EXTRA_REFS: {$json: ["refs/notes/decision-parameters"]}
230
229
  - $if: 'tasks_for == "action" || tasks_for == "pr-action"'
231
230
  then:
232
231
  ACTION_TASK_GROUP_ID: '${action.taskGroupId}' # taskGroupId of the target task
@@ -1,5 +1,16 @@
1
1
  # Change Log
2
2
 
3
+ ## [22.0.0] - 2026-04-16
4
+
5
+ ### Fixed
6
+
7
+ - Decision task now fetches `refs/notes/decision-parameters` itself
8
+
9
+ ### Removed
10
+
11
+ - BREAKING CHANGE: Removed ability for `run-task` to fetch arbitrary extra refs
12
+ - BREAKING CHANGE: Removed docker-worker feature: relengapi-proxy
13
+
3
14
  ## [21.0.0] - 2026-04-13
4
15
 
5
16
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taskcluster-taskgraph
3
- Version: 21.0.0
3
+ Version: 22.0.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
@@ -3,6 +3,14 @@ Migration Guide
3
3
 
4
4
  This page can help when migrating Taskgraph across major versions.
5
5
 
6
+ 21.x -> 22.x
7
+ ------------
8
+
9
+ * If you have tasks using `docker-worker`'s `relengapi-proxy` feature, it is no
10
+ longer supported. Remove all references to it in your task definitions.
11
+ * Remove references to `<REPO>_EXTRA_REFS` in all `run-task` based tasks. These
12
+ refs must now be fetched as part of the task payload.
13
+
6
14
  20.x -> 21.x
7
15
  ------------
8
16
 
@@ -1,7 +1,7 @@
1
1
  ### Project
2
2
  [project]
3
3
  name = "taskcluster-taskgraph"
4
- version = "21.0.0"
4
+ version = "22.0.0"
5
5
  description = "Build taskcluster taskgraphs"
6
6
  readme = "README.rst"
7
7
  authors = [
@@ -94,7 +94,6 @@ source = ["src/taskgraph/", "src/taskgraph/run-task/", "packages", "test"]
94
94
  ### Lint and Format
95
95
  [tool.ruff]
96
96
  extend-exclude = [
97
- "taskcluster/scripts/external_tools",
98
97
  "src/taskgraph/run-task/robustcheckout.py"
99
98
  ]
100
99
  line-length = 88
@@ -267,7 +267,7 @@ def get_decision_parameters(graph_config, options):
267
267
  # load extra parameters from vcs note if able
268
268
  note_ref = "refs/notes/decision-parameters"
269
269
  if options.get("allow_parameter_override") and (
270
- note_params := repo.get_note(note_ref)
270
+ note_params := repo.get_note(note_ref, parameters["head_repository"])
271
271
  ):
272
272
  try:
273
273
  note_params = json.loads(note_params)
@@ -31,7 +31,7 @@ import time
31
31
  import urllib.error
32
32
  import urllib.request
33
33
  from pathlib import Path
34
- from typing import Dict, List, Optional
34
+ from typing import Dict, Optional
35
35
 
36
36
  SECRET_BASEURL_TPL = "{}/secrets/v1/secret/{{}}".format(
37
37
  os.environ.get("TASKCLUSTER_PROXY_URL", "http://taskcluster").rstrip("/")
@@ -640,7 +640,6 @@ def git_checkout(
640
640
  ssh_key_file: Optional[Path],
641
641
  ssh_known_hosts_file: Optional[Path],
642
642
  shallow: bool = False,
643
- extra_refs: Optional[List[str]] = None,
644
643
  ):
645
644
  assert head_ref or head_rev
646
645
 
@@ -735,14 +734,6 @@ def git_checkout(
735
734
  env=env,
736
735
  )
737
736
 
738
- if extra_refs:
739
- git_fetch(
740
- destination_path,
741
- *[f"{ref}:{ref}" for ref in extra_refs],
742
- remote=head_repo,
743
- env=env,
744
- )
745
-
746
737
  args = [
747
738
  "git",
748
739
  "checkout",
@@ -941,8 +932,6 @@ def collect_vcs_options(args, project, name):
941
932
  head_rev = os.environ.get(f"{env_prefix}_HEAD_REV")
942
933
  pip_requirements = os.environ.get(f"{env_prefix}_PIP_REQUIREMENTS")
943
934
  private_key_secret = os.environ.get(f"{env_prefix}_SSH_SECRET_NAME")
944
- if extra_refs := os.environ.get(f"{env_prefix}_EXTRA_REFS"):
945
- extra_refs = json.loads(extra_refs)
946
935
 
947
936
  store_path = os.environ.get("HG_STORE_PATH")
948
937
 
@@ -976,7 +965,6 @@ def collect_vcs_options(args, project, name):
976
965
  "ssh-secret-name": private_key_secret,
977
966
  "pip-requirements": pip_requirements,
978
967
  "shallow-clone": shallow_clone,
979
- "extra-refs": extra_refs,
980
968
  }
981
969
 
982
970
 
@@ -1026,7 +1014,6 @@ def vcs_checkout_from_args(options):
1026
1014
  ssh_key_file,
1027
1015
  ssh_known_hosts_file,
1028
1016
  shallow=options.get("shallow-clone", False),
1029
- extra_refs=options.get("extra-refs"),
1030
1017
  )
1031
1018
  elif options["repo-type"] == "hg":
1032
1019
  revision = hg_checkout(
@@ -268,7 +268,6 @@ class DockerWorkerPayloadSchema(Schema, forbid_unknown_fields=False, kw_only=Tru
268
268
  # image or in-tree docker image to run the task in.
269
269
  docker_image: DockerImage
270
270
  # worker features that should be enabled
271
- relengapi_proxy: bool
272
271
  chain_of_trust: bool
273
272
  taskcluster_proxy: bool
274
273
  allow_ptrace: bool
@@ -340,9 +339,6 @@ def build_docker_worker_payload(config, task, task_def):
340
339
 
341
340
  features = {}
342
341
 
343
- if worker.get("relengapi-proxy"):
344
- features["relengAPIProxy"] = True
345
-
346
342
  if worker.get("taskcluster-proxy"):
347
343
  features["taskclusterProxy"] = True
348
344
 
@@ -798,7 +794,6 @@ def set_defaults(config, tasks):
798
794
 
799
795
  worker = task["worker"]
800
796
  if worker["implementation"] in ("docker-worker",):
801
- worker.setdefault("relengapi-proxy", False)
802
797
  worker.setdefault("chain-of-trust", False)
803
798
  worker.setdefault("taskcluster-proxy", False)
804
799
  worker.setdefault("allow-ptrace", False)
@@ -215,9 +215,17 @@ class Repository(ABC):
215
215
  If this function returns an unexpected value, then make sure
216
216
  the revision was fetched from the remote repository."""
217
217
 
218
- def get_note(self, note: str, revision: Optional[str] = None) -> Optional[str]:
218
+ def get_note(
219
+ self,
220
+ note: str,
221
+ remote: str,
222
+ revision: Optional[str] = None,
223
+ ) -> Optional[str]:
219
224
  """Read a note attached to the given revision (defaults to HEAD).
220
225
 
226
+ The notes ref is fetched from ``remote`` first; a missing ref on the
227
+ remote is tolerated while other fetch failures propagate.
228
+
221
229
  Returns the note content as a string, or ``None`` if no note exists.
222
230
  Only supported by Git; returns ``None`` for all other VCS types.
223
231
  """
@@ -594,13 +602,37 @@ class GitRepository(Repository):
594
602
  return False
595
603
  raise
596
604
 
597
- def get_note(self, note: str, revision: Optional[str] = None) -> Optional[str]:
605
+ def get_note(
606
+ self,
607
+ note: str,
608
+ remote: str,
609
+ revision: Optional[str] = None,
610
+ ) -> Optional[str]:
598
611
  if not note.startswith("refs/notes/"):
599
612
  note = f"refs/notes/{note}"
600
613
 
601
- revision = revision or "HEAD"
602
614
  try:
603
- return self.run("notes", f"--ref={note}", "show", revision).strip()
615
+ self.run("fetch", remote, f"{note}:{note}", stderr=subprocess.PIPE)
616
+ except subprocess.CalledProcessError:
617
+ ls_output = self.run(
618
+ "ls-remote",
619
+ "--exit-code",
620
+ remote,
621
+ note,
622
+ return_codes=(2,),
623
+ stderr=subprocess.PIPE,
624
+ )
625
+ if not ls_output:
626
+ logger.info(
627
+ "Failed to fetch %s but the remote doesn't have it. Ignoring.", note
628
+ )
629
+ return None
630
+ raise
631
+
632
+ try:
633
+ return self.run(
634
+ "notes", f"--ref={note}", "show", revision or "HEAD"
635
+ ).strip()
604
636
  except subprocess.CalledProcessError as e:
605
637
  if e.returncode == 1:
606
638
  return None
@@ -1,5 +1,6 @@
1
1
  import os
2
2
  import platform
3
+ import tempfile
3
4
  from pathlib import Path
4
5
 
5
6
  import pytest
@@ -13,10 +14,22 @@ pytest_plugins = ("pytest-taskgraph",)
13
14
  # interference with tests.
14
15
  # This ignores ~/.hgrc
15
16
  os.environ["HGRCPATH"] = ""
16
- # This ignores system-level git config (eg: in /etc). There apperas to be
17
- # no way to ignore ~/.gitconfig other than overriding $HOME, which is overkill.
17
+ # This ignores system-level git config (eg: in /etc).
18
18
  os.environ["GIT_CONFIG_NOSYSTEM"] = "1"
19
19
 
20
+
21
+ @pytest.fixture(scope="session", autouse=True)
22
+ def git_global_config():
23
+ # run-task writes to the global git config, so point it at a real
24
+ # (writable) empty file instead of ~/.gitconfig.
25
+ fd, path = tempfile.mkstemp(prefix="taskgraph-gitconfig-")
26
+ os.close(fd)
27
+ os.environ["GIT_CONFIG_GLOBAL"] = path
28
+ yield
29
+ del os.environ["GIT_CONFIG_GLOBAL"]
30
+ os.unlink(path)
31
+
32
+
20
33
  # Some of the tests marked with this may be fixable on Windows; we should
21
34
  # look into these in more depth at some point.
22
35
  nowin = pytest.mark.skipif(
@@ -167,7 +167,9 @@ _BASE_OPTIONS = {
167
167
  def test_decision_parameters_note(mock_files_changed, mock_get_note):
168
168
  options = {**_BASE_OPTIONS, "allow_parameter_override": True}
169
169
  params = decision.get_decision_parameters(FAKE_GRAPH_CONFIG, options)
170
- mock_get_note.assert_called_once_with("refs/notes/decision-parameters")
170
+ mock_get_note.assert_called_once_with(
171
+ "refs/notes/decision-parameters", _BASE_OPTIONS["head_repository"]
172
+ )
171
173
  assert params["build_number"] == 99
172
174
 
173
175
 
@@ -1,5 +1,4 @@
1
1
  import functools
2
- import json
3
2
  import os
4
3
  import site
5
4
  import stat
@@ -180,17 +179,6 @@ def test_install_pip_requirements_with_uv(
180
179
  {"shallow-clone": True},
181
180
  id="git_with_shallow_clone",
182
181
  ),
183
- pytest.param(
184
- {},
185
- {
186
- "REPOSITORY_TYPE": "git",
187
- "HEAD_REPOSITORY": "https://github.com/example/repo",
188
- "HEAD_REV": "abc123",
189
- "EXTRA_REFS": json.dumps(["refs/notes/taskgraph", "refs/notes/other"]),
190
- },
191
- {"extra-refs": ["refs/notes/taskgraph", "refs/notes/other"]},
192
- id="git_with_extra_refs",
193
- ),
194
182
  ],
195
183
  )
196
184
  def test_collect_vcs_options(
@@ -228,7 +216,6 @@ def test_collect_vcs_options(
228
216
  "shallow-clone": False,
229
217
  "ssh-secret-name": env.get("SSH_SECRET_NAME"),
230
218
  "store-path": env.get("HG_STORE_PATH"),
231
- "extra-refs": None,
232
219
  }
233
220
  if "PIP_REQUIREMENTS" in env:
234
221
  expected["pip-requirements"] = os.path.join(
@@ -651,36 +638,3 @@ def test_main_abspath_environment(mocker, run_main):
651
638
  assert env.get("MOZ_UV_HOME") == "/builds/worker/dir/uv"
652
639
  for key in envvars:
653
640
  assert env[key] == "/builds/worker/file"
654
-
655
-
656
- def test_git_checkout_extra_refs(mock_stdin, run_task_mod, mock_git_repo, tmp_path):
657
- """extra_refs are fetched into the local repo during checkout."""
658
- # Add a notes ref to the source repo
659
- rev = mock_git_repo["main"][-1]
660
- subprocess.check_call(
661
- ["git", "notes", "--ref=refs/notes/taskgraph", "add", "-m", "test", rev],
662
- cwd=mock_git_repo["path"],
663
- )
664
-
665
- destination = tmp_path / "destination"
666
- run_task_mod.git_checkout(
667
- destination_path=str(destination),
668
- head_repo=mock_git_repo["path"],
669
- base_repo=mock_git_repo["path"],
670
- base_rev=None,
671
- head_ref="main",
672
- head_rev=None,
673
- ssh_key_file=None,
674
- ssh_known_hosts_file=None,
675
- extra_refs=["refs/notes/taskgraph"],
676
- )
677
-
678
- # Verify the notes ref is available locally
679
- result = subprocess.run(
680
- ["git", "notes", "--ref=refs/notes/taskgraph", "show", rev],
681
- cwd=str(destination),
682
- capture_output=True,
683
- text=True,
684
- )
685
- assert result.returncode == 0
686
- assert "test" in result.stdout
@@ -653,19 +653,21 @@ def test_get_changed_files_with_null_base_revision_shallow_clone(
653
653
 
654
654
  def test_get_note_git(git_repo, tmpdir):
655
655
  """get_note returns note content when present, None otherwise."""
656
- repo_path = tmpdir.join("git")
657
- shutil.copytree(git_repo, repo_path)
658
- repo = get_repository(str(repo_path))
656
+ src_path = str(tmpdir.join("git-src"))
657
+ dst_path = str(tmpdir.join("git-dst"))
658
+ shutil.copytree(git_repo, src_path)
659
+ shutil.copytree(git_repo, dst_path)
660
+ repo = get_repository(dst_path)
659
661
 
660
- # No note yet
661
- assert repo.get_note("try-config") is None
662
+ # No note yet on the remote
663
+ assert repo.get_note("try-config", src_path) is None
662
664
 
663
665
  rev = repo.head_rev
664
666
  subprocess.check_call(
665
667
  ["git", "notes", "--ref=refs/notes/try-config", "add", "-m", "test note", rev],
666
- cwd=repo.path,
668
+ cwd=src_path,
667
669
  )
668
670
 
669
- assert repo.get_note("try-config") == "test note"
670
- assert repo.get_note("try-config", rev) == "test note"
671
- assert repo.get_note("other") is None
671
+ assert repo.get_note("try-config", src_path) == "test note"
672
+ assert repo.get_note("try-config", src_path, revision=rev) == "test note"
673
+ assert repo.get_note("other", src_path) is None
@@ -2587,7 +2587,7 @@ wheels = [
2587
2587
 
2588
2588
  [[package]]
2589
2589
  name = "taskcluster-taskgraph"
2590
- version = "21.0.0"
2590
+ version = "22.0.0"
2591
2591
  source = { editable = "." }
2592
2592
  dependencies = [
2593
2593
  { name = "appdirs" },