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.
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.pre-commit-config.yaml +1 -2
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.taskcluster.yml +0 -1
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/CHANGELOG.md +11 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/PKG-INFO +1 -1
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/migrations.rst +8 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/pyproject.toml +1 -2
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/decision.py +1 -1
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/run-task/run-task +1 -14
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/task.py +0 -5
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/vcs.py +36 -4
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/conftest.py +15 -2
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_decision.py +3 -1
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_scripts_run_task.py +0 -46
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_vcs.py +11 -9
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/uv.lock +1 -1
- taskcluster_taskgraph-21.0.0/taskcluster/scripts/external_tools/tooltool.py +0 -1502
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.codespell-ignore-words.txt +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/CODEOWNERS +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/dependabot.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/workflows/codeql-analysis.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/workflows/pre-commit-autoupdate.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/workflows/pre-commit.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.github/workflows/pypi-publish.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.gitignore +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.readthedocs.yaml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/.yamllint +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/CODE_OF_CONDUCT.md +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/CONTRIBUTING.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/LICENSE +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/Makefile +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/README.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/index.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/kind.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/loading.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/optimization.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/overview.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/scopes.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/task-graphs.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/concepts/transforms.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/conf.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/contributing.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/glossary.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/bootstrap-taskgraph.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/create-actions.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/create-tasks.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/debugging.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/docker.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/index.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/load-task-locally.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/resolve-keyed-by.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/run-locally.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/send-notifications.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/howto/use-fetches.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/index.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/cli.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/index.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/optimization-strategies.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/parameters.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/modules.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.actions.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.loader.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.optimize.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.transforms.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.transforms.run.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/source/taskgraph.util.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/transforms/chunking.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/transforms/from_deps.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/transforms/index.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/transforms/matrix.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/reference/transforms/task_context.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/tutorials/connecting-taskcluster.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/tutorials/creating-a-task-graph.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/tutorials/example-taskcluster.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/tutorials/getting-started.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/docs/tutorials/index.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/make.bat +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/pytest-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/pytest-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/pytest-taskgraph/src/pytest_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/vcs.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/sphinx-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/sphinx-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/autoschema.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/__init__.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/add_new_jobs.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/cancel.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/cancel_all.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/registry.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/retrigger.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/actions/util.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/config.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/create.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/docker.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/filter_tasks.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/generator.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/graph.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/loader/__init__.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/loader/default.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/loader/transform.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/main.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/morph.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/optimize/__init__.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/optimize/base.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/optimize/strategies.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/parameters.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/run-task/fetch-content +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/run-task/hgrc +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/run-task/robustcheckout.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/target_tasks.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/task.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/taskgraph.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/__init__.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/base.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/cached_tasks.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/chunking.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/code_review.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/docker_image.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/fetch.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/from_deps.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/matrix.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/notify.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/run/__init__.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/run/common.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/run/index_search.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/run/run_task.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/run/toolchain.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/task_context.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/__init__.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/archive.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/attributes.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/cached_tasks.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/caches.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/copy.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/dependencies.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/docker.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/hash.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/json.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/keyed_by.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/parameterization.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/path.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/python_path.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/readonlydict.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/schema.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/set_name.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/shell.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/taskcluster.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/taskgraph.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/templates.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/time.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/treeherder.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/verify.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/workertypes.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/util/yaml.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/REGISTRY +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/decision/Dockerfile +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/decision/HASH +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/decision/README.md +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/decision/VERSION +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/decision/system-setup.sh +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/fetch/Dockerfile +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/image_builder/README.rst +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/index-task/Dockerfile +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/index-task/README +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/index-task/insert-indexes.js +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/index-task/package.json +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/index-task/yarn.lock +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/python/Dockerfile +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/run-task/Dockerfile +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/run-task/system-setup.sh +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/skopeo/Dockerfile +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/skopeo/policy.json +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/docker/skopeo/push_image.sh +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/check/kind.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/codecov/kind.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/complete/kind.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/doc/kind.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/fetch/kind.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/push-image/kind.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/test/kind.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/test/linux.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/kinds/test/windows.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/scripts/codecov-upload.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/self_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/self_taskgraph/custom_parameters.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/self_taskgraph/custom_target_tasks.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/self_taskgraph/transforms/add_pr_route.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/self_taskgraph/transforms/push_image.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/test/params/main-repo-pull-request-untrusted.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/test/params/main-repo-pull-request.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/test/params/main-repo-push.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/test/params/main-repo-release-pytest-taskgraph.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/taskcluster/test/params/main-repo-release-taskcluster-taskgraph.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/cookiecutter.json +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/hooks/post_gen_project.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster/docker/linux/Dockerfile +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/hello/kind.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster/{{cookiecutter.project_slug}}_taskgraph/transforms/hello.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/template/{{cookiecutter.project_name}}/taskcluster.github.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/__init__.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/automationrelevance.json +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/task_context.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/docker/hello-world/Dockerfile +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/docker/hello-world-tag/Dockerfile +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/docker/hello-world-tag/REGISTRY +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/docker/hello-world-tag/VERSION +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/scripts/toolchain/run.ps1 +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/scripts/toolchain/run.sh +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/taskcluster/test_taskgraph/transforms/foo.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/data/testmod/thing.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/mockedopen.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_actions_rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_actions_registry.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_config.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_create.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_docker.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_generator.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_graph.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_main.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_morph.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_optimize.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_optimize_strategies.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_parameters.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_scripts_fetch_content.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_target_tasks.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_taskgraph.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transform_chunking.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transform_docker_image.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transform_task_context.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_base.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_cached_tasks.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_fetch.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_from_deps.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_matrix.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_notify.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_run.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_run_run_task.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_run_toolchain.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_transforms_task.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_archive.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_attributes.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_cached_tasks.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_copy.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_dependencies.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_docker.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_json.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_keyed_by.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_parameterization.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_path.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_python_path.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_readonlydict.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_schema.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_taskcluster.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_templates.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_time.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_treeherder.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_verify.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_workertypes.py +0 -0
- {taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/test/test_util_yaml.py +0 -0
|
@@ -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
|
|
@@ -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 = "
|
|
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)
|
{taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/run-task/run-task
RENAMED
|
@@ -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,
|
|
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(
|
{taskcluster_taskgraph-21.0.0 → taskcluster_taskgraph-22.0.0}/src/taskgraph/transforms/task.py
RENAMED
|
@@ -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(
|
|
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(
|
|
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
|
-
|
|
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).
|
|
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(
|
|
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
|
-
|
|
657
|
-
|
|
658
|
-
|
|
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=
|
|
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
|